Openshift - Red-Hat-Handwerk

Offenschaltung


  1. Sweep Openshift.
  2. Konfiguration nach der Installation.
  3. PV erstellen und verbinden.
  4. Erstellung und Bereitstellung des Red Hat Decision Manager-Projekts (Unternehmensanalog von kie-workbench).
  5. Erstellung und Bereitstellung von AMQ- (red hat active mq) und postgressql-Projekten unter Verwendung persistenter Repositorys.
  6. Erstellung separater Projekte für Services, Vorlagen für diese, Pipeline, Integration in Gitlab, Gitlab-Regestry.

1. OpenShift Sweep


Serveranforderungen, Vorbereitung von DNS-Servern, Liste der Servernamen, Serveranforderungen.

Die Mindestanforderungen sind kurz: Alle Server müssen mindestens 16 GB Ram 2-Kerne und mindestens 100 Gigabyte für die Anforderungen von Docker haben.

Bindungsbasierte DNS sollten die folgende Konfiguration haben.
dkm - master, dk0 - ausführend, ifr - infrastruktur, bln - balancer, shd - nfs, dkr - der steuerknoten, mit dem der cluster konfiguriert wurde, wurde ebenfalls als separater knoten unter docker regestry geplant.

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"; }; 

Servervorbereitung

Nach dem Anschließen des Abonnements. Aktivieren von Repositorys und Installieren der Pakete, die Sie zunächst benötigen.

 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 

Docker-Speicherkonfiguration (separates Laufwerk).

 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 

Installieren Sie die verbleibenden erforderlichen Pakete.

 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 

Erstellen, Hinzufügen eines Benutzers sowie von Schlüsseln.

 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 

Bei Konflikten mit bereits verwendeten Subnetzen ändern Sie die Standardadresse in den Containern.

 echo '{ "bip": "172.26.0.1/16" }' > /etc/docker/daemon.json systemctl restart docker 

Konfiguration des Netzwerkmanagers. (DNS sollte in der Lage sein, nach außen zu blicken)

 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 

Bearbeiten Sie gegebenenfalls den Computernamen im vollständigen Namen.

 hhh=$(cat /etc/hostname) echo "$hhh".test.osh > /etc/hostname 

Starten Sie den Server nach den abgeschlossenen Schritten neu.

Vorbereiten des dkr-Steuerknotens


Der Unterschied zwischen dem Steuerknoten und dem Rest besteht darin, dass Docker nicht mit einer separaten Festplatte verbunden werden muss.

Es ist auch erforderlich, ntp zu konfigurieren.

 yum install ntp -y systemctl enable ntpd service ntpd start service ntpd status ntpq -p chmod 777 -R /usr/share/ansible/openshift-ansible/ 

Sie müssen auch den privaten Schlüssel zu ocp hinzufügen.

Greifen Sie auf allen Knoten auf ssh as ocp zu.

Vorbereiten der Inventardatei und Erweitern des Clusters.

 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' 

Abwechselnd Playbooks ausführen.

 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 

Wenn am Ende alles in Ordnung ist, wird es ungefähr so ​​sein.



Bearbeiten der lokalen Hostdatei zur Überprüfung nach dem Installationsvorgang über die Weboberfläche.

 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 

Überprüfen Sie die URL openshift.test.osh : 8443

2. Konfiguration nach der Installation


Geben Sie dkm ein.

 oc login -u system:admin oc adm policy add-cluster-role-to-user cluster-admin admin --rolebinding-name=cluster-admin 

Überprüfen Sie, ob zuvor ausgeblendete Projekte (z. B. OpenShift) in der Weboberfläche angezeigt werden können.

3. PV erstellen und verbinden


Erstellen Sie ein dauerhaftes Volume auf dem NFS-Server.

 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 

Hinzufügen von pv zu openshift.

Sie müssen ein Beispiel für ein neues Projekt-Beispiel erstellen.

Wenn das Projekt bereits erstellt wurde, gehen Sie zu oc project exampleplpv-project. Erstellen Sie Yaml mit dem folgenden Inhalt.

 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 

Und bewerben. oc anwenden -f Dateiname.yaml

Nach dem Tun

 oc get pv 

Das erstellte PV wird in der Liste angezeigt.

4. Erstellung und Bereitstellung des Red Hat Decision Manager-Projekts (Unternehmensanalog von kie-workbench)


Suchen Sie nach Vorlagen.

 oc get imagestreamtag -n openshift | grep rhdm 



Vorlagen hinzufügen - Ein Link und eine ausführlichere Beschreibung finden Sie

 unzip rhdm-7.2.1-openshift-templates.zip -d ./rhdm-7.2.1-openshift-templates 

Erstellen Sie ein neues Projekt:

 oc new-project rhdm72 

Hinzufügen einer Autorisierung zum Docker-Server registry.redhat.io:

 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 

Importieren Sie imagetream, Schlüsselerstellung Decision Server, Decision Central.

 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 

Erstellen Sie ein dauerhaftes Volume auf dem NFS-Server.

 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 

