ãªãŒãã³ã·ãã
- Sweep Openshiftã
- ã€ã³ã¹ããŒã«åŸã®æ§æã
- PVãäœæããŠæ¥ç¶ããŸãã
- Red Hat Decision Managerãããžã§ã¯ãïŒkie-workbenchã®ãšã³ã¿ãŒãã©ã€ãºã¢ããã°ïŒã®äœæãšãããã€ã
- æ°žç¶ãªããžããªã䜿çšããAMQïŒred hat active mqïŒããã³postgressqlãããžã§ã¯ãã®äœæãšå±éã
- ãµãŒãã¹çšã®åå¥ãããžã§ã¯ãã®äœæããããã®ãã³ãã¬ãŒãããã€ãã©ã€ã³ãgitlabãšã®çµ±åãgitlab regestryã
1. Openshift Sweep
ãµãŒããŒèŠä»¶ãDNSãµãŒããŒã®æºåããµãŒããŒåã®ãªã¹ãããµãŒããŒèŠä»¶ã
æå°èŠä»¶ã¯ç°¡åã§ãããã¹ãŠã®ãµãŒããŒã«ã¯ã16Gb Ram 2ã³ã¢ä»¥äžãšãDockerã®ããŒãºã«åãããŠ100ã®ã¬ãã€ã以äžãå¿
èŠã§ãã
ãã€ã³ãããŒã¹ã®DNSã«ã¯æ¬¡ã®æ§æãå¿
èŠã§ãã
dkm-ãã¹ã¿ãŒãdk0-å®è¡äžãifr-ã€ã³ãã©ã¹ãã©ã¯ãã£ãbln-ãã©ã³ãµãŒãshd-nfsãdkr-ã¯ã©ã¹ã¿ãŒãæ§æãããå¶åŸ¡ããŒãããDocker 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
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
ãããã¯ãŒã¯ãããŒãžã£ãŒã®æ§æã ïŒdnsã¯å€ã®äžçã«é²ãããšãã§ããã¯ãã§ãïŒ
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ã³ã³ãããŒã«ããŒãã®æºå
å¶åŸ¡ããŒããšãã®ä»ã®ããŒãã®éãã¯ãDockerãå¥ã®ãã£ã¹ã¯ã«æ¥ç¶ããå¿
èŠããªãããšã§ãã
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ã«è¿œå ããå¿
èŠããããŸãã
ãã¹ãŠã®ããŒãã§ocpãšããŠsshãå
¥åããŸãã
Inventoryãã¡ã€ã«ãæºåããã¯ã©ã¹ã¿ãŒãæ¡åŒµããŸãã 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
ãã¹ãŠãæçµçã«ããŸãããã°ã次ã®ãããªãã®ã«ãªããŸãã

Webã€ã³ã¿ãŒãã§ãŒã¹ãä»ããoprenshiftæäœã®ã€ã³ã¹ããŒã«åŸãæ€èšŒã®ããã«ããŒã«ã«ãã¹ããã¡ã€ã«ãç·šéããŸãã
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
Webã€ã³ã¿ãŒãã§ã€ã¹ã§ä»¥åã«é ããããããžã§ã¯ãïŒããšãã°ãopenshiftïŒã衚瀺ã§ããããšã確èªããŸãã
3. PVã®äœæãšæ¥ç¶
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
Pvãopenshiftã«è¿œå ããŸãã
oc new-project examplpv-projectãããžã§ã¯ããäœæããå¿
èŠããããŸãã
ãããžã§ã¯ããæ¢ã«äœæãããŠããå Žåã¯ãoc project examplpv-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 apply -f filename.yaml
ãã£ãåŸ
oc get pv
äœæãããpvã¯ãªã¹ãã«è¡šç€ºãããŸãã
4. Red Hat Decision Managerãããžã§ã¯ãïŒkie-workbenchã®ãšã³ã¿ãŒãã©ã€ãºã¢ããã°ïŒã®äœæãšãããã€
ãã³ãã¬ãŒãã確èªããŠãã ããã
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 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
imagetreamãããŒäœæ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
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ã«å¿
èŠãªPVãã©ã¡ãŒã¿ãŒ
accessModesïŒ
-ReadWriteOnce
7.2ã¯ãã§ã«å¿
èŠã§ã
accessModesïŒ
-ReadWriteMany
é©çš-oc apply -f filename.yaml
+äœæãããpvãå©çšå¯èœã«ãªã£ãããšã確èªããŸãã

å
¬åŒããã¥ã¡ã³ãã«åŸã£ãŠãã³ãã¬ãŒãããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
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
docker-registryã§ã®ãã«ã€ã¡ãŒãžã®å®äºæã«ãã¢ããªã±ãŒã·ã§ã³ã¯èªåçã«ãããã€ãããŸãã
ãã®ç¬éãŸã§ãã¹ããŒã¿ã¹ã¯ããã§ãã

