この投稿はOpenShift Advent Calendar 2019の18日目の記事です。
ここではVMware vSphereで構成されたインフラ上にrhcosのovaをデプロイしてOpenShift4環境を作って一先ず動かすことをゴールとします。
基本的には以下の手順を参考にしています。
ただ、OpenShift4に関連するコンポーネントのインストールや一部設定がないので補足してやってみます。
後、一部Ansibleを使って自動化もしてみます。
検証環境
環境図
今回構成する環境は以下の通りです。
- Web
- OpenShiftのコンポーネントがIgnitionファイルをダウンロードするのに必要なWebサーバです
- DHCP
- OpenShiftのコンポーネントにIPを払い出すDHCPサーバです
- OpenShiftのコンポーネントIPは固定化する必要があるのでMacアドレスで固定化します
- HAProxy
- サービスへのアクセスやセットアップで使用します
VMスペック
項目 | CPU | Mem | Disk |
---|---|---|---|
bootstrap | 2 | 8GB | 120GB |
master1 | 4 | 16GB | 120GB |
master2 | 4 | 16GB | 120GB |
master3 | 4 | 16GB | 120GB |
worker1 | 2 | 8GB | 120GB |
worker2 | 2 | 8GB | 120GB |
バージョン
項目 | バージョン | 備考 |
---|---|---|
OpenShift | 4.2.4 | |
vCenter | 6.7.0 | |
ESXi | 6.7.0 | |
rhcos | 4.2.0 | |
Ansible | 2.9.2 | モジュールはdevelを使う |
CentOS | 7.7 | web/dhcp/haproxy/dns OS |
ハマったポイント
- ESXiの時間がズレているとインストール作業が開始されない
- rhcosのテンプレートをvCenterのインベントリから削除して違うvCenterへ移動したらインストール作業が開始されなかった
関連コンポーネント構築
DNS
bindのインストール
bindをインストールします。
1 2 |
[root@dns ~]# yum -y install bind |
bindの設定と起動
named.confは以下のように設定しています。
1 2 |
[root@localhost ~]# vi /etc/named.conf |
ここでは、ゾーンを持っていない場合に問い合わせる上位DNSは 8.8.8.8
を指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator's Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { #listen-on port 53 { 127.0.0.1; }; #listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; #allow-query { localhost; }; allow-query { any; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ #dnssec-enable yes; #dnssec-validation yes; forwarders { 8.8.8.8; }; #forward only; recursion yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "example.com" IN { type master; file "example.db"; }; zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.db"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; |
正引きファイルを作成します。
1 2 |
[root@localhost ~]# vi /var/named/example.db |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$TTL 86400 @ IN SOA dns.example.com. root.example.com.( 2018092901 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS dns.example.com. dns IN A 192.168.0.109 master1.openshift4 IN A 192.168.1.220 master2.openshift4 IN A 192.168.1.221 master3.openshift4 IN A 192.168.1.222 worker1.openshift4 IN A 192.168.1.223 worker2.openshift4 IN A 192.168.1.224 etcd-0.openshift4 IN A 192.168.1.220 etcd-1.openshift4 IN A 192.168.1.221 etcd-2.openshift4 IN A 192.168.1.222 bootstrap.openshift4 IN A 192.168.1.225 api.openshift4 IN A 192.168.1.229 api-int.openshift4 IN A 192.168.1.229 *.apps.openshift4 IN A 192.168.1.229 www IN A 192.168.1.230 dhcp IN A 192.168.1.231 _etcd-server-ssl._tcp.openshift4 IN SRV 0 10 2380 etcd-0.openshift4 _etcd-server-ssl._tcp.openshift4 IN SRV 0 10 2380 etcd-1.openshift4 _etcd-server-ssl._tcp.openshift4 IN SRV 0 10 2380 etcd-2.openshift4 |
逆引きファイルを作成します。
1 2 |
[root@localhost ~]# vi /var/named/1.168.192.in-addr.arpa.db |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$TTL 86400 @ IN SOA dns.example.com. root.example.com.( 2018092901 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS dns.example.com. 220 IN PTR master1.openshift4.example.com. 221 IN PTR master2.openshift4.example.com. 222 IN PTR master3.openshift4.example.com. 223 IN PTR worker1.openshift4.example.com. 224 IN PTR worker2.openshift4.example.com. 225 IN PTR bootstrap.openshift4.example.com. 226 IN PTR etcd-0.openshift4.example.com. 227 IN PTR etcd-1.openshift4.example.com. 228 IN PTR etcd-2.openshift4.example.com. 229 IN PTR api.openshift4.example.com. 229 IN PTR api-int.openshift4.example.com. 230 IN PTR www.openshift4.example.com. |
bindを起動します。
1 2 3 |
[root@dns ~]# systemctl start named [root@dns ~]# systemctl enabled named |
Webサーバ
Apacheインストール
Apacheをインストールします。
1 2 |
[root@web ~]# yum -y install httpd |
Apacheの起動
ここでは(後で作る)Ignitionファイルのダウンロードが出来れば良いのでApacheを起動するだけにします。
1 2 3 |
[root@web ~]# systemctl start httpd [root@web ~]# systemctl enable httpd |
DHCPサーバ
DHCPインストール
DHCPをインストールします。
1 2 |
[root@dhcp ~]# yum -y install dhcp |
設定ファイル(Ansibleで自動生成する)の変更と起動は後でやります。
HAProxy
HAProxyインストール
HAProxyをインストールします。
1 2 |
[root@haproxy ~]# yum -y install haproxy |
HAProxy設定と起動
HAProxyの設定は以下のようにしています。
1 2 |
[root@haproxy ~]# vi /etc/haproxy/haproxy.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults #mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend openshift-api-server bind *:6443 default_backend openshift-api-server mode tcp option tcplog backend openshift-api-server balance source mode tcp server btstrap 192.168.1.225:6443 check server master1 192.168.1.220:6443 check server master2 192.168.1.221:6443 check server master3 192.168.1.222:6443 check frontend machine-config-server bind *:22623 default_backend machine-config-server mode tcp option tcplog backend machine-config-server balance source mode tcp server btstrap 192.168.1.225:22623 check server master1 192.168.1.220:22623 check server master2 192.168.1.221:22623 check server master3 192.168.1.222:22623 check frontend ingress-http bind *:80 default_backend ingress-http mode tcp option tcplog backend ingress-http balance source mode tcp server worker1 192.168.1.223:80 check server worker2 192.168.1.224:80 check frontend ingress-https bind *:443 default_backend ingress-https mode tcp option tcplog backend ingress-https balance source mode tcp server worker1 192.168.1.223:443 check server worker2 192.168.1.224:443 check |
syslog経由でログを出力するようにrsyslogの設定を変更します。
1 2 3 4 5 6 7 8 9 10 |
[root@haproxy ~]# vi /etc/rsyslog.conf (snip) # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 (snip) # HAProxy local2.* /var/log/haproxy.log (snip) |
HAProxy用のログファイルを作成します。
1 2 |
[root@haproxy ~]# touch /var/log/haproxy.log |
rsyslogを再起動します。
1 2 |
[root@haproxy ~]# systemctl restart rsyslog |
HAProxyを起動します。
1 2 3 |
[root@haproxy ~]# systemctl start haproxy [root@haproxy ~]# systemctl enable haproxy |
OpenShift4
OpenShift4のデプロイ作業はwebサーバ上で行います。
そのため、以下の作業は全てwebサーバで実行します。
Ansibleインストール
virtualenvを用意してAnsibleとpyvmomiをインストールします。
1 2 3 4 5 6 |
[root@web ~]# yum -y install epel-release [root@web ~]# yum -y install python36 [root@web ~]# python3 -m venv venv [root@web ~]# source venv/bin/activate (venv) [root@web ~]# pip install ansible pyvmomi |
Ansibleを使ってrhcosのクローンを後で作ります。
クローンする時にカスタム値を設定するのですが、2.9.xの vmware_guest
と module_utilsの vmware
を使うと以下のエラーが発生します。
そのため vmware_guest
と vmware
modules_utilsの最新版をダウンロードします。
1 2 3 4 5 |
(venv) [root@web ~]# mkdir library (venv) [root@web ~]# mkdir module_utils (venv) [root@web ~]# curl -L https://raw.githubusercontent.com/ansible/ansible/devel/lib/ansible/modules/cloud/vmware/vmware_guest.py -o library/vmware_guest.py (venv) [root@web ~]# curl -L https://raw.githubusercontent.com/ansible/ansible/devel/lib/ansible/module_utils/vmware.py -o module_utils/vmware.py |
必要ツールのインストール
以下のURLから openshift-install-linux-4.2.10.tar.gz
をダウンロードして openshift-install
コマンドをインストールします。
1 2 3 4 |
(venv) [root@web ~]# curl -L https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-install-linux-4.2.10.tar.gz -O (venv) [root@web ~]# tar zxvf openshift-install-linux-4.2.10.tar.gz (venv) [root@web ~]# mv openshift-install /usr/local/bin/ |
以下のURLから oc
と kubectl
コマンドをダウンロードしてインストールします。
1 2 3 4 5 |
(venv) [root@web ~]# curl -L https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-server-v3.11.0-0cbc58b-linux-64bit.tar.gz -O (venv) [root@web ~]# tar zxvf openshift-origin-server-v3.11.0-0cbc58b-linux-64bit.tar.gz (venv) [root@web ~]# mv openshift-origin-server-v3.11.0-0cbc58b-linux-64bit/kubectl /usr/local/bin/ (venv) [root@web ~]# mv openshift-origin-server-v3.11.0-0cbc58b-linux-64bit/oc /usr/local/bin/ |
ovaのデプロイ
以下のURLから rhcos-4.2.0-x86_64-vmware.ova
をダウンロードします。
1 2 |
[root@web ~]# curl -L https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.2/latest/rhcos-4.2.0-x86_64-vmware.ova -O |
以下のplaybookを作成してovaをデプロイします。
vCenterにESXiをホスト名またはFQDNで登録している場合は名前解決ができる必要があります
1 2 |
[root@web ~]# vi deploy_rhcos.yml |
以下の change me
部分を修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
--- - name: rhcos deploy playbook hosts: localhost gather_facts: no vars: vcenter_auth_info: &vcenter_auth_info hostname: change me(vCenter IP or FQDN or Hostname) username: administrator@vsphere.local password: change me validate_certs: no datacenter: change me cluster: change me folder: openshift4 datastore: change me port_group: change me tasks: - name: create folder vcenter_folder: <<: *vcenter_auth_info datacenter_name: "{{ datacenter }}" folder_name: "{{ folder }}" state: present - name: deploy rhcos ova vmware_deploy_ovf: <<: *vcenter_auth_info datacenter: "{{ datacenter }}" cluster: "{{ cluster }}" folder: "/{{ datacenter }}/vm/{{ folder }}" name: rhcos-4.2.0 networks: "{u'VM Network':u'{{ port_group }}'}" datastore: "{{ datastore }}" ovf: rhcos-4.2.0-x86_64-vmware.ova power_on: no |
playbookを実行してovaをデプロイします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
(venv) [root@web ~]# ansible-playbook deploy_rhcos.yml [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [rhcos deploy playbook] ******************************************************************************************************************************************** TASK [create folder] **************************************************************************************************************************************************** ok: [localhost] TASK [deploy rhcos ova] ************************************************************************************************************************************************* changed: [localhost] PLAY RECAP ************************************************************************************************************************************************************** localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
インストール用設定ファイルの作成
OpenShift4をインストールするための設定ファイルを作成します。
1 2 3 4 |
(venv) [root@web ~]# mkdir openshift4 (venv) [root@web ~]# cd openshift4 (venv) [root@web openshift4]# vi install-config.yaml |
pullSecret
は以下のURLにアクセスしてログインし VMware vSphere
をクリックし Copy Pull Secret
をクリックして貼り付けてください。
又は
sshkey
はSSHの公開鍵を貼り付けてください。ここでは /root/.ssh/id_rsa.pub
の中身を貼り付けています。
change me
はvSphere環境に合わせて設定してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
apiVersion: v1 baseDomain: example.com compute: - hyperthreading: Enabled name: worker replicas: 0 controlPlane: hyperthreading: Enabled name: master replicas: 3 metadata: name: openshift4 networking: clusterNetworks: - cidr: 10.254.0.0/16 hostPrefix: 24 networkType: OpenShiftSDN serviceNetwork: - 172.30.0.0/16 platform: vsphere: vcenter: change me username: administrator@vsphere.local password: change me datacenter: change me defaultDatastore: change me pullSecret: '{"auths":{"cloud.openshift.com":{.......' sshKey: 'ssh-rsa AAAAB......' |
Ignitionファイルを作成します。
まずは、インストール用のマニフェストを作成します。
1 2 3 4 |
(venv) [root@web openshift4]# openshift-install create manifests INFO Consuming "Install Config" from target directory WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings |
ここでは masterSchedulable
を無効化します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
(venv) [root@web openshift4]# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/g' manifests/cluster-scheduler-02-config.yml (venv) [root@web openshift4]# cat manifests/cluster-scheduler-02-config.yml apiVersion: config.openshift.io/v1 kind: Scheduler metadata: creationTimestamp: null name: cluster spec: mastersSchedulable: false policy: name: "" status: {} |
Ignitionファイルを作成します。
1 2 3 4 5 6 |
(venv) [root@web openshift4]# openshift-install create ignition-configs INFO Consuming "Worker Machines" from target directory INFO Consuming "Common Manifests" from target directory INFO Consuming "Openshift Manifests" from target directory INFO Consuming "Master Machines" from target directory |
次にbootstrap VMに埋め込む用の append-bootstrap.ign
を作成します。
source
には bootstrap.ign
のURLを記述します。
1 2 |
(venv) [root@web openshift4]# vi append-bootstrap.ign |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
{ "ignition": { "config": { "append": [ { "source": "http://192.168.1.230/ignition/bootstrap.ign", "verification": {} } ] }, "timeouts": { }, "version": "2.1.0" }, "networkd": { }, "passwd": { }, "storage": { }, "systemd": { } } |
bootstrap.ign
を上記パスにコピーします。
1 2 3 4 |
(venv) [root@web openshift4]# mkdir /var/www/html/ignition/ (venv) [root@web openshift4]# cp bootstrap.ign /var/www/html/ignition/ (venv) [root@web openshift4]# chown apache.apache -R /var/www/html/ignition/ |
bootstrap、master、workerに埋め込むIgnitionファイルをbase64でエンコードします。
1 2 3 4 5 6 7 8 9 |
(venv) [root@web openshift4]# for i in append-bootstrap master worker do base64 -w0 < $i.ign > $i.64 done (venv) [root@web openshift4]# ls -l *.64 -rw-r--r-- 1 root root 492 12月 17 00:42 append-bootstrap.64 -rw-r--r-- 1 root root 2436 12月 17 00:42 master.64 -rw-r--r-- 1 root root 2436 12月 17 00:42 worker.64 |
元のディレクトリに戻ります。
1 2 |
(venv) [root@web openshift4]# cd /root |
VMのクローン
bootstrap、master、workerのVMをクローンします。
以下のplaybookとテンプレートを作成します。
VMの設定パラメーターに以下のキーと値を設定する必要があるので、Playbookで自動追加します。
key | value |
---|---|
guestinfo.ignition.config.data | base64でエンコードされた各Ignition |
guestinfo.ignition.config.data.encoding | base64 |
disk.EnableUUID | TRUE |
1 2 |
(venv) [root@web ~]# vi openshift4_vm_clone.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
--- - name: vm provisioner for openshift4 hosts: localhost gather_facts: no vars: # vCenter Info vcenter_auth_info: &vcenter_auth_info hostname: change me(vCenter IP or FQDN or Hostname) username: administrator@vsphere.local password: change me validate_certs: no datacenter: change me cluster: change me folder: /vm/openshift4 template: rhcos-4.2.0 # OpenShift4 Components append_bootstrap_64: "{{ lookup('file', 'openshift4/append-bootstrap.64') }}" master_64: "{{ lookup('file', 'openshift4/master.64') }}" worker_64: "{{ lookup('file', 'openshift4/worker.64') }}" common_customvalues: - key: guestinfo.ignition.config.data.encoding value: base64 - key: disk.EnableUUID value: "TRUE" openshift_components: - name: bootstrap num_cpus: 2 memory_gb: "{{ 8 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.225 customvalues: - key: guestinfo.ignition.config.data value: "{{ append_bootstrap_64 }}" - name: master1 num_cpus: 4 memory_gb: "{{ 16 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.220 customvalues: - key: guestinfo.ignition.config.data value: "{{ master_64 }}" - name: master2 num_cpus: 4 memory_gb: "{{ 16 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.221 customvalues: - key: guestinfo.ignition.config.data value: "{{ master_64 }}" - name: master3 num_cpus: 4 memory_gb: "{{ 16 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.222 customvalues: - key: guestinfo.ignition.config.data value: "{{ master_64 }}" - name: worker1 num_cpus: 2 memory_gb: "{{ 8 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.223 customvalues: - key: guestinfo.ignition.config.data value: "{{ worker_64 }}" - name: worker2 num_cpus: 2 memory_gb: "{{ 8 * 1024 }}" disk_gb: 120 ipv4: 192.168.1.224 customvalues: - key: guestinfo.ignition.config.data value: "{{ worker_64 }}" # DHCP Config dhcp_subnet: 192.168.1.0 dhcp_netmask: 255.255.255.0 dhcp_range: "192.168.1.220 192.168.1.229" dhcp_routers: 192.168.1.254 dhcp_nameserver: 192.168.0.109 tasks: - name: Clone VM from template. vmware_guest: <<: *vcenter_auth_info datacenter: "{{ datacenter }}" cluster: "{{ cluster }}" folder: "{{ folder }}" name: "{{ item.name }}" template: "{{ template }}" hardware: num_cpus: "{{ item.num_cpus }}" num_cpu_cores_per_socket: 1 memory_mb: "{{ item.memory_gb }}" disk: - size_gb: "{{ item.disk_gb }}" type: thin datastore: VM3 customvalues: "{{ item.customvalues + common_customvalues }}" state: present register: result loop: "{{ openshift_components }}" - name: set dhcp_config variable set_fact: dhcp_config: >- {{ dhcp_config | default([]) + [{ "name": item.instance.hw_name, "macaddress": item.instance.hw_eth0.macaddress } | combine(data) ] }} vars: data: >- {{ openshift_components | selectattr("name", "equalto", item.instance.hw_name) | list | first }} loop: "{{ result.results }}" - name: generate dhcpd conf template: src: dhcpd.conf.j2 dest: dhcpd.conf |
1 2 |
(venv) [root@web ~]# vi dhcpd.conf.j2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # subnet {{ dhcp_subnet }} netmask {{ dhcp_netmask }} { range {{ dhcp_range }}; option routers {{ dhcp_routers }}; option domain-name-servers {{ dhcp_nameserver }}; } {% for config in dhcp_config %} host {{ config.name }} { hardware ethernet {{ config.macaddress }}; fixed-address {{ config.ipv4 }}; } {% endfor %} |
playbookを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
(venv) [root@web ~]# ansible-playbook openshift4_vm_clone.yml [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [vm provisioner for openshift4] ***************************************************************************************************************************************** TASK [Clone VM from template.] *********************************************************************************************************************************************** changed: [localhost] => (item={'name': 'bootstrap', 'num_cpus': 4, 'memory_gb': 16, 'disk_gb': 120, 'ipv4': '192.168.1.225', 'customvalues': [{'key': 'guestinfo.ignition.conf (snip) TASK [generate dhcpd conf] ********************************************************************************************************************************************** changed: [localhost] PLAY RECAP ************************************************************************************************************************************************************** localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
DHCPサーバの設定が生成されているのでDHCPサーバにコピーしてサービスを再起動します。
1 2 3 4 5 6 |
(venv) [root@web ~]# scp dhcpd.conf root@192.168.1.231:/etc/dhcp/dhcpd.conf root@192.168.1.231's password: dhcpd.conf 100% 831 3.1MB/s 00:00 (venv) [root@web ~]# ssh root@192.168.1.231 systemctl restart dhcpd root@192.168.1.231's password: |
VMのパワーオン
クローンしたbootstrap、master、workerのパワーをオンにします。
Bootstrap処理の完了
以下のコマンドを実行して処理完了状況を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(venv) [root@web ~]# cd openshift4 (venv) [root@web openshift4]# openshift-install wait-for bootstrap-complete --log-level debug DEBUG OpenShift Installer v4.2.4 DEBUG Built from commit 425e4ff0037487e32571258640b39f56d5ee5572 INFO Waiting up to 30m0s for the Kubernetes API at https://api.openshift4.example.com:6443... DEBUG Still waiting for the Kubernetes API: Get https://api.openshift4.example.com:6443/version?timeout=32s: EOF DEBUG Still waiting for the Kubernetes API: Get https://api.openshift4.example.com:6443/version?timeout=32s: EOF (snip) DEBUG Still waiting for the Kubernetes API: the server could not find the requested resource (snip) INFO API v1.14.6+dc8862c up INFO Waiting up to 30m0s for bootstrapping to complete... DEBUG Bootstrap status: complete INFO It is now safe to remove the bootstrap resources |
上記のメッセージが表示されたらbootstrapサーバを停止します。
インストールの完了
KUBECONFIG
環境変数にkubeconfigのパスを指定します。
1 2 |
(venv) [root@web openshift4]# export KUBECONFIG=auth/kubeconfig |
CSRの状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
(venv) [root@web openshift4]# oc get csr NAME AGE REQUESTOR CONDITION csr-9gktb 10m system:node:master1.openshift4.example.com Approved,Issued csr-9q9ls 11m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-9wdpd 11m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-bn8fh 11m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-h9m2v 10m system:node:worker2.openshift4.example.com Approved,Issued csr-mdzdj 10m system:node:master2.openshift4.example.com Approved,Issued csr-nx57d 10m system:node:master3.openshift4.example.com Approved,Issued csr-tbwmv 11m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-tn7j5 11m system:node:worker1.openshift4.example.com Approved,Issued csr-whhj7 11m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued |
次のコマンドを実行して保留中のCSRを承認します。
1 2 3 4 5 6 7 8 9 10 11 12 |
(venv) [root@web openshift4]# oc get csr --no-headers | awk '{print $1}' | xargs oc adm certificate approve certificatesigningrequest.certificates.k8s.io/csr-9gktb approved certificatesigningrequest.certificates.k8s.io/csr-9q9ls approved certificatesigningrequest.certificates.k8s.io/csr-9wdpd approved certificatesigningrequest.certificates.k8s.io/csr-bn8fh approved certificatesigningrequest.certificates.k8s.io/csr-h9m2v approved certificatesigningrequest.certificates.k8s.io/csr-mdzdj approved certificatesigningrequest.certificates.k8s.io/csr-nx57d approved certificatesigningrequest.certificates.k8s.io/csr-tbwmv approved certificatesigningrequest.certificates.k8s.io/csr-tn7j5 approved certificatesigningrequest.certificates.k8s.io/csr-whhj7 approved |
ノード情報が表示されるか確認します。
1 2 3 4 5 6 7 8 |
(venv) [root@web openshift4]# oc get nodes NAME STATUS ROLES AGE VERSION master1.openshift4.example.com Ready master 11m v1.14.6+c7d2111b9 master2.openshift4.example.com Ready master 11m v1.14.6+c7d2111b9 master3.openshift4.example.com Ready master 11m v1.14.6+c7d2111b9 worker1.openshift4.example.com Ready worker 11m v1.14.6+c7d2111b9 worker2.openshift4.example.com Ready worker 11m v1.14.6+c7d2111b9 |
イメージレス取りストレージを空のディレクトリに設定するため emptyDir
の設定をします。
1 2 3 |
(venv) [root@web openshift4]# oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' config.imageregistry.operator.openshift.io/cluster patched |
もし、以下のエラーが発生した場合はOperatorがコンポーネントの初期化が完了していないので数分待機した後にコマンドを再実行します。
1 2 |
Error from server (NotFound): configs.imageregistry.operator.openshift.io "cluster" not found |
次のコマンドを実行してインストールを完了します。
1 2 3 4 5 6 7 8 |
(venv) [root@web openshift4]# openshift-install wait-for install-complete INFO Waiting up to 30m0s for the cluster at https://api.openshift4.example.com:6443 to initialize... INFO Waiting up to 10m0s for the openshift-console route to be created... INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/openshift4/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.openshift4.example.com INFO Login to the console with user: kubeadmin, password: W4Utk-o6f26-N64A7-3Ltc4 |
クライアントにDNS(ここでは 192.168.0.109
)を登録するかhostsに以下を追加します。
1 2 3 4 |
192.168.1.229 console-openshift-console.apps.openshift4.example.com 192.168.1.229 oauth-openshift.apps.openshift4.example.com 192.168.1.229 grafana-openshift-monitoring.apps.openshift4.example.com |
https://console-openshift-console.apps.openshift4.example.com
にアクセスします。
ログイン画面が表示されるので上記で表示された kubeadmin
でログインします。
ログインできることを確認します。