Fügen Sie dem Projekt pv hinzu:

 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 benötigte PV-Parameter
accessModes:
- ReadWriteOnce
aber 7.2 erfordert bereits
accessModes:
- ReadWriteMany
Übernehmen - oc anwenden -f Dateiname.yaml
+ überprüfe, ob der erstellte pv verfügbar ist.

Erstellen Sie eine Anwendung aus Vorlagen gemäß der offiziellen Dokumentation.

 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 

Die Anwendung wird nach Abschluss der Pull-Images in der Docker-Registrierung automatisch bereitgestellt.
Bis zu diesem Moment wird der Status so sein.



Wenn Sie auf den Link zum Bild klicken, wird der folgende Fehler angezeigt



Sie müssen die URL zum Hochladen von Bildern ändern, indem Sie yaml von registry.redhat.io in registry.access.redhat.com bearbeiten auswählen



Fügen Sie der Hosts-Datei die folgende URL hinzu, um zum bereitgestellten Dienst in seiner Weboberfläche zu gelangen
auf einen der Infra-Knoten
10.19.86.25 rnd-osh-ifr-t02.test.osh myapp-rhdmcentr-rhdm72.apps.openshift.test.osh




5. Erstellung und Bereitstellung von AMQ- (red hat active mq) und postgressql-Projekten unter Verwendung persistenter Repositorys



Rhamq

Erstellen Sie ein neues Projekt

 oc new-project rhamq-and-pgsql 

Wir importieren Bilder bei Abwesenheit.

 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 

Vorlageninstallation

 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 

Hinzufügen einer Rolle zu einem Dienstkonto.

 oc policy add-role-to-user view -z default 

Pv auf nfs server erstellen

 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 

Erstellen Sie 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 

Pv anwenden

 oc apply -f pgmq_storage.yaml 

Aus der Vorlage erstellen



fertig



Für andere Optionen mit SSL-Clustering usw. Sie können sich auf die Dokumentation access.redhat.com/documentation/en-us/red_hat_amq/7.2/html/deploying_amq_broker_on_openshift_container_platform beziehen

Postgresql

Wir erstellen eine weitere PV auf die gleiche Weise wie für 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 



Wir geben die notwendigen Parameter ein





fertig.

6. Erstellung separater Projekte für Services, Vorlagen für diese, Pipeline, Integration in Gitlab, Gitlab-Regestry


Der erste Schritt besteht darin, ein Projekt zu erstellen.

 oc new-project ttttt 


Zunächst ohne Vorlage können Sie diese in einer manuellen Anwendung erstellen.
Es gibt zwei Möglichkeiten.
Das erste ist einfach die Verwendung eines vorgefertigten Bildes, aber dann ist die Versionierung von Bildern usw. nicht verfügbar, aber in einigen Fällen ist es relevant.

Zunächst müssen Sie Daten für die Authentifizierung bei der Registrierung abrufen. Am Beispiel des zusammengestellten Bildes in Gitlab geschieht dies folgendermaßen.


Zuerst müssen Sie Geheimnisse für den Zugriff auf die Docker-Registrierung erstellen - siehe Optionen und Syntax.

 oc create secret docker-registry 

Dann erstelle ein Geheimnis

 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' 

Dann erstellen Sie unsere Anwendung.

 oc new-app --docker-image='gitlab.xxx.com:4567/oko/oko-service:latest' 

Wenn ein Fehler aufgetreten ist und sich das Bild in den Anwendungseinstellungen nicht ausdehnt, geben Sie das Geheimnis unserer erneuten Aufnahme an.



Dann fügen wir die erforderlichen Umgebungsvariablen hinzu.



Fertig - der Container lebt.

Klicken Sie dann auf das rechte Bearbeitungs-Yaml und geben Sie die Ports an.



Um dann auf unseren Container zugreifen zu können, müssen Sie eine Route erstellen, aber es ist unmöglich, sie ohne einen Dienst zu erstellen. Daher müssen Sie als Erstes einen Dienst erstellen.

service.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 

Erstellen Sie eine Route.



Registrieren Sie die URL in Hosts auf Ihrem Computer, indem Sie einen der Infra-Knoten betrachten.



Registrieren Sie die URL in Hosts auf Ihrem Computer, indem Sie einen der Infra-Knoten betrachten.

Fertig.

Vorlage.

Die Vorlage wird erstellt, indem alle Komponenten, die sich auf den Service beziehen, separat in yaml entladen werden.

In diesem Fall handelt es sich nämlich um Geheimnisse der DC Service Route.

Sie können alles sehen, was in einem bestimmten Projekt getan wurde

 oc get all 

interessant entladen

 oc get deploymentconfig.apps.openshift.io oko-service -o yaml 

oder

 oc get d oko-service -o yaml 

Dann können Sie jede Vorlage für opensihft als Grundlage verwenden und integrieren, was empfangen wurde, um die Vorlage zu erhalten.

In diesem Fall sieht das Ergebnis folgendermaßen aus:

template.yaml

 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 

Sie können hier Geheimnisse hinzufügen. Im folgenden Beispiel sehen wir uns eine Serviceoption mit einem Build auf der OpenShift-Seite an, auf der sich die Geheimnisse in der Vorlage befinden.

Zweiter Weg

Erstellen eines Projekts mit vollständigen Phasen der Bildmontage, einer einfachen Pipeline und Montage durch Push.

Erstellen Sie zunächst ein neues Projekt.

Zuerst müssen Sie eine Buildconfig aus dem Git erstellen (in diesem Fall verfügt das Projekt über drei Docker-Dateien, eine reguläre Docker-Datei, die für Docker-Version 1.17 mit zwei FROMs entwickelt wurde, und zwei separate Docker-Dateien zum Erstellen des Basis-Images und des Ziel-Images.)

Um auf das Git zuzugreifen, wenn es privat ist, benötigen Sie eine Autorisierung. Erstellen Sie ein Geheimnis mit dem folgenden Inhalt.

 oc create secret generic sinc-git --from-literal=username=gitsinc --from-literal=password=Paaasssword123 

Lassen Sie uns dem Service Account Builder Zugriff auf unser Geheimnis gewähren

 oc secrets link builder sinc-git 

Binde das Geheimnis an URL Git

 oc annotate secret sinc-git 'build.openshift.io/source-secret-match-uri-1=https://gitlab.xxx.com/*' 

Und zum Schluss versuchen wir, eine Anwendung aus einer Gita mit dem Schlüssel "Allow-Missing-Images" zu erstellen, da wir noch kein Basisbild zusammengestellt haben.

oc new-app gitlab.xxx.com/OKO/oko-service.git --strategy = docker --allow-missing-images
Dann müssen Sie in der erstellten buildconfig die Assembly auf die Docker-Datei fixieren, die wir benötigen.

Richtig


Wir ändern auch die Parameter, um den Basiscontainer zu erstellen.

Lassen Sie uns versuchen, zwei Buildcconfig aus diesem zu erstellen. Entladen Sie unter dem Basis-Image yaml und nehmen Sie die erforderlichen.

Sie können zwei solcher Muster am Ausgang erhalten.

bc-py

 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" 

bc-oko

 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" 


Wir müssen auch eine Deployment-Konfiguration für zwei Imagestreams erstellen und die Bereitstellung von Service und Route abschließen.
Ich habe es vorgezogen, nicht alle Konfigurationen separat zu erstellen, sondern sofort eine Vorlage zu erstellen, die alle Komponenten für den Service enthält. Basierend auf der vorherigen Vorlage für die Version ohne Baugruppe.

 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 

Diese Vorlage wurde für das Projekt oko-service-p erstellt, daher müssen Sie dies berücksichtigen.
Sie können Variablen verwenden, um die gewünschten Werte automatisch zu ersetzen.
Ich wiederhole noch einmal, dass die grundlegende Yaml durch Hochladen von Daten mit oc get ... -o yaml erhalten werden kann

Sie können diese Vorlage wie folgt zum Scannen verwenden

 oc process -f oko-service-templatebuild.yaml | oc create -f - 

Erstellen Sie dann eine Pipeline

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 

Nach dem Anwenden der Pipeline-Konfiguration durch Ausführen

 oc describe buildconfig oko-service-sample-pipeline 

Kann URL für Webhook in Gitlab bekommen.



Ersetzen Sie das Geheimnis durch das in der Konfiguration angegebene Geheimnis.


Nach dem Anwenden der Pipeline wird openshift selbst mit der Installation von Jenkins im Projekt beginnen, um die Pipeline zu starten. Der erste Start ist lang, daher müssen Sie eine Weile warten.

Dann in Gitlab in unserem Projekt:



Füllen Sie die URL aus, geheim, entfernen Sie SSL-Überprüfung aktivieren und unser Webhook ist fertig.

Sie können einen Testschub durchführen und den Fortschritt der Montage anzeigen



Vergessen Sie nicht, sich in der Host-URL zu registrieren, um zu denselben Jenkins auf dem Infranode zu gelangen.



Sie können auch den Montagefortschritt sehen.



PS Ich hoffe, dieser Artikel wird vielen helfen zu verstehen, wie OpenShift gegessen wird und was sie essen, und viele Punkte klären, die auf den ersten Blick nicht offensichtlich sind.

PSS einige Lösungen, um einige Probleme zu lösen


Probleme beim Starten eines Builds usw.
- Erstellen Sie ein Dienstkonto für das Projekt

 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 

Probleme mit dem Einfrieren und Nichtlöschen des Projekts
- Skript zur erzwungenen Fertigstellung (angeborene Krankheit)

 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 

Probleme beim Herunterladen von Bildern.

 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:__ 



Überschreiben Sie auch die Ordnerberechtigungen für die Registrierung in NFS. (Es gibt Schreibfehler in den Registrierungsprotokollen, der Build hängt am Push).

 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/de441360/


All Articles