ç»åãžã®ãªã³ã¯ãã¯ãªãã¯ãããšã次ã®ãšã©ãŒã衚瀺ãããŸã

ã¬ãžã¹ããªã®ç·šéyamlãregistry.redhat.ioããregistry.access.redhat.comã«éžæããŠãç»åã®ã¢ããããŒãURLã倿Žããå¿
èŠããããŸã

Webã€ã³ã¿ãŒãã§ãŒã¹ã§ãããã€ããããµãŒãã¹ã«ç§»åããã«ã¯ã次ã®URLãhostsãã¡ã€ã«ã«è¿œå ããŸã

ã€ã³ãã©ããŒãã®ããããã«
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ãµãŒããŒã§PVãäœæãã
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
PVãé©çš
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
MQã®å Žåãšåãæ¹æ³ã§å¥ã®PVãäœæããŸãã
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

æåã¯ãã³ãã¬ãŒããªãã§ãæåã¢ããªã±ãŒã·ã§ã³ã§äœæã§ããŸãã
2ã€ã®æ¹æ³ããããŸããæåã¯æ¢è£œã®ç»åã䜿çšããã ãã§ããããã®åŸãç»åã®ããŒãžã§ã³ç®¡çãªã©ã¯å©çšã§ããŸããããå Žåã«ãã£ãŠã¯é¢é£ããŸãã
ãŸããã¬ãžã¹ããªãžã®èªèšŒçšã®ããŒã¿ãååŸããå¿
èŠããããŸãã Gitlabã§ãµã³ãã«ãšããŠã¢ã»ã³ãã«ãããã€ã¡ãŒãžã䜿çšããŠãããã¯æ¬¡ã®ããã«è¡ãããŸãã

æåã«ãDockerã¬ãžã¹ããªã«ã¢ã¯ã»ã¹ããããã®ç§å¯ãäœæããå¿
èŠããããŸã-ãªãã·ã§ã³ãšæ§æãåç
§ããŠãã ããã
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ãã¯ãªãã¯ããŠãããŒããæå®ããŸãã

次ã«ãã³ã³ããã«ã¢ã¯ã»ã¹ããã«ã¯ãã«ãŒããäœæããå¿
èŠããããŸããããµãŒãã¹ãªãã§äœæããããšã¯äžå¯èœãªã®ã§ãæåã«ãµãŒãã¹ãäœæããå¿
èŠããããŸãã
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
ã«ãŒããäœæããŸãã

ã€ã³ãã©ããŒãã®1ã€ãèŠãŠããã·ã³ã®ãã¹ãã«URLãç»é²ããŸãã

ã€ã³ãã©ããŒãã®1ã€ãèŠãŠããã·ã³ã®ãã¹ãã«URLãç»é²ããŸãã
ã§ãã
ãã³ãã¬ãŒãããã³ãã¬ãŒãã¯ããµãŒãã¹ã«é¢é£ãããã¹ãŠã®ã³ã³ããŒãã³ããyamlã§åå¥ã«ã¢ã³ããŒãããããšã«ããäœæãããŸãã
ã€ãŸãããã®å Žåãããã¯dcãµãŒãã¹ã«ãŒãã®ç§å¯ã§ãã
ç¹å®ã®ãããžã§ã¯ãã§è¡ããããã¹ãŠãèŠãããšãã§ããŸã
oc get all
é¢çœãã¢ã³ããŒã
oc get deploymentconfig.apps.openshift.io oko-service -o yaml
ãŸãã¯
oc get d oko-service -o yaml
ãã®åŸãopensihftã®ãã³ãã¬ãŒããããŒã¹ãšããŠåãåããåãåã£ããã®ãçµ±åããŠãã³ãã¬ãŒããååŸã§ããŸãã
ãã®å Žåãçµæã¯æ¬¡ã®ããã«ãªããŸãã
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
ããã«ã·ãŒã¯ã¬ããã远å ã§ããŸããæ¬¡ã®äŸã§ã¯ãã·ãŒã¯ã¬ããããã³ãã¬ãŒãå
ã«ããopenshiftåŽã«ãã«ãããããµãŒãã¹ãªãã·ã§ã³ãæ€èšããŸãã
第äºã®æ¹æ³ããã·ã¥ã«ããã€ã¡ãŒãžã¢ã»ã³ããªãã·ã³ãã«ãªãã€ãã©ã€ã³ããã³ã¢ã»ã³ããªã®ãã«ã¹ããŒãžã§ãããžã§ã¯ããäœæããŸãã
ãŸããæ°ãããããžã§ã¯ããäœæããŸãã
ãŸããgitããBuildconfigãäœæããå¿
èŠããããŸãïŒãã®å Žåããããžã§ã¯ãã«ã¯3ã€ã®dockerãã¡ã€ã«ã2ã€ã®FROMã䜿çšããäžèšã®dockerããŒãžã§ã³1.17çšã«èšèšãããéåžžã®dockerãã¡ã€ã«ãããã³ããŒã¹ã€ã¡ãŒãžãšã¿ãŒã²ããã€ã¡ãŒãžãäœæããããã®2ã€ã®åå¥ã®dockerfileããããŸãïŒ
gitããã©ã€ããŒãã®å Žåã«ã¢ã¯ã»ã¹ããã«ã¯ãèªèšŒãå¿
èŠã§ãã æ¬¡ã®ã³ã³ãã³ãã§ã·ãŒã¯ã¬ãããäœæããŸãã
oc create secret generic sinc-git --from-literal=username=gitsinc --from-literal=password=Paaasssword123
ãµãŒãã¹ã¢ã«ãŠã³ããã«ããŒã«ã·ãŒã¯ã¬ãããžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸããã
oc secrets link builder sinc-git
ç§å¯ãURL gitã«ãã€ã³ããã
oc annotate secret sinc-git 'build.openshift.io/source-secret-match-uri-1=https://gitlab.xxx.com/*'
æåŸã«ãããŒ--allow-missing-imagesã䜿çšããŠgitaããã¢ããªã±ãŒã·ã§ã³ãäœæããŠã¿ãŸããããããã¯ãåºæ¬çãªã€ã¡ãŒãžããŸã çµã¿ç«ãŠãããŠããªãããã§ãã
oc new-app
gitlab.xxx.com/OKO/oko-service.git --strategy = docker --allow-missing-images
次ã«ãäœæãããbuildconfigã§ãå¿
èŠãªdockerfileã®ã¢ã»ã³ããªãä¿®æ£ããå¿
èŠããããŸãã

