= OpenShift == デバッグノウハウ 診断 {{{ # oc adm diagnostics }}} サービスの状態確認 {{{ # oc status -v }}} Podの状態、ログ確認 {{{ # oc get pods # oc logs }}} コンテナの状態、ログ確認 {{{ # docker ps --alll # docker log <コンテナ名> }}} == ユーザの作成と権限付与 {{{ # oc create user myuser # htpasswd /etc/openshift/openshift-passwd myuser # oc policy add-role-to-user edit myuser -n myproject }}} パスワードの設定は、htpasswdなり認証の仕組みを利用して行う必要があることに注意。 == ボリュームの利用(NFS) Persistence Volumeをシステムで作成し、Persistence Volume Claimをプロジェクトで利用するボリューム領域として作成します。 === py.yml {{{ apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce nfs: path: /var/lib/docker/nfs server: 10.0.0.7 persistentVolumeReclaimPolicy: Recycle }}} {{{ # oc login -u system:admin ... # oc create -f pv.yml }}} === pvc.yml {{{ apiVersion: "v1" kind: "PersistentVolumeClaim" metadata: name: "claim1" spec: accessModes: - "ReadWriteOnce" resources: requests: storage: "1Gi" volumeName: "pv0001" }}} {{{ # oc login -u system:admin ... # oc create -f pv.yml }}} == イメージのプッシュ(内部レジストリ) {{{ ■内部レジストリのURL確認 [root@os-master1 ~]# oc login -u system:admin Logged into "https://os-master1.local:8443" as "system:admin" using existing credentials. You have access to the following projects and can switch between them with 'oc project ': * common default kube-public kube-service-catalog kube-system logging management-infra openshift openshift-infra openshift-node Using project "common". [root@os-master1 ~]# oc get svc -n default NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE docker-registry 172.30.207.150 5000/TCP 3d kubernetes 172.30.0.1 443/TCP,53/UDP,53/TCP 3d registry-console 172.30.108.12 9000/TCP 3d router 172.30.164.49 80/TCP,443/TCP,1936/TCP 3d ■イメージのタグを作成 # docker tag docker.io/nginx:latest 172.30.207.150:5000/common/nginx:latest ■一般ユーザ(not system:admin)権限でログインしなおす # oc login Authentication required for https://os-master1.local:8443 (openshift) Username: admin Password: Login successful. You have one project on this server: "common" Using project "common". ■レジストリにログイン # docker login -u $(oc whoami) -p $(oc whoami -t) 172.30.207.150:5000 Login Succeeded ■プッシュ # docker push 172.30.207.150:5000/common/nginx:latest }}} == イメージのプッシュ(外部レジストリ) {{{ OpenShiftにログイン [root@os-master1 ~]# oc login Authentication required for https://os-master1.local:8443 (openshift) Username: admin Password: Login successful. You don't have any projects. You can try to create a new project, by running oc new-project イメージをアップロードするプロジェクトを作成 [root@os-master1 ~]# oc new-project common Now using project "common" on server "https://os-master1.local:8443". You can add applications to this project with the 'new-app' command. For example, try: oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git レジストリにログイン [root@os-master1 ~]# docker login -u $(oc whoami) -p $(oc whoami -t) docker-registry-default.router.default.svc.cluster.local Login Succeeded イメージのプッシュ [root@os-master1 ~]# docker push docker-registry-default.router.default.svc.cluster.local/common/nginx:latest The push refers to a repository [docker-registry-default.router.default.svc.cluster.local/common/nginx] a103d141fc98: Pushed 73e2bd445514: Pushed 2ec5c0a4cb57: Pushed latest: digest: sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb size: 948 }}} == OpenShift Originのインストール {{{ # yum install -y epel-release (必要であれば) # yum install -y docker (OpenShift 3.5相当のOpenShift Originを使う場合) # curl -k --location -O https://github.com/openshift/origin/releases/download/v1.5.1/openshift-origin-server-v1.5.1-7b451fc-linux-64bit.tar.gz (OpenShift 3.6rc0相当のOpenShiftを利用する場合) # curl -k --location -O https://github.com/openshift/origin/releases/download/v3.6.0-rc.0/openshift-origin-server-v3.6.0-rc.0-98b3d56-linux-64bit.tar.gz # tar zxvf openshift-origin-server-*.tar.gz # sudo mv openshift-* /opt/openshift # firewall-cmd --permanent --add-port=8443/tcp (firewalldが動作していれば) # setenforce 0 # systemctl enable docker # systemctl stop dnsmasq # systemctl disable dnsmasq (dnsmasqが動いていれば) ■下記のファイルの該当箇所を編集 ○/etc/sysconfig/docker-storage STORAGE_DRIVER='-s overlay2' ○/etc/sysconfig/docker #OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' OPTIONS='--log-driver=journald --signature-verification=false' ○/etc/sysconfig/docker-network DOCKER_NETWORK_OPTIONS='-dns 8.8.8.8' ○/etc/selinux/config #SELINUXTYPE=enforcing SELINUXTYPE=permissiv ■Docker / OpenShift実行 # systemctl restart docker # cd /opt/openshift # /opt/openshift/openshift start >& /var/log/openshift-console.log & 設定ファイルのパーミッション修正 # chmod +r "/opt/openshift/openshift.local.config/master/admin.kubeconfig" ■OpenShiftの利用 下記の環境変数を設定 export KUBECONFIG=/opt/openshift/openshift.local.config/master/admin.kubeconfig export CURL_CA_BUNDLE=/opt/openshift/openshift.local.config/master/ca.crt export PATH=/opt/openshift:${PATH} $ oc login ※ ユーザadmin/パスワードadminでログインできれば成功 }}} == Wildcard DNSの設定 /etc/dnsmasq.conf(もしくはdnsmasq.d/xxx.conf)に下記のように設定する。 {{{ address=/cluster.local/10.0.0.7 }}} test1.cluster.local,test2.cluster.localでアクセスすると、10.0.0.7で解決される。 == DNSについて 詳細は下記の3.6以降のセクションを読んでください。その前まで読んで満足すると最新のアーキテクチャと違うので**はまります** 参考: https://www.redhat.com/ja/blog/red-hat-openshift-container-platform-dns-deep-dive-dns-changes-red-hat-openshift-container-platform-36 OpenShift上では各ノード上で下記のDNSが動いています。 1. Dnsmasq(host ip:53) 2. SkyDNS(127.0.0.1:53) 3. SkyDNS(127.0.0.1:8053, masterノードのみ) また、外部からコンテナにアクセスするためのDNSが別途OpenShift外部に必要となります。 3は2から呼ばれるようになっていて、ユーザが意識する必要はあります。各OpenShiftノード(master/node)からは、 1を参照するように設定します。 ### /etc/resolv.conf {{{ search cluster.local test.example.com nameserver 192.168.1.3 }}} cluster.localはOpenShiftのコンテナ名のためのsuffixで固定です。test.example.comは環境によりことなり、OpenShiftのホスト名(node,master)のsuffixです。(ose3-node1.test.example.comというホスト名を利用した例) 次に、dnsmasqを設定します。とは言っても、OpenShiftをインストールするとある程度自動で設定されます。 まず、コンテナの名前解決ように下記の設定がされます。 ### /etc/dnsmasq.d/node-dnsmasq.conf {{{ server=/in-addr.arpa/127.0.0.1 server=/cluster.local/127.0.0.1 }}} コンテナ以外の名前解決については、自分で設定する必要があります。例えば、外部DNSを10.0.0.4とした場合、下記のような設定を**自分で追加**します。 ### /etc/dnsmasq.d/upstream-dns.conf {{{ server=10.0.0.4 }}} ### 外部DNS 外部のブラウザからアプリケーションの名前を解決するためのDNSが必要となります。Ansibleのインベントリの変数 openshift_master_default_subdomainで設定したホスト名を外部でLBのIPアドレスで解決するようにします。 {{{ server=8.8.8.8 address=/.apps.test.example.com/192.168.1.3 }}} LBの設定については、また今度、、