فتح
- الاجتياح Openshift.
- التكوين بعد التثبيت.
- إنشاء وتوصيل الكهروضوئية.
- إنشاء ونشر مشروع Red Hat Decision Manager (مشروع تناظري لمؤسسة kie-workbench).
- إنشاء ونشر مشاريع AMQ (red hat active mq) و postgressql باستخدام مستودعات ثابتة.
- إنشاء مشاريع منفصلة للخدمات ، وقوالب لهم ، وخطوط الأنابيب ، والتكامل مع gitlab ، gitlab regestry.
1. Openshift الاجتياح
متطلبات الخادم ، وإعداد خوادم نظام أسماء النطاقات ، وقائمة أسماء الخوادم ، ومتطلبات الخادم.
الحد الأدنى من المتطلبات موجز - يجب أن يكون لكل الخوادم حد أدنى 16 جيجا بايت من رام 2 وما لا يقل عن 100 غيغابايت لاحتياجات عامل الميناء.
يجب أن يكون لنظام أسماء النطاقات المستندة إلى الربط التكوين التالي.
dkm - master، dk0 - منفذة، ifr - البنية التحتية، bln - balancer، shd - nfs، dkr - عقدة التحكم التي تم تكوين الكتلة بها، تم التخطيط لها أيضا كعقدة منفصلة تحت Regestry regestry.
db.osh $TTL 1h @ IN SOA test.osh. root.test.osh. ( 2008122601 ; Serial 28800 ; Refresh 14400 ; Retry 604800 ; Expire - 1 week 86400 ) ; Minimum @ IN NS test.osh. @ IN A 127.0.0.1 rnd-osh-dk0-t01 IN A 10.19.86.18 rnd-osh-dk0-t02 IN A 10.19.86.19 rnd-osh-dk0-t03 IN A 10.19.86.20 rnd-osh-dkm-t01 IN A 10.19.86.21 rnd-osh-dkm-t02 IN A 10.19.86.22 rnd-osh-dkm-t03 IN A 10.19.86.23 rnd-osh-ifr-t01 IN A 10.19.86.24 rnd-osh-ifr-t02 IN A 10.19.86.25 rnd-osh-ifr-t03 IN A 10.19.86.26 rnd-osh-bln-t01 IN A 10.19.86.27 rnd-osh-shd-t01 IN A 10.19.86.28 rnd-osh-dkr-t01 IN A 10.19.86.29 lb IN A 10.19.86.27 openshift IN A 10.19.86.27 api-openshift IN A 10.19.86.27 *.apps.openshift IN A 10.19.86.21 *.apps.openshift IN A 10.19.86.22 *.apps.openshift IN A 10.19.86.23
db.rv.osh $TTL 1h @ IN SOA test.osh. root.test.osh. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS test.osh. @ IN A 127.0.0.1 18 IN PTR rnd-osh-dk0-t01.test.osh. 19 IN PTR rnd-osh-dk0-t02.test.osh. 20 IN PTR rnd-osh-dk0-t03.test.osh. 21 IN PTR rnd-osh-dkm-t01.test.osh. 22 IN PTR rnd-osh-dkm-t02.test.osh. 23 IN PTR rnd-osh-dkm-t03.test.osh. 24 IN PTR rnd-osh-ifr-t01.test.osh. 25 IN PTR rnd-osh-ifr-t02.test.osh. 26 IN PTR rnd-osh-ifr-t03.test.osh. 27 IN PTR rnd-osh-bln-t01.test.osh. 28 IN PTR rnd-osh-shd-t01.test.osh. 29 IN PTR rnd-osh-dkr-t01.test.osh. 27 IN PTR lb.test.osh. 27 IN PTR api-openshift.test.osh. named.conf.default-zones
zone "test.osh" IN { type master; file "/etc/bind/db.osh"; allow-update { none; }; notify no; }; zone "86.19.10.in-addr.arpa" { type master; file "/etc/bind/db.rv.osh"; };
إعداد الخادمبعد توصيل الاشتراك. تمكين المستودعات وتثبيت الحزم التي تحتاجها في البداية.
rm -rf /etc/yum.repos.d/cdrom.repo subscription-manager repos --disable="*" subscription-manager repos --enable="rhel-7-server-rpms" --enable="rhel-7-server-extras-rpms" --enable="rhel-7-server-ose-3.10-rpms" --enable="rhel-7-server-ansible-2.4-rpms" yum -y install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct yum -y update yum -y install docker
تكوين تخزين عامل الميناء (محرك منفصل).
systemctl stop docker rm -rf /var/lib/docker/* echo "STORAGE_DRIVER=overlay2" > /etc/sysconfig/docker-storage-setup echo "DEVS=/dev/sdc" >> /etc/sysconfig/docker-storage-setup echo "CONTAINER_ROOT_LV_NAME=dockerlv" >> /etc/sysconfig/docker-storage-setup echo "CONTAINER_ROOT_LV_SIZE=100%FREE" >> /etc/sysconfig/docker-storage-setup echo "CONTAINER_ROOT_LV_MOUNT_PATH=/var/lib/docker" >> /etc/sysconfig/docker-storage-setup echo "VG=docker-vg" >> /etc/sysconfig/docker-storage-setup systemctl enable docker docker-storage-setup systemctl is-active docker systemctl restart docker docker info | grep Filesystem
تثبيت الحزم اللازمة المتبقية.
yum -y install atomic atomic trust show yum -y install docker-novolume-plugin systemctl enable docker-novolume-plugin systemctl start docker-novolume-plugin yum -y install openshift-ansible
إنشاء ، إضافة مستخدم ، وكذلك مفاتيح.
useradd --create-home --groups users,wheel ocp sed -i 's/# %wheel/%wheel/' /etc/sudoers mkdir -p /home/ocp/.ssh echo "ssh-rsa AAAAB3NzaC........8Ogb3Bv ocp SSH Key" >> /home/ocp/.ssh/authorized_keys
في حالة وجود تعارض مع الشبكات الفرعية المستخدمة بالفعل - قم بتغيير العنوان الافتراضي داخل الحاويات.
echo '{ "bip": "172.26.0.1/16" }' > /etc/docker/daemon.json systemctl restart docker
تكوين مدير الشبكة. (يجب أن يكون نظام أسماء النطاقات قادراً على مواجهة العالم الخارجي)
nmcli connection modify ens192 ipv4.dns 172.17.70.140 nmcli connection modify ens192 ipv4.dns-search cluster.local +ipv4.dns-search test.osh +ipv4.dns-search cpgu systemctl stop firewalld systemctl disable firewalld systemctl restart network
تحرير ، إذا لزم الأمر ، اسم الجهاز في الاسم الكامل.
hhh=$(cat /etc/hostname) echo "$hhh".test.osh > /etc/hostname
بعد الخطوات المكتملة ، أعد تشغيل الخادم.
تحضير عقدة التحكم dkr
الفرق بين عقدة التحكم والباقي هو أنه لا توجد حاجة لتوصيل عامل ميناء إلى قرص منفصل.
هناك أيضا حاجة لتكوين NTP.
yum install ntp -y systemctl enable ntpd service ntpd start service ntpd status ntpq -p chmod 777 -R /usr/share/ansible/openshift-ansible/
تحتاج أيضًا إلى إضافة المفتاح الخاص إلى ocp.
وصول SSH كما ocp على جميع العقد.
تحضير ملف الجرد وتوسيع الكتلة. host-poc.yaml [OSEv3:children] masters nodes etcd lb nfs [OSEv3:vars] ansible_ssh_user=ocp ansible_become=yes openshift_override_hostname_check=True openshift_master_cluster_method=native openshift_disable_check=memory_availability,disk_availability,package_availability openshift_deployment_type=openshift-enterprise openshift_release=v3.10 oreg_url=registry.access.redhat.com/openshift3/ose-${component}:${version} debug_level=2 os_firewall_use_firewalld=True openshift_install_examples=true openshift_clock_enabled=True openshift_router_selector='node-role.kubernetes.io/infra=true' openshift_registry_selector='node-role.kubernetes.io/infra=true' openshift_examples_modify_imagestreams=true os_sdn_network_plugin_name='redhat/openshift-ovs-multitenant' openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}] openshift_master_htpasswd_users={'admin': '$apr1$pQ3QPByH$5BDkrp0m5iclRske.M0m.0'} openshift_master_default_subdomain=apps.openshift.test.osh openshift_master_cluster_hostname=api-openshift.test.osh openshift_master_cluster_public_hostname=openshift.test.osh openshift_enable_unsupported_configurations=true openshift_use_crio=true openshift_crio_enable_docker_gc=true # registry openshift_hosted_registry_storage_kind=nfs openshift_hosted_registry_storage_access_modes=['ReadWriteMany'] openshift_hosted_registry_storage_nfs_directory=/exports openshift_hosted_registry_storage_nfs_options='*(rw,root_squash)' openshift_hosted_registry_storage_volume_name=registry openshift_hosted_registry_storage_volume_size=30Gi # cluster monitoring openshift_cluster_monitoring_operator_install=true openshift_cluster_monitoring_operator_node_selector={'node-role.kubernetes.io/master': 'true'} #metrics openshift_metrics_install_metrics=true openshift_metrics_hawkular_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_metrics_cassandra_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_metrics_heapster_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_metrics_storage_kind=nfs openshift_metrics_storage_access_modes=['ReadWriteOnce'] openshift_metrics_storage_nfs_directory=/exports openshift_metrics_storage_nfs_options='*(rw,root_squash)' openshift_metrics_storage_volume_name=metrics openshift_metrics_storage_volume_size=20Gi #logging openshift_logging_kibana_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_logging_curator_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_logging_es_nodeselector={"node-role.kubernetes.io/infra": "true"} openshift_logging_install_logging=true openshift_logging_es_cluster_size=1 openshift_logging_storage_kind=nfs openshift_logging_storage_access_modes=['ReadWriteOnce'] openshift_logging_storage_nfs_directory=/exports openshift_logging_storage_nfs_options='*(rw,root_squash)' openshift_logging_storage_volume_name=logging openshift_logging_storage_volume_size=20Gi #ASB ansible_service_broker_install=true openshift_hosted_etcd_storage_kind=nfs openshift_hosted_etcd_storage_nfs_options="*(rw,root_squash,sync,no_wdelay)" openshift_hosted_etcd_storage_nfs_directory=/opt/osev3-etcd openshift_hosted_etcd_storage_volume_name=etcd-vol2 openshift_hosted_etcd_storage_access_modes=["ReadWriteOnce"] openshift_hosted_etcd_storage_volume_size=30G openshift_hosted_etcd_storage_labels={'storage': 'etcd'} ansible_service_broker_local_registry_whitelist=['.*-apb$'] #cloudforms #openshift_management_install_management=true #openshift_management_app_template=cfme-template # host group for masters [masters] rnd-osh-dkm-t0[1:3].test.osh # host group for etcd [etcd] rnd-osh-dkm-t0[1:3].test.osh [lb] rnd-osh-bln-t01.test.osh containerized=False [nfs] rnd-osh-shd-t01.test.osh [nodes] rnd-osh-dkm-t0[1:3].test.osh openshift_node_group_name='node-config-master' rnd-osh-ifr-t0[1:3].test.osh openshift_node_group_name='node-config-infra' rnd-osh-dk0-t0[1:3].test.osh openshift_node_group_name='node-config-compute'
تشغيل كتب اللعب بالتناوب.
ansible-playbook -i host-poc.yaml /usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml ansible-playbook -i host-poc.yaml /usr/share/ansible/openshift-ansible/playbooks/openshift-checks/pre-install.yml ansible-playbook -i host-poc.yaml /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml
إذا كان كل شيء على مايرام في النهاية سيكون شيء مثل التالي.

تحرير ملف المضيف المحلي للتحقق منه بعد تشغيل عملية رفع التشغيل عن طريق واجهة الويب.
10.19.86.18 rnd-osh-dk0-t01.test.osh 10.19.86.19 rnd-osh-dk0-t02.test.osh 10.19.86.20 rnd-osh-dk0-t03.test.osh 10.19.86.21 rnd-osh-dkm-t01.test.osh 10.19.86.22 rnd-osh-dkm-t02.test.osh 10.19.86.23 rnd-osh-dkm-t03.test.osh 10.19.86.24 rnd-osh-ifr-t01.test.osh 10.19.86.25 rnd-osh-ifr-t02.test.osh 10.19.86.26 rnd-osh-ifr-t03.test.osh 10.19.86.27 rnd-osh-bln-t01.test.osh openshift.test.osh 10.19.86.28 rnd-osh-shd-t01.test.osh 10.19.86.29 rnd-osh-dkr-t01.test.osh
التحقق من صحة على url
openshift.test.osh : 8443
2. التكوين بعد التثبيت
أدخل dkm.
oc login -u system:admin oc adm policy add-cluster-role-to-user cluster-admin admin --rolebinding-name=cluster-admin
تحقق من أنه من الممكن رؤية المشروع المخفي مسبقًا (openhift ، على سبيل المثال) في واجهة الويب.
3. إنشاء وتوصيل الكهروضوئية
إنشاء حجم ثابت على خادم NFS.
mkdir -p /exports/examplpv chmod -R 777 /exports/examplpv chown nfsnobody:nfsnobody -R /exports/examplpv echo '"/exports/examplpv" *(rw,root_squash)' >> /etc/exports.d/openshift-ansible.exports exportfs -ar restorecon -RvF
إضافة الكهروضوئية إلى openshift.
يجب عليك إنشاء مشروع جديد لمشروع امتحانات مشروع oc.
إذا كان المشروع قد تم إنشاؤه بالفعل ، فانتقل إليه oc project examplv-project. إنشاء yaml مع المحتوى التالي.
apiVersion: v1 kind: PersistentVolume metadata: name: examplpv-ts1 spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce nfs: path: /exports/examplpv server: rnd-osh-shd-t01 persistentVolumeReclaimPolicy: Recycle
وتطبيق. تطبيق oc -f filename.yaml
بعد القيام
oc get pv
سيتم إنشاء الكهروضوئية تكون مرئية في القائمة.
4. إنشاء ونشر مشروع Red Hat Decision Manager (التناظرية بين المؤسسات من طاولة العمل)
تحقق من القوالب.
oc get imagestreamtag -n openshift | grep rhdm

إضافة قوالب - يمكن العثور على رابط ووصف أكثر اكتمالا
unzip rhdm-7.2.1-openshift-templates.zip -d ./rhdm-7.2.1-openshift-templates
إنشاء مشروع جديد:
oc new-project rhdm72
إضافة تفويض إلى خادم التسجيل.
docker login registry.redhat.io cat ~/.docker/config.json oc create secret generic pull-secret-name --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson oc secrets link default pull-secret-name --for=pull oc secrets link builder pull-secret-name
استيراد imagetream ، مفتاح إنشاء خادم القرار ، القرار المركزي.
keytool -genkeypair -alias jboss -keyalg RSA -keystore keystore.jks -storepass mykeystorepass --dname "CN=STP,OU=Engineering,O=POC.mos,L=Raleigh,S=NC,C=RU" oc create -f rhdm72-image-streams.yaml oc create secret generic kieserver-app-secret --from-file=keystore.jks oc create secret generic decisioncentral-app-secret --from-file=keystore.jks
إنشاء حجم ثابت على خادم NFS.
mkdir -p /exports/rhdm72 chmod -R 777 /exports/rhdm72 chown nfsnobody:nfsnobody -R /exports/rhdm72 echo '"/exports/rhamq72" *(rw,root_squash)' >> /etc/exports.d/openshift-ansible.exports exportfs -ar restorecon -RvF
أضف pv إلى المشروع:
apiVersion: v1 kind: PersistentVolume metadata: name: rhdm72-pv1 spec: capacity: storage: 20Gi accessModes: - ReadWriteMany nfs: path: /exports/rhdm72 server: rnd-osh-shd-t01 persistentVolumeReclaimPolicy: Recycle
Rhdm70 المطلوبة المعلمات الكهروضوئية
أكواد الوصول:
- ReadWriteOnce
لكن 7.2 يتطلب بالفعل
أكواد الوصول:
- ReadWriteMany
Apply - oc Apply -f filename.yaml
+ تحقق من أن الكهروضوئية التي تم إنشاؤها أصبحت متاحة.

إنشاء تطبيق من القوالب وفقًا للوثائق الرسمية.
oc new-app -f rhdm-7.2.1-openshift-templates/templates/rhdm72-authoring.yaml -p DECISION_CENTRAL_HTTPS_SECRET=decisioncentral-app-secret -p KIE_SERVER_HTTPS_SECRET=kieserver-app-secret
سيتم نشر التطبيق تلقائيًا عند الانتهاء من سحب الصور في سجل عامل ميناء.
حتى هذه اللحظة ، فإن الوضع سيكون كذلك.

إذا نقرت على الرابط الخاص بالصورة ، فسيكون الخطأ التالي

يجب عليك تغيير رابط تحميل الصور عن طريق اختيار تحرير yaml من registry.redhat.io إلى registry.access.redhat.com

للانتقال إلى الخدمة المنشورة في واجهة الويب الخاصة بها ، أضف عنوان url التالي إلى ملف المضيفين

إلى أي من العقد أدناه
10.19.86.25 rnd-osh-ifr-t02.test.osh myapp-rhdmcentr-rhdm72.apps.openshift.test.osh

5. إنشاء ونشر مشاريع AMQ (red hat active mq) و postgressql باستخدام مستودعات ثابتة
رهامقإنشاء مشروع جديد
oc new-project rhamq-and-pgsql
نحن استيراد الصور في حالة غيابها.
oc replace --force -f https://raw.githubusercontent.com/jboss-container-images/jboss-amq-7-broker-openshift-image/72-1.1.GA/amq-broker-7-image-streams.yaml oc replace --force -f https://raw.githubusercontent.com/jboss-container-images/jboss-amq-7-broker-openshift-image/72-1.1.GA/amq-broker-7-scaledown-controller-image-streams.yaml oc import-image amq-broker-72-openshift:1.1 oc import-image amq-broker-72-scaledown-controller-openshift:1.0
تركيب القالب
for template in amq-broker-72-basic.yaml \ amq-broker-72-ssl.yaml \ amq-broker-72-custom.yaml \ amq-broker-72-persistence.yaml \ amq-broker-72-persistence-ssl.yaml \ amq-broker-72-persistence-clustered.yaml \ amq-broker-72-persistence-clustered-ssl.yaml; do oc replace --force -f \ https://raw.githubusercontent.com/jboss-container-images/jboss-amq-7-broker-openshift-image/72-1.1.GA/templates/${template} done
إضافة دور إلى حساب خدمة.
oc policy add-role-to-user view -z default
خلق الكهروضوئية على خادم NFS
mkdir -p /exports/pgmq chmod -R 777 /exports/pgmq chown nfsnobody:nfsnobody -R /exports/pgmq echo '"/exports/pgmq" *(rw,root_squash)' >> /etc/exports.d/openshift-ansible.exports exportfs -ar restorecon -RvF
إنشاء yaml
pgmq_storage.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: pgmq-ts1 spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce nfs: path: /exports/pgmq server: rnd-osh-shd-t01 persistentVolumeReclaimPolicy: Recycle
تطبيق الكهروضوئية
oc apply -f pgmq_storage.yaml
إنشاء من القالب

تم

للحصول على خيارات أخرى مع تجميع ssl ، إلخ. يمكنك الرجوع إلى الوثائق
access.redhat.com/documentation/en-us/red_hat_amq/7.2/html/deploying_amq_broker_on_openshift_container_platformPostgresql
نقوم بإنشاء PV آخر بنفس الطريقة التي قمنا بها من أجل MQ.
mkdir -p /exports/pgmq2 chmod -R 777 /exports/pgmq2 chown nfsnobody:nfsnobody -R /exports/pgmq2 echo '"/exports/pgmq2" *(rw,root_squash)' >> /etc/exports.d/openshift-ansible.exports exportfs -ar restorecon -RvF
pgmq_storage.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: pgmq-ts2 spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce nfs: path: /exports/pgmq2 server: rnd-osh-shd-t01 persistentVolumeReclaimPolicy: Recycle

نملأ المعلمات اللازمة


تم
6. إنشاء مشاريع منفصلة للخدمات ، وقوالب لها ، وخط أنابيب ، والتكامل مع gitlab ، gitlab regestry
الخطوة الأولى هي إنشاء مشروع. oc new-project ttttt

في البداية بدون قالب ، يمكنك إنشائه في تطبيق يدوي.
هناك طريقتان.الأول هو ببساطة استخدام صورة جاهزة ، ولكن بعد ذلك لن تكون إصدارات الصور ، وما إلى ذلك ، متاحة ، ولكنها ستكون في بعض الحالات ذات صلة.
بادئ ذي بدء ، تحتاج إلى الحصول على بيانات للمصادقة على التسجيل. باستخدام الصورة المجمعة كمثال في Gitlab ، يتم ذلك مثل هذا.

تحتاج أولاً إلى إنشاء أسرار للوصول إلى سجل عامل ميناء - راجع الخيارات وبناء الجملة.
oc create secret docker-registry
ثم خلق سر
oc create secret docker-registry gitlabreg --docker-server='gitlab.xxx.com:4567' --docker-username='gitlab+deploy-token-1' --docker-password='syqTBSMjHtT_t-X5fiSY' --docker-email='email'
ثم إنشاء تطبيقنا.
oc new-app --docker-image='gitlab.xxx.com:4567/oko/oko-service:latest'
إذا حدث خطأ ما ، ولم تمتد الصورة في إعدادات التطبيق ، فحدد سر إعادة التسجيل لدينا.

ثم نضيف متغيرات البيئة اللازمة.

فعلت - الحاوية على قيد الحياة.
ثم انقر على الحق في تحرير yaml وتحديد المنافذ.

بعد ذلك ، للوصول إلى الحاوية الخاصة بنا ، تحتاج إلى إنشاء مسار ، ولكن من المستحيل إنشاؤه دون خدمة ، وبالتالي فإن أول ما تحتاج إليه لإنشاء خدمة.
خدمة
kind: Service apiVersion: v1 metadata: name: oko-service spec: type: ClusterIP ports: - port: 9000 protocol: TCP targetPort: 9000 selector: app: oko-service sessionAffinity: None status: loadBalancer: {}
oc apply -f service.yaml
إنشاء الطريق.

سجل رابط في المضيفين على جهازك تبحث في واحدة من العقد أدناه.

سجل رابط في المضيفين على جهازك تبحث في واحدة من العقد أدناه.
تم
قالب.يتم إنشاء القالب عن طريق تفريغ yaml بشكل منفصل جميع المكونات المتعلقة بالخدمة.
وهي ، في هذه الحالة هو أسرار العاصمة خدمة الطريق.
يمكنك رؤية كل ما تم إنجازه في مشروع محدد
oc get all
تفريغ مثيرة للاهتمام
oc get deploymentconfig.apps.openshift.io oko-service -o yaml
او
oc get d oko-service -o yaml
ثم يمكنك أن تأخذ كأساس لأي قالب لـ openihft ودمج ما تم استلامه للحصول على القالب.
في هذه الحالة ، ستبدو النتيجة بالشكل التالي:
القالب
kind: "Template" apiVersion: "v1" metadata: name: oko-service-template objects: - kind: DeploymentConfig apiVersion: v1 metadata: name: oko-service annotations: description: "ImageStream Defines how to build the application oko-service" labels: app: oko-service spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: oko-service deploymentconfig: oko-service template: metadata: labels: app: oko-service spec: selector: app: oko-service deploymentconfig: oko-service containers: - env: - name: serverPort value: "9000" - name: storeLogin value: "iii" - name: storePassword value: "trCsm5" - name: storeApiUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2" - name: storeWsdlUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2/CustomWebService2.wsdl" - name: logLevel value: "INFO" - name: logPath value: "/var/log/efp-oko.log" ports: - containerPort: 9000 name: acces protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: / port: 9000 scheme: HTTP initialDelaySeconds: 5 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 image: gitlab.xxx.com:4567/oko/oko-service imagePullPolicy: Always name: oko-service imagePullSecrets: - name: gitlab.xxx.com type: ImageChange strategy: activeDeadlineSeconds: 21600 resources: {} rollingParams: intervalSeconds: 1 maxSurge: 25% maxUnavailable: 25% timeoutSeconds: 600 updatePeriodSeconds: 5 type: Rolling triggers: - type: "ImageChange" imageChangeParams: automatic: true containerNames: - "oko-service" from: kind: ImageStream name: 'oko-service:latest' - kind: ImageStream apiVersion: v1 metadata: name: oko-service annotations: openshift.io/generated-by: OpenShiftNewApp labels: app: oko-service deploymentconfig: oko-service spec: dockerImageRepository: gitlab.xxx.com:4567/oko/oko-service tags: - annotations: openshift.io/imported-from: gitlab.xxx.com:4567/oko/oko-service from: kind: DockerImage name: gitlab.xxx.com:4567/oko/oko-service importPolicy: insecure: "true" name: latest referencePolicy: type: Source forcePull: true - kind: Service apiVersion: v1 metadata: name: oko-service spec: type: ClusterIP ports: - port: 9000 protocol: TCP targetPort: 9000 selector: app: oko-service sessionAffinity: None status: loadBalancer: {} - kind: Route apiVersion: route.openshift.io/v1 metadata: name: oko-service spec: host: oko-service.moxs.ru to: kind: Service name: oko-service weight: 100 wildcardPolicy: None status: ingress: - conditions: host: oko-service.xxx.com routerName: router wildcardPolicy: None
يمكنك إضافة أسرار هنا ، في المثال التالي ، سننظر في خيار الخدمة مع إنشاء على جانب openhift حيث ستكون الأسرار في القالب.
الطريقة الثانيةإنشاء مشروع مع المراحل الكاملة لتجميع الصور ، خط أنابيب بسيط وتجميع بواسطة Push.
أولاً ، قم بإنشاء مشروع جديد.
تحتاج أولاً إلى إنشاء Buildconfig من git (في هذه الحالة ، يحتوي المشروع على ثلاثة ملفات docker وملف docker منتظم تم تصميمه من أجل عامل docker الإصدار 1.17 أعلاه باستخدام اثنين من FROMs واثنين من dockerfiles منفصلين لبناء الصورة الأساسية والهدف.)
للوصول إلى بوابة إذا كانت خاصة ، تحتاج إلى إذن. إنشاء سر مع المحتوى التالي.
oc create secret generic sinc-git --from-literal=username=gitsinc --from-literal=password=Paaasssword123
دعنا نمنح باني حساب الخدمة الوصول إلى سرنا
oc secrets link builder sinc-git
ربط سر عنوان url
oc annotate secret sinc-git 'build.openshift.io/source-secret-match-uri-1=https://gitlab.xxx.com/*'
وأخيرًا ، دعونا نحاول إنشاء تطبيق من gita باستخدام المفتاح - allow-missing-images ، نظرًا لعدم وجود صورة أساسية مجمعة بعد.
oc new-app
gitlab.xxx.com/OKO/oko-service.git --strategy = docker - allow-missing-images
ثم ، في buildconfig الذي تم إنشاؤه ، تحتاج إلى إصلاح التجميع ل dockerfile الذي نحتاجه.

صحيح


نحن أيضا تغيير المعلمات لجعل الحاوية الأساسية.

دعنا نحاول أن نجعل اثنين Buildcconfig من هذا واحد.تحت الصورة الأساسية ، تفريغ في yaml واتخاذ ما يلزم.
يمكنك الحصول على اثنين من هذه الأنماط في الإخراج.
قبل الميلاد الحمر
kind: "BuildConfig" apiVersion: "v1" metadata: name: "oko-service-build-pyton-ml" labels: app: oko-service spec: completionDeadlineSeconds: 2400 triggers: - type: "ImageChange" source: type: git git: uri: "https://gitlab.xxx.com/OKO/oko-service.git" ref: "master" sourceSecret: name: git-oko strategy: type: Docker dockerStrategy: dockerfilePath: Dockerfile-python-ml forcePull: true output: to: kind: "ImageStreamTag" name: "python-ml:latest"
قبل الميلاد أوكو
kind: "BuildConfig" apiVersion: "v1" metadata: name: "oko-service-build" labels: app: oko-service spec: completionDeadlineSeconds: 2400 triggers: - type: "ImageChange" source: type: git git: uri: "https://gitlab.xxx.xom/OKO/oko-service.git" ref: "master" sourceSecret: name: git-oko strategy: type: Docker dockerStrategy: dockerfilePath: Dockerfile-oko-service from: kind: ImageStreamTag name: "python-ml:latest" forcePull: true env: - name: serverPort value: "9000" - name: storeLogin value: "iii" - name: storePassword value: "trCsn5" - name: storeApiUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2" - name: storeWsdlUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2/CustomWebService2.wsdl" - name: logLevel value: "INFO" - name: logPath value: "/var/log/efp-oko.log" output: to: kind: "ImageStreamTag" name: "oko-service:latest"
نحتاج أيضًا إلى إنشاء عملية نشر تكوين اثنين من الصور وإكمال نشر الخدمة والطريق.
فضلت عدم إنتاج جميع التكوينات بشكل منفصل ، ولكن لإنشاء قالب يتضمن على الفور جميع مكونات الخدمة. بناءً على القالب السابق للإصدار بدون تجميع.
template kind: "Template" apiVersion: "v1" metadata: name: oko-service-template objects: - kind: Secret apiVersion: v1 type: kubernetes.io/basic-auth metadata: name: git-oko annotations: build.openshift.io/source-secret-match-uri-1: https://gitlab.xxx.com/* data: password: R21ZFSw== username: Z2l0cec== - kind: "BuildConfig" apiVersion: "v1" metadata: name: "oko-service-build-pyton-ml" labels: app: oko-service spec: completionDeadlineSeconds: 2400 triggers: - type: "ImageChange" source: type: git git: uri: "https://gitlab.xxx.com/OKO/oko-service.git" ref: "master" sourceSecret: name: git-oko strategy: type: Docker dockerStrategy: dockerfilePath: Dockerfile-python-ml forcePull: true output: to: kind: "ImageStreamTag" name: "python-ml:latest" - kind: "BuildConfig" apiVersion: "v1" metadata: name: "oko-service-build" labels: app: oko-service spec: completionDeadlineSeconds: 2400 triggers: - type: "ImageChange" source: type: git git: uri: "https://gitlab.xxx.com/OKO/oko-service.git" ref: "master" sourceSecret: name: git-oko strategy: type: Docker dockerStrategy: dockerfilePath: Dockerfile-oko-service from: kind: ImageStreamTag name: "python-ml:latest" forcePull: true env: - name: serverPort value: "9000" - name: storeLogin value: "iii" - name: storePassword value: "trC" - name: storeApiUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2" - name: storeWsdlUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2/CustomWebService2.wsdl" - name: logLevel value: "INFO" - name: logPath value: "/var/log/efp-oko.log" output: to: kind: "ImageStreamTag" name: "oko-service:latest" - kind: DeploymentConfig apiVersion: v1 metadata: name: oko-service annotations: description: "ImageStream Defines how to build the application oko-service" labels: app: oko-service spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: oko-service deploymentconfig: oko-service template: metadata: labels: app: oko-service spec: selector: app: oko-service deploymentconfig: oko-service containers: - env: - name: serverPort value: "9000" - name: storeLogin value: "iii" - name: storePassword value: "trCsn5" - name: storeApiUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2" - name: storeWsdlUrl value: "http://14.75.41.20/custom-api-2.0/CustomWebService2/CustomWebService2.wsdl" - name: logLevel value: "INFO" - name: logPath value: "/var/log/efp-oko.log" ports: - containerPort: 9000 name: acces protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: / port: 9000 scheme: HTTP initialDelaySeconds: 5 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 image: docker-registry.default.svc:5000/oko-service-p/oko-service imagePullPolicy: Always name: oko-service type: ImageChange strategy: activeDeadlineSeconds: 21600 resources: {} rollingParams: intervalSeconds: 1 maxSurge: 25% maxUnavailable: 25% timeoutSeconds: 600 updatePeriodSeconds: 5 type: Rolling triggers: - type: "ImageChange" imageChangeParams: automatic: true containerNames: - "oko-service" from: kind: ImageStreamTag name: 'oko-service:latest' - kind: ImageStream apiVersion: v1 metadata: name: oko-service annotations: openshift.io/generated-by: OpenShiftNewApp labels: app: oko-service deploymentconfig: oko-service spec: dockerImageRepository: "" tags: - annotations: openshift.io/imported-from: oko-service from: kind: DockerImage name: oko-service importPolicy: insecure: "true" name: latest referencePolicy: type: Source - kind: ImageStream apiVersion: v1 metadata: name: python-ml spec: dockerImageRepository: "" tags: - annotations: openshift.io/imported-from: oko-service-build from: kind: DockerImage name: python-ml importPolicy: insecure: "true" name: latest referencePolicy: type: Source - kind: Service apiVersion: v1 metadata: name: oko-service spec: type: ClusterIP ports: - port: 9000 protocol: TCP targetPort: 9000 selector: app: oko-service sessionAffinity: None status: loadBalancer: {} - kind: Route apiVersion: route.openshift.io/v1 metadata: name: oko-service spec: host: oko-service.xxx.com to: kind: Service name: oko-service weight: 100 wildcardPolicy: None status: ingress: - conditions: host: oko-service.xxx.com routerName: router wildcardPolicy: None
تم تصميم هذا القالب لمشروع oko-service-p ، لذلك تحتاج إلى التفكير في ذلك.
يمكنك استخدام المتغيرات لاستبدال القيم المطلوبة تلقائيًا.
أكرر مرة أخرى أنه يمكن الحصول على Yaml الأساسي عن طريق تحميل البيانات باستخدام oc get ... -o yaml
يمكنك استخدام هذا القالب للمسح الضوئي على النحو التالي
oc process -f oko-service-templatebuild.yaml | oc create -f -
ثم إنشاء خط أنابيب
oko-service-pipeline.yaml
kind: "BuildConfig" apiVersion: "v1" type: "GitLab" gitlab: secret: "secret101" metadata: name: "oko-service-sample-pipeline" spec: strategy: jenkinsPipelineStrategy: jenkinsfile: |- // path of the template to use // def templatePath = 'https://raw.githubusercontent.com/openshift/nodejs-ex/master/openshift/templates/nodejs-mongodb.json' // name of the template that will be created def templateName = 'oko-service-template' // NOTE, the "pipeline" directive/closure from the declarative pipeline syntax needs to include, or be nested outside, pipeline { agent any environment { DEV_PROJECT = "oko-service"; } stages { stage('deploy') { steps { script { openshift.withCluster() { openshift.withProject() { echo "Hello from project ${openshift.project()} in cluster ${openshift.cluster()}" def dc = openshift.selector('dc', "${DEV_PROJECT}") openshiftBuild(buildConfig: 'oko-service-build', waitTime: '3000000') openshiftDeploy(deploymentConfig: 'oko-service', waitTime: '3000000') } } } } } } // stages } // pipeline type: JenkinsPipeline triggers: - type: GitLab gitlab: secret: ffffffffk
بعد تطبيق تكوين خط أنابيب عن طريق تشغيل
oc describe buildconfig oko-service-sample-pipeline
يمكن الحصول على عنوان url ل webhook في جيتلاب.

استبدل السر بالسرية المحددة في التكوين.

أيضًا ، بعد تطبيق Pipeline openshift نفسه سيبدأ تثبيت jenkins في المشروع لإطلاق Pipeline. الإطلاق الأولي طويل ، لذا عليك الانتظار بعض الوقت.
ثم في Gitlab في مشروعنا:

املأ عنوان Url ، السري ، قم بإزالة تمكين التحقق من طبقة المقابس الآمنة (SSL) وتمكّن webhook الخاص بنا.
يمكنك إجراء اختبار الدفع وإلقاء نظرة على تقدم التجمع

لا تنسَ التسجيل في عنوان URL الخاص بالمضيف للوصول إلى جنكينز نفسها على infranode.

يمكنك أيضًا رؤية تقدم التجميع.

ملحوظة: آمل أن يساعد هذا المقال الكثيرين على فهم كيفية تناول openhift وما يأكلونه ، وسوف يوضح العديد من النقاط التي ليست واضحة للوهلة الأولى.
PSS بعض الحلول لحل بعض المشاكل
مشاكل في بدء الإنشاء ، إلخ.
- إنشاء حساب خدمة للمشروع
oc create serviceaccount oko-serviceaccount oc adm policy add-scc-to-user privileged system:serviceaccount:__:oko-serviceaccount oc adm policy add-scc-to-group anyuid system:authenticated oc adm policy add-scc-to-user anyuid system:serviceaccount:__:oko-serviceaccount
مشاكل تجميد المشروع وعدم حذفه- سيناريو الإكراه القسري (مرض خلقي) for i in $(oc get projects | grep Terminating| awk '{print $1}'); do echo $i; oc get serviceinstance -n $i -o yaml | sed "/kubernetes-incubator/d"| oc apply -f - ; done
مشاكل في تنزيل الصور. oc adm policy add-role-to-group system:image-puller system:serviceaccounts:__ oc adm policy add-role-to-user system:image-puller system:serviceaccount:__::default oc adm policy add-role-to-group system:image-puller system:serviceaccounts:__ oc policy add-role-to-user system:image-puller system:serviceaccount:__::default oc policy add-role-to-group system:image-puller system:serviceaccounts:__
تجاوز أيضًا أذونات المجلد للتسجيل على ملفات NFS. (هناك أخطاء الكتابة في سجلات التسجيل ، والبناء معلقة على الضغط). chmod 777 -r /exports/registry/docker/registry/ chmod -R 777 /exports/registry/docker/registry/ chown nfsnobody:nfsnobody -R /exports/registry/ hown -R 1001 /exports/registry/ restorecon -RvF exportfs -ar