Container Linuxにkubeadmを入れて、k8sクラスタを構築する
はじめに、Container Linuxを3台用意しておく。
- k8s01(192.168.0.2/24)
- k8s02(192.168.0.3/24)
- k8s03(192.168.0.4/24)
バージョンは、こちら。
$ grep VERSION= /etc/os-release VERSION=2023.5.0
Container Linuxの初期設定
各ホストで、パスワード、ホスト、固定IPアドレスの設定を済ませる。
パスワードの設定
$ sudo passwd core
ホストの名前設定
$ sudo hostnamectl set-hostname k8s01 $ sudo vi /etc/hosts $ grep k8s01 /etc/hosts 127.0.0.1 localhost k8s01
固定IPアドレスの設定
### k8s01の設定 $ sudo vi /etc/systemd/network/static.network $ sudo cat /etc/systemd/network/static.network [Match] Name=eth0 [Network] Address=192.168.0.2/24 Gateway=192.168.0.1 DNS=8.8.8.8 ### ネットワークの再起動 $ sudo systemctl restart systemd-networkd
kubeadmのインストール
にあるContainer Linuxのインストール手順をrootで実行する。
$ cat install.sh ### CNIをインストール CNI_VERSION="v0.6.0" mkdir -p /opt/cni/bin curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-amd64-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz ### CRICTLをインストール CRICTL_VERSION="v1.11.1" mkdir -p /opt/bin curl -L "https://github.com/kubernetes-incubator/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | tar -C /opt/bin -xz ### kubeadm, kubelet, kubectlをインストール RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)" mkdir -p /opt/bin cd /opt/bin curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl} chmod +x {kubeadm,kubelet,kubectl} curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service mkdir -p /etc/systemd/system/kubelet.service.d curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ### kubeletを有効にする。 systemctl enable kubelet && systemctl start kubelet $ sudo sh install.sh
k8sクラスタ構築
マスターノード構築
### k8s01側 ### クラスタの初期化 $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ### ブリッジのパケットをiptablesで処理できるようにする設定 $ sudo sysctl net.bridge.bridge-nf-call-iptables=1 $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config ### masterとして稼働していることを確認 $ kubectl cluster-info Kubernetes master is running at https://10.200.8.117:6443 KubeDNS is running at https://10.200.8.117:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. ### クラスタに参加するためのkubeadm join コマンドが発行されるので、控えておく。
ノード追加
### k8s02とk8s03側 $ sudo kubeadm join 192.168.0.2:6443 --token pu2npf.e42wltclx0f64bdc --discovery-token-ca-cert-hash sha256:9eb6af07398ebf79ef0acb0b70e18fca5f26c00912c2e132bbe634568316c347
クラスタ確認
### k8s01側 $ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s01 NotReady master 1m v1.13.4 k8s02 NotReady <none> 3s v1.13.4 k8s03 NotReady <none> 3s v1.13.4
Flannel設定
クラスタが構築できたが、STATUSがNotReadyになっている。
ノードをまたいで、Pod同士が通信できるように、Flannelで、オーバレイネットワークを設定する。
### k8s01側 $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml $ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s01 Ready master 5m28s v1.13.4 k8s02 Ready <none> 3m49s v1.13.4 k8s03 Ready <none> 2m23s v1.13.4
以上で、kubeadmを用いてk8sクラスタを構築することができた。
参考
https://coreos.com/flannel/docs/latest/kubernetes.html