Kubernetes 環境をひとまずAnsibleで用意する

Kubernetesを動かすためのサーバーを構築。
その際にAnsibleのRoleを使うが本当にこれでいいのか?ということが分からなかったので、VMでサーバーを用意してそこでK8s環境を構築を目指す。
成果物については下記のリポジトリに対して反映を行うつもりなので、下記リポジトリをベースに進めます。
g00cey/sbc-ansible: ブログで出すときに困ったのでもう公開しちゃう
結論
そもそもの結論だけど、Minikubeから初めて見るほうがいいかもね(私はやったことがないけど)
下の記事にも書いてあるけど、Ansible Galaxyで構築の大半は完了のはずだよ。
Ansible Galaxyでセットアップする際必要なものたち
- masterノード
- kubernetes_role: “master”
- kubernetes_apiserver_advertise_address: 管理ノードのprivate_ip 172.16.20.3
- ここに関しては、バグというよりは、kubectladm側が任意のNICのIPを返却する。そのため、Vagrant環境だと、NAT通信用のNICを返却してうまいことCluster環境が構築できない。
- workerノード
- kubernetes_role: “node”
この記事でK8sを使用してサービス提供可能状態であるかの確認までは書けませんでした。
- この辺はMinikubeを経てK8s力がついてからやろうと思います。
- 方針に記載しているkubernetesセットアップ用のロールを使うで問題なさそう。
- ただ、実行前にapt updateを行うようにするプレイブック用意する
- そもそも使用するためにはkubernetesのネットワークについての理解が必要。
方針・前提条件
方針は
- 環境の用意は、vagrantを使用する
- これでよかった、これいきなりPi4などのバイメタルにぶち込んだらよくわからないことになって修復が大変だった
- 構築は、ansibleを使用する
- これは、元々Ansibleがあったので、回避不可
- 最終的には、Pi4に適用する
- ここに関しては今回の記事ではやっていないし、K8s慣れるまではちょっと無理かなぁ。
また、K8s構築については、下記ロールを使用する予定。
Ansible Galaxy
環境
- 開発環境
- master-node ubuntu/focal
- worker-node ubuntu/focal x 3
- 家庭環境(今回の記事では登場しません)
- master-node RaspberryPi4
- worker-node
- RaspberryPi4 x 3
- Ubuntu Server 20.04 AMD64
実施内容
ステップとしては下記を想定しています。
- 実験環境(VM)を用意
- ansible作成
- ansibleを流してみる
- asnibleでまずい個所を直してみる
- ansibleで作成された環境でK8sの操作を行ってみる
実験環境用意
Vagrantファイルを作成
この辺は、下記を参考にさせていただきました。
Kubernetes v1.10 クラスタをVagrantで構築したメモ - Qiita
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.define "master-node" do |s|
s.vm.box = "ubuntu/focal64"
s.vm.hostname = "masternode"
#public_ip = "192.168.1.#{i+90}"
#s.vm.network :public_network, ip: public_ip, bridge: "en0: Ethernet"
#if i == 1 then
# s.vm.network :forwarded_port, host: 8001, guest: 8001
#end
private_ip = "172.16.20.3"
s.vm.network "private_network", ip: private_ip
s.vm.provider "virtualbox" do |v|
v.cpus = 1
v.gui = false
v.memory = 1048
end
end
(1..3).each do |i|
config.vm.define "workernode-#{i}" do |s|
s.vm.box = "ubuntu/focal64"
s.vm.hostname = "workernode-#{i}"
#public_ip = "192.168.1.#{i+90}"
#s.vm.network :public_network, ip: public_ip, bridge: "en0: Ethernet"
#if i == 1 then
# s.vm.network :forwarded_port, host: 8001, guest: 8001
#end
private_ip = "172.16.20.#{i+10}"
s.vm.network "private_network", ip: private_ip
s.vm.provider "virtualbox" do |v|
v.cpus = 2
v.gui = false
v.memory = 1024
end
end
end
end
vagrant up
vagrant up
vagrant status
Current machine states:
master-node running (virtualbox)
workernode-1 running (virtualbox)
workernode-2 running (virtualbox)
workernode-3 running (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
いけてるね。
適用対象のサーバーが見えるかを確認
Vagrantファイルを作成で作成した環境にVMを生成したマシンからアクセスできるか確認する。
luna@a300:~/tmp/kubecluster$ ping 172.16.20.3
PING 172.16.20.3 (172.16.20.3) 56(84) bytes of data.
64 bytes from 172.16.20.3: icmp_seq=1 ttl=64 time=0.668 ms
^C
--- 172.16.20.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.668/0.668/0.668/0.000 ms
luna@a300:~/tmp/kubecluster$ ping 172.16.20.11
PING 172.16.20.11 (172.16.20.11) 56(84) bytes of data.
64 bytes from 172.16.20.11: icmp_seq=1 ttl=64 time=0.578 ms
ping はOK。sshは。。。
vagrant ssh-config
Host master-node
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/luna/tmp/kubecluster/.vagrant/machines/master-node/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Host workernode-1
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/luna/tmp/kubecluster/.vagrant/machines/workernode-1/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Host workernode-2
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/luna/tmp/kubecluster/.vagrant/machines/workernode-2/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Host workernode-3
HostName 127.0.0.1
User vagrant
Port 2202
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/luna/tmp/kubecluster/.vagrant/machines/workernode-3/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
これは困りましたね。 鍵がすべて別々です。 ただ、各々の鍵のパスも得られているので、各ansibleのhost接続情報で個別に鍵を指定することで対応します。
ansibleファイル作成
組み込み予定のリポジトリをチェックアウト
g00cey/sbc-ansible: ブログで出すときに困ったのでもう公開しちゃう こちらには、ansible環境はあるので、roleのインストールを行うところまでやります。
git clone git@github.com:g00cey/sbc-ansible.git
cd sbc-ansible
./exec-ansible-galaxy-install.sh
git branch develop/kubernetes
git checkout develop/kubernetes
ansibleから接続を行うところまで確認する
各VMの情報をコピー
vagrantで生成された他の情報も併せてディレクトリにコピーしておきます。
cp -R ../.vagrant/ docker/python/key/
手動操作が入っていますが、Vagrantで固定で鍵を使用できるためにするには、確かイメージから作成しないといけないと思ったので、これで行きます。
ansibleのテスト
元ファイルあったファイルをベースを試験的にファイルを作成
※書いてて思ったのは試験的という割に準備が非常に多い気もしますが。
ansibleを実行する環境はdockerにしています。 docker-compose-test.yml
version: "3.3"
services:
ansible:
image: registry.localdomain/ansible
working_dir: /home/ansible/ansible
user: ansible
volumes:
- ansible-galaxy:/etc/ansible/roles
- ./ansible:/home/ansible/ansible
# - ./docker/python/nopass_key:/key/nopass_key
- ./docker/python/key/.vagrant:/key/.vagrant
env_file: .env
volumes:
ansible-galaxy:
これは、dockerを叩くスクリプト exec-install-docker-test.sh
#!/bin/bash
docker-compose -f docker-compose-test.yml run --rm ansible ansible-playbook -i playbook/ansible-host-test.yml playbook/playbook-docker-test.yml
これはansibleの接続情報 ansible/playbook/ansible-host-test.yml
master-node:
hosts:
master:
ansible_host: 172.16.20.3
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/master-node/virtualbox/private_key
worker-node:
hosts:
worker-1:
ansible_host: 172.16.20.11
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-1/virtualbox/private_key
worker-2:
ansible_host: 172.16.20.12
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-2/virtualbox/private_key
worker-3:
ansible_host: 172.16.20.13
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-3/virtualbox/private_key
ansible/playbook/playbook-docker-test.yml
---
- hosts: master-node,woker-node
become: true
tasks:
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
ansibleをまずは流してみる
./exec-ansible-galaxy-install.sh
Starting galaxy role install process
[WARNING]: - geerlingguy.docker (2.9.0) is already installed - use --force to change version to unspecified
[WARNING]: - geerlingguy.kubernetes (5.0.0) is already installed - use --force to change version to unspecified
[WARNING]: - geerlingguy.pip (2.0.0) is already installed - use --force to change version to unspecified
[WARNING]: - geerlingguy.docker_arm (4.0.0) is already installed - use --force to change version to unspecified
まずは、roleを落としてきて
./exec-install-docker-test.sh
実行してみると、dockerのタスクでエラーが出てしまいました。 ansible-role-docker/setup-Debian.yml at master · geerlingguy/ansible-role-docker この行でエラーが出ました。実際にインストールしてみようとすると、ん?よくわからないエラーです。
vagrant@masternode:~$ sudo apt install gnupg2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package gnupg2 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
gpgv gpgsm gnupg-l10n gnupg dirmngr
おそらくですが、このエラーは初期のVMに対して行ったことが原因で、apt側にgnupg2ってパッケージがないって問題だと思ったので。(ググってみたら、gnupg2ってパッケージが存在しているため)
なので次に全更新を行うタスクを一回作成します。
aptの更新を行うタスク
./exec-update-test.sh
中身はこんな感じです。
exec-update-test.sh
#!/bin/bash
docker-compose -f docker-compose-test.yml run --rm ansible ansible-playbook -i playbook/ansible-host-test.yml playbook/playbook-update-test.yml
ansible/playbook/playbook-update-test.yml
---
- hosts: master-node,woker-node
become: true
tasks:
- name: apt update
apt:
update_cache: yes
upgrade: yes
autoremove: yes
まずはsnapshotを取るんだ
こういう時は一度snapshotを取る。
なお、この記事を書いているときに、一度目は忘れましたが、二度目に下記を実行し、dockerインストール用のロールを一部修正していることを思い出して、restoreして後述の章で事なきを得ました。
vagrant snapshot save updated
気を取り直してインストール
./exec-install-docker-test.sh
うん。今度はうまいこといってるね。
TASK [geerlingguy.kubernetes : Include OS-specific variables.] **********************************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-1]
ok: [workcer-2]
ok: [workcer-3]
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
included: /home/ansible/ansible/playbook/roles/geerlingguy.kubernetes/tasks/setup-Debian.yml for master, workcer-1, workcer-2, workcer-3
TASK [geerlingguy.kubernetes : Ensure dependencies are installed.] ******************************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-3]
ok: [workcer-2]
ok: [workcer-1]
TASK [geerlingguy.kubernetes : Add Kubernetes apt key.] *****************************************************************************************************************************************************************************************************************************************
changed: [master]
changed: [workcer-2]
changed: [workcer-1]
changed: [workcer-3]
TASK [geerlingguy.kubernetes : Add Kubernetes repository.] **************************************************************************************************************************************************************************************************************************************
changed: [master]
changed: [workcer-1]
changed: [workcer-2]
changed: [workcer-3]
TASK [geerlingguy.kubernetes : Add Kubernetes apt preferences file to pin a version.] ***********************************************************************************************************************************************************************************************************
changed: [master]
changed: [workcer-3]
changed: [workcer-2]
changed: [workcer-1]
TASK [geerlingguy.kubernetes : Ensure dependencies are installed.] ******************************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-3]
ok: [workcer-1]
ok: [workcer-2]
TASK [geerlingguy.kubernetes : Install Kubernetes packages.] ************************************************************************************************************************************************************************************************************************************
changed: [workcer-3] => (item={'name': 'kubelet', 'state': 'present'})
changed: [workcer-2] => (item={'name': 'kubelet', 'state': 'present'})
changed: [workcer-1] => (item={'name': 'kubelet', 'state': 'present'})
changed: [master] => (item={'name': 'kubelet', 'state': 'present'})
changed: [workcer-3] => (item={'name': 'kubectl', 'state': 'present'})
changed: [workcer-2] => (item={'name': 'kubectl', 'state': 'present'})
changed: [workcer-1] => (item={'name': 'kubectl', 'state': 'present'})
changed: [master] => (item={'name': 'kubectl', 'state': 'present'})
changed: [workcer-1] => (item={'name': 'kubeadm', 'state': 'present'})
changed: [workcer-2] => (item={'name': 'kubeadm', 'state': 'present'})
changed: [workcer-3] => (item={'name': 'kubeadm', 'state': 'present'})
changed: [master] => (item={'name': 'kubeadm', 'state': 'present'})
ok: [workcer-1] => (item={'name': 'kubernetes-cni', 'state': 'present'})
ok: [workcer-2] => (item={'name': 'kubernetes-cni', 'state': 'present'})
ok: [workcer-3] => (item={'name': 'kubernetes-cni', 'state': 'present'})
ok: [master] => (item={'name': 'kubernetes-cni', 'state': 'present'})
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
included: /home/ansible/ansible/playbook/roles/geerlingguy.kubernetes/tasks/sysctl-setup.yml for master, workcer-1, workcer-2, workcer-3
TASK [geerlingguy.kubernetes : Ensure procps is installed.] *************************************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-1]
ok: [workcer-2]
ok: [workcer-3]
TASK [geerlingguy.kubernetes : Let iptables see bridged traffic.] *******************************************************************************************************************************************************************************************************************************
changed: [master] => (item=net.bridge.bridge-nf-call-iptables)
changed: [workcer-2] => (item=net.bridge.bridge-nf-call-iptables)
changed: [workcer-3] => (item=net.bridge.bridge-nf-call-iptables)
changed: [workcer-1] => (item=net.bridge.bridge-nf-call-iptables)
changed: [workcer-2] => (item=net.bridge.bridge-nf-call-ip6tables)
changed: [master] => (item=net.bridge.bridge-nf-call-ip6tables)
changed: [workcer-3] => (item=net.bridge.bridge-nf-call-ip6tables)
changed: [workcer-1] => (item=net.bridge.bridge-nf-call-ip6tables)
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
included: /home/ansible/ansible/playbook/roles/geerlingguy.kubernetes/tasks/kubelet-setup.yml for master, workcer-1, workcer-2, workcer-3
TASK [geerlingguy.kubernetes : Check for existence of kubelet environment file.] ****************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-2]
ok: [workcer-3]
ok: [workcer-1]
TASK [geerlingguy.kubernetes : Set facts for KUBELET_EXTRA_ARGS task if environment file exists.] ***********************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : Set facts for KUBELET_EXTRA_ARGS task if environment file doesn't exist.] ****************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-1]
ok: [workcer-2]
ok: [workcer-3]
TASK [geerlingguy.kubernetes : Configure KUBELET_EXTRA_ARGS.] ***********************************************************************************************************************************************************************************************************************************
changed: [workcer-3]
changed: [workcer-1]
changed: [master]
changed: [workcer-2]
TASK [geerlingguy.kubernetes : Reload systemd unit if args were changed.] ***********************************************************************************************************************************************************************************************************************
changed: [workcer-2]
changed: [workcer-3]
changed: [workcer-1]
changed: [master]
TASK [geerlingguy.kubernetes : Ensure kubelet is started and enabled at boot.] ******************************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-2]
ok: [workcer-3]
ok: [workcer-1]
TASK [geerlingguy.kubernetes : Check if Kubernetes has already been initialized.] ***************************************************************************************************************************************************************************************************************
ok: [workcer-2]
ok: [workcer-1]
ok: [master]
ok: [workcer-3]
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
included: /home/ansible/ansible/playbook/roles/geerlingguy.kubernetes/tasks/master-setup.yml for master, workcer-1, workcer-2, workcer-3
TASK [geerlingguy.kubernetes : Initialize Kubernetes master with kubeadm init.] *****************************************************************************************************************************************************************************************************************
changed: [workcer-2]
changed: [workcer-1]
changed: [workcer-3]
changed: [master]
TASK [geerlingguy.kubernetes : Print the init output to screen.] ********************************************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : Ensure .kube directory exists.] **********************************************************************************************************************************************************************************************************************************
changed: [workcer-2]
changed: [master]
changed: [workcer-1]
changed: [workcer-3]
TASK [geerlingguy.kubernetes : Symlink the kubectl admin.conf to ~/.kube/conf.] *****************************************************************************************************************************************************************************************************************
changed: [master]
changed: [workcer-1]
changed: [workcer-2]
changed: [workcer-3]
TASK [geerlingguy.kubernetes : Configure Flannel networking.] ***********************************************************************************************************************************************************************************************************************************
changed: [workcer-3] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml)
changed: [workcer-1] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml)
changed: [master] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml)
changed: [workcer-2] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml)
changed: [workcer-1] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
changed: [workcer-3] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
changed: [master] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
changed: [workcer-2] => (item=kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
TASK [geerlingguy.kubernetes : Configure Calico networking.] ************************************************************************************************************************************************************************************************************************************
skipping: [master] => (item=kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml)
skipping: [workcer-1] => (item=kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml)
skipping: [workcer-2] => (item=kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml)
skipping: [workcer-3] => (item=kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml)
TASK [geerlingguy.kubernetes : Get Kubernetes version for Weave installation.] ******************************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : Configure Weave networking.] *************************************************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : Allow pods on master node (if configured).] **********************************************************************************************************************************************************************************************************************
changed: [workcer-3]
changed: [workcer-1]
changed: [workcer-2]
changed: [master]
TASK [geerlingguy.kubernetes : Check if Kubernetes Dashboard UI service already exists.] ********************************************************************************************************************************************************************************************************
ok: [workcer-1]
ok: [master]
ok: [workcer-3]
ok: [workcer-2]
TASK [geerlingguy.kubernetes : Enable the Kubernetes Web Dashboard UI (if configured).] *********************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
TASK [geerlingguy.kubernetes : Get the kubeadm join command from the Kubernetes master.] ********************************************************************************************************************************************************************************************************
ok: [master]
ok: [workcer-1]
ok: [workcer-3]
ok: [workcer-2]
TASK [geerlingguy.kubernetes : Set the kubeadm join command globally.] **************************************************************************************************************************************************************************************************************************
ok: [master -> 172.16.20.3] => (item=master)
ok: [master -> 172.16.20.11] => (item=workcer-1)
ok: [master -> 172.16.20.12] => (item=workcer-2)
ok: [master -> 172.16.20.13] => (item=workcer-3)
ok: [workcer-1 -> 172.16.20.3] => (item=master)
ok: [workcer-1 -> 172.16.20.11] => (item=workcer-1)
ok: [workcer-1 -> 172.16.20.12] => (item=workcer-2)
ok: [workcer-1 -> 172.16.20.13] => (item=workcer-3)
ok: [workcer-2 -> 172.16.20.3] => (item=master)
ok: [workcer-2 -> 172.16.20.11] => (item=workcer-1)
ok: [workcer-2 -> 172.16.20.12] => (item=workcer-2)
ok: [workcer-2 -> 172.16.20.13] => (item=workcer-3)
ok: [workcer-3 -> 172.16.20.3] => (item=master)
ok: [workcer-3 -> 172.16.20.11] => (item=workcer-1)
ok: [workcer-3 -> 172.16.20.12] => (item=workcer-2)
ok: [workcer-3 -> 172.16.20.13] => (item=workcer-3)
TASK [geerlingguy.kubernetes : include_tasks] ***************************************************************************************************************************************************************************************************************************************************
skipping: [master]
skipping: [workcer-1]
skipping: [workcer-2]
skipping: [workcer-3]
RUNNING HANDLER [geerlingguy.kubernetes : restart kubelet] **************************************************************************************************************************************************************************************************************************************
changed: [workcer-1]
changed: [workcer-3]
changed: [workcer-2]
changed: [master]
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************************************
master : ok=40 changed=19 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
workcer-1 : ok=40 changed=19 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
workcer-2 : ok=40 changed=19 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
workcer-3 : ok=40 changed=19 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
もちろんぱっとみ、この状態じゃダメ。だって、各々のサーバーが管理サーバーになっているログに見えるしさ。
geerlingguy/ansible-role-kubernetes: Ansible Role - Kubernetes
説明書きを最初から見るべきだったのだけど、そうじゃなかったので仕方がない。(捨てることが可能な環境だから出来る技)
一応K8sネットワークが構築完了出来たっぽいファイルの状態
K8sで入れているコンポーネント全てが正しく動いているか分かりませんが、現状のファイル群は、こんな感じになっております。
exec-install-docker-test.sh k8sインストール用プレイブックを実行
#!/bin/bash
docker-compose -f docker-compose-test.yml run --rm ansible ansible-playbook -i playbook/ansible-host-test.yml playbook/playbook-kubernetes.yml
exec-update-test.sh とりあえず、対象ホストを更新
#!/bin/bash
docker-compose -f docker-compose-test.yml run --rm ansible ansible-playbook -i playbook/ansible-host-test.yml playbook/playbook-update-test.yml
docker-compose-test.yml ansible実行用のyaml
version: "3.3"
services:
ansible:
image: registry.localdomain/ansible
working_dir: /home/ansible/ansible
user: ansible
volumes:
- ansible-galaxy:/etc/ansible/roles
- ./ansible:/home/ansible/ansible
# - ./docker/python/nopass_key:/key/nopass_key
- ./docker/python/key/.vagrant:/key/.vagrant
env_file: .env
volumes:
ansible-galaxy:
ansible-host-test.yml 対象ファイルを記述したinventory
master-node:
hosts:
master:
ansible_host: 172.16.20.3
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/master-node/virtualbox/private_key
vars:
kubernetes_role: "master"
kubernetes_apiserver_advertise_address: 172.16.20.3
worker-node:
hosts:
worker-1:
ansible_host: 172.16.20.11
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-1/virtualbox/private_key
worker-2:
ansible_host: 172.16.20.12
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-2/virtualbox/private_key
worker-3:
ansible_host: 172.16.20.13
ansible_user: vagrant
ansible_ssh_private_key_file: /key/.vagrant/machines/workernode-3/virtualbox/private_key
vars:
kubernetes_role: "node"
playbook-kubernetes.yml
---
- hosts: master-node, worker-node
become: true
tasks:
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
K8sの操作を行ってみる
上記のファイル群を適用完了状態だと仮定して、下記のチュートリアル紹介記事をやってみる。
[第1回]Kubernetesの公式チュートリアルをやって基本を押さえる -アプリのデプロイ- | Developers.IO
vagrant@masternode:~$ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
masternode Ready master 66m v1.19.3
workernode-1 Ready <none> 65m v1.19.3
workernode-2 Ready <none> 65m v1.19.3
workernode-3 Ready <none> 65m v1.19.3
vagrant@masternode:~$ sudo kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
pod/kubernetes-bootcamp created
vagrant@masternode:~$ sudo kubectl get deployments
No resources found in default namespace.
vagrant@masternode:~$ sudo kubectl get deployments -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 2/2 2 2 71m
どうもデプロイされていないっぽいっすね。 一応マスターノードで他のノードが見えてる状態まではできたのでこれでいったん止めておき、K8sに慣れ親しんでまた続きを書きます。
最後に
しり切れトンボになっとりますけど、K8s力自体が足りない状態でどうしてこうなっているかを確認するのは厳しいのでここで終了。
Cluster環境っぽいのが出来上がるまでは出来上がったよ。っていう状態っすね。