æ£è§£


ãŸãããã©ã¡ãŒã¿ãŒã倿ŽããŠãããŒã¹ã³ã³ãããŒãäœæããŸãã

ãã®1ã€ãã2ã€ã®BuildcconfigãäœæããŠã¿ãŸãããããŒã¹ã€ã¡ãŒãžã®äžã§ãyamlã§ã¢ã³ããŒãããå¿
èŠãªãã®ãååŸããŸãã
åºåã§ã¯ããããã®ãã¿ãŒã³ã®ãã¡2ã€ãååŸã§ããŸãã
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"
ãŸããdeployconfigconfig 2ã€ã¡ãŒãžã¹ããªãŒã ãäœæãããµãŒãã¹ãšã«ãŒãã®å±éãå®äºããå¿
èŠããããŸãã
ãã¹ãŠã®æ§æãåå¥ã«äœæããã®ã§ã¯ãªãããµãŒãã¹ã®ãã¹ãŠã®ã³ã³ããŒãã³ããå«ããã³ãã¬ãŒããããã«äœæããããšã奜ã¿ãŸããã ã¢ã»ã³ããªãªãã®ããŒãžã§ã³ã®ä»¥åã®ãã³ãã¬ãŒãã«åºã¥ããŠããŸãã
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çšã«äœæãããŠããããããããèæ
®ããå¿
èŠããããŸãã
倿°ã䜿çšããŠãå¿
èŠãªå€ãèªåçã«çœ®ãæããããšãã§ããŸãã
oc get ... -o yamlã䜿çšããŠããŒã¿ãã¢ããããŒãããããšã§åºæ¬çãª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
gitlabã§webhookã®URLãååŸã§ããŸãã

èšå®å
ã®æå®ãããã·ãŒã¯ã¬ããã§ã·ãŒã¯ã¬ããã眮ãæããŸãã

ãŸããPipelineãé©çšãããšãopenshiftèªäœããããžã§ã¯ãã«jenkinsã®ã€ã³ã¹ããŒã«ãéå§ããPipelineãèµ·åããŸãã æåã®èµ·åã¯é·ãã®ã§ããã°ããåŸ
ã€å¿
èŠããããŸãã
次ã«ããããžã§ã¯ãã®Gitlabã§ïŒ

URLãã·ãŒã¯ã¬ãããåé€SSLæ€èšŒãæå¹ã«ããããã§ãwebhookã®æºåãã§ããŸããã
ãã¹ãããã·ã¥ãè¡ããã¢ã»ã³ããªã®é²è¡ç¶æ³ã確èªã§ããŸãã

ãã¹ãURLã«ç»é²ããŠãã€ã³ãã©ããŒãäžã®åããžã§ã³ãã³ã«å°éããããšãå¿ããªãã§ãã ããã

ã¢ã»ã³ããªã®é²è¡ç¶æ³ã確èªã§ããŸãã

PSãã®èšäºããå€ãã®äººããªãŒãã³ã·ãããã©ã®ããã«ã©ã®ããã«é£ã¹ãŠããããçè§£ããäžèŠããŠæããã§ãªãå€ãã®åŽé¢ãæããã«ããããšãé¡ã£ãŠããŸãã
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