« CentOS7 でresolv.confが上書きされる | トップページ | Kubernetesテストベンチへの道 寄り道メモ »

2020年8月13日 (木)

Kubernetesテストペンチへの道 その1 Kubeインストール


Contos7.7にKubernetesのインストールを行った。最終ゴールはCSIドライバの検証。その為のテストベンチの構築。

システムの前提:
メモリー 2GB
CPU 2コア。 2コア以上でないとkubeadmの初期化がエラーになるので重要。
但し、その実態はPlayer15.5.1上のゲストOSがESXi6.0の仮想マシーン。ペアレントOSはWindows 10。
ベースとなっているハードウエアはLenovo Minitower V530 (CPU i9-9900、Memory 32GB)

ステップ1:
/etc/hostname/に自分が設定したいhostnameを設定する。というのも、kubeadmで構成されるノード名はこのhostnameを使う為。放っておくとlocalhost.localdomainになってしまう。後から変更しようとすると大変みたい(一回試みたけれども、結局再インストールすることになったので)。

ステップ2:事前準備

Kubernetesではswapを無効化する必要があるようで、まずはそこから。

この状態ではswapは有効化されたまま。swapパーティションが設定されている。
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 115456 -2

で、swapを無効化する。
[root@localhost ~]# swapoff -a

無効化されてるとswapパーティションの設定はなくなる。
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@localhost ~]#


恒久的にswapを無効化するにはfstabファイルを編集する。
以下編集前。
[root@localhost ~]# ls /etc/fstab -l
-rw-r--r--. 1 root root 465 8月 9 10:36 /etc/fstab
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Aug 9 10:36:36 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=6530e066-08fd-43ef-923e-9d5bd349e51f /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@localhost ~]#

以下、編集後。これで再起動してもswapは無効化されたままになる。
[root@localhost ~]# vi /etc/fstab
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Aug 9 10:36:36 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=6530e066-08fd-43ef-923e-9d5bd349e51f /boot xfs defaults 0 0
# /dev/mapper/centos-swap swap swap defaults 0 0  <<-この行をコメントアウトする
[root@localhost ~]#

firewallと止めておく。
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# systemctl is-enabled firewalld
disabled
[root@localhost ~]# systemctl stop firewalld

SELinuxの動作を止める。
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled << このように設定する

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]#

リブートしてもSELinuxがDisableのままであることを確認
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#
リブートしてもswapが復活しないことも確認。
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@localhost ~]#


ステップ3:dockerのインストール

[root@localhost ~]# yum install docker

[root@localhost ~]# systemctl start docker

dockerが動いているか確認。
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
f8f5f6fe0aa5 bridge bridge local
2a4fafec0ac1 host host local
3b75d12b352c none null local

今回インストールしたバージョンは以下。
[root@localhost ~]# docker -v
Docker version 1.13.1, build 64e9980/1.13.1

bridgeネットワークを確認すると172.17.0.0/16を使っていることが分かるので、念のため自分の環境がこのIPアドレスを使っていないことを確認。
[root@localhost ~]# docker network inspect bridge
前略

"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
後略

ステップ4: kubeadmのインストール
以下のrepoファイルを作成する。
[root@localhost ~]# vi /etc/yum.repos.d/kubernetes.repo
[root@localhost ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

kubeadmのインストール実行。
[root@localhost ~]# yum install kubeadm

完了しました!
[root@localhost ~]#

kubectlをインストール。けれども不要のようで。。。。
[root@localhost ~]# yum install kubectl
読み込んだプラグイン:fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Loading mirror speeds from cached hostfile
* base: mirrors.cat.net
* extras: ftp.yz.yamagata-u.ac.jp
* updates: ftp.yz.yamagata-u.ac.jp
パッケージ kubectl-1.18.6-0.x86_64 はインストール済みか最新バージョンです
何もしません
[root@localhost ~]#


自動スタートするように変更
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost ~]#

[root@localhost ~]# systemctl enable kubelet.service

bridge-nf-call-iptablesを確認。
[root@localhost ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1だったら何もする必要がないが、0だったら以下を実行して1にする。そうしないとkubeadm initがエラーになる。
[root@localhost ~]# echo net.bridge.bridge-nf-call-iptables = 1 > /etc/sysctl.d/tmp-bridge-nf-call-iptables
[root@localhost ~]# sysctl -p /etc/sysctl.d/tmp-bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1
[root@localhost ~]#
で、確認。
[root@localhost ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
[root@localhost ~]#

[root@localhost ~]#

ここまでがMaster/Worker共有。以降はMasterのみ実行。

ステップ5:kubeadmの初期化

kubeadmの初期化の実行
ここで--pod-network-cidrは重要で、このアドレスレンジでpodにIPが割り当てられる。この設定値はあとでFlannelを設定するときに指定する値と同じにする必要がある。ちなみに10.244.0.0/16はFlannelのDefault値。この値にすればFlannelの設定を変更しなくても済む。
[root@localhost ~]# kubeadm init --apiserver-advertise-address=192.168.1.131 --pod-network-cidr=10.244.0.0/16

省略...

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.131:6443 --token 2x2256.gnt4vc4k35aj8ay7 \
--discovery-token-ca-cert-hash sha256:105ec7c037a732e7233055bc1aea53dca76fb10e72cfdf122937b58957c1d492
[root@localhost ~]#

Warningメッセージが出ていればちゃんとチェックして必要な対応をすること。WorkerがこのMasterにJoinするには出力の一番最後のkubeadm joinをWorkerで実行すること。

出力されたガイドに従って以下を実行。
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# mkdir -p $HOME/.kube
[root@localhost ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@localhost ~]# chown $(id -u):$(id -g) $HOME/.kube/config

kubectlが動作していることを確認。
[root@localhost ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady master 8m21s v1.18.6
[root@localhost ~]#
Pod間の通信ネットワークが開通していないので、StatusはNotReadyになっている。

ステップ6:Flannelのインストール

そこでFlannelのインストール。まずはymlファイルの確認。
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

[root@localhost ~]# vi kube-flannel.yml
編集前
net-conf.json: |
{
"Network": "10.244.0.0/16",  << ここがkubeadm initの--pod-network-cidr=で左記と違う値に設定した場合はその値を設定する。

"Backend": {
"Type": "vxlan"
}
}

ymlファイルの適用。
[root@localhost ~]# kubectl apply -f kube-flannel.yml

これでMasterノードはReadyになる、
[root@localhost ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 38m v1.18.6
[root@localhost ~]#

以上でMasterノードの設定は完了。

注意の追記:

Master/Workerとも次を実行しておかないと、再起動後にサービスが動かないので要注意。
# systemctl enable kubelet.service

以降はWorkerノードでの作業

Worker NodeをMasterにJoinさせる。

Kubeadm初期時に出力されたコマンドを使う。
# kubeadm join 192.168.1.131:6443 --token 8lscjp.6wdzj6n4w9svlwic --discovery-token-ca-cert-hash sha256:683d2a8ce762c8367f4cfa65b702bae1ef4b3d62623e706ac3042c9ea7cefd18 

ただし、kubeadm初期時のtokenの有効期間は24時間なので、それを過ぎると以下を実行して新しいTokenでのコマンドを取り直す必要がある。
# kubeadm token create --print-join-command

正しくJoinできてるか確認。
# kubectl get nodes

以上

« CentOS7 でresolv.confが上書きされる | トップページ | Kubernetesテストベンチへの道 寄り道メモ »

ソフトウエア導入」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« CentOS7 でresolv.confが上書きされる | トップページ | Kubernetesテストベンチへの道 寄り道メモ »