فتح - الحرف قبعة حمراء

فتح


  1. الاجتياح Openshift.
  2. التكوين بعد التثبيت.
  3. إنشاء وتوصيل الكهروضوئية.
  4. إنشاء ونشر مشروع Red Hat Decision Manager (مشروع تناظري لمؤسسة kie-workbench).
  5. إنشاء ونشر مشاريع AMQ (red hat active mq) و postgressql باستخدام مستودعات ثابتة.
  6. إنشاء مشاريع منفصلة للخدمات ، وقوالب لهم ، وخطوط الأنابيب ، والتكامل مع 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_platform

Postgresql

نقوم بإنشاء 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 

Source: https://habr.com/ru/post/ar441360/


All Articles