コンテンツへスキップ

Ubuntu×3にKubernetesクラスタ構築

今回の環境

Ubuntu 21.04 192.168.10.211 ControlPlane 2vCPU 3GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.212 WorkerNode 1vCPU 1GBメモリ 16GB SSD
Ubuntu 21.04 192.168.10.213 WorkerNode 2vCPU 2GBメモリ 16GB SSD

Kubernetes のバージョンは1.22です。

VMWare ESXi 6.7U2上に構築しています。
スペックはわざとバラバラにしてみました。ちょっとケチりすぎたかも。

基本的に公式ドキュメントに沿って作業していきます。

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

nftablesではなくiptablesを使うよう変更

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# レガシーバイナリがインストールされていることを確認してください
sudo apt-get install -y iptables arptables ebtables
# レガシーバージョンに切り替えてください。
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
# レガシーバイナリがインストールされていることを確認してください sudo apt-get install -y iptables arptables ebtables # レガシーバージョンに切り替えてください。 sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy sudo update-alternatives --set arptables /usr/sbin/arptables-legacy sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
# レガシーバイナリがインストールされていることを確認してください
sudo apt-get install -y iptables arptables ebtables

# レガシーバージョンに切り替えてください。
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy

Dockerをインストール

https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/

HTTPS越しのリポジトリの使用をaptに許可するために、パッケージをインストール

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt-get update && sudo apt-get install -y \<br>apt-transport-https ca-certificates curl software-properties-common gnupg2
sudo apt-get update && sudo apt-get install -y \<br>apt-transport-https ca-certificates curl software-properties-common gnupg2
sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2

Docker公式のGPG鍵を追加

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Dockerのaptレポジトリを追加

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

 

バージョン指定が利かなかったので外しています

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt-get update && sudo apt-get install -y \
containerd.io \
docker-ce \ docker-ce-cli
sudo apt-get update && sudo apt-get install -y \ containerd.io \ docker-ce \ docker-ce-cli
sudo apt-get update && sudo apt-get install -y \
containerd.io \
docker-ce \ docker-ce-cli

デーモンをセットアップ

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
※Permission Deniedでファイルが出来なければsudo viで普通に作る
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF ※Permission Deniedでファイルが出来なければsudo viで普通に作る sudo mkdir -p /etc/systemd/system/docker.service.d
sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
※Permission Deniedでファイルが出来なければsudo viで普通に作る
sudo mkdir -p /etc/systemd/system/docker.service.d

dockerを再起動

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl daemon-reload sudo systemctl restart docker
sudo systemctl daemon-reload
sudo systemctl restart docker

kubeadm、kubelet、kubectlのインストール

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#kubeadm-kubelet-kubectl%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo apt-get update && sudo apt-get upgrade
sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl sudo apt-get update && sudo apt-get upgrade
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

sudo apt-get update && sudo apt-get upgrade

swapを無効に

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo swapoff -a
sudo swapoff -a
sudo swapoff -a

再起動したとき元に戻らないよう、swap.imgをコメントアウト

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo vi /etc/fstab
#swap.img none swap sw 0 0
sudo vi /etc/fstab #swap.img none swap sw 0 0
sudo vi /etc/fstab

#swap.img none swap sw 0 0

Project CalicoをKubernetesで使ってみる:構築編 を参考にkubeadmの操作

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo kubeadm init --apiserver-advertise-address=192.168.10.211 --pod-network-cidr=192.168.0.0/16
sudo kubeadm init --apiserver-advertise-address=192.168.10.211 --pod-network-cidr=192.168.0.0/16
sudo kubeadm init --apiserver-advertise-address=192.168.10.211 --pod-network-cidr=192.168.0.0/16

CNI(Container Network Interface)はCalicoを使う予定で、--pod-network-cidr で指定しているIPアドレス範囲は、CALICO_IPV4POOL_CIDRの値に合わせています。

https://docs.projectcalico.org/reference/node/configuration

Your Kubernetes control-plane has initialized successfully! のあとに、クラスタに参加させるためのkubeadmコマンドが表示されます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubeadm join 192.168.10.211:6443 --token ********************* \
--discovery-token-ca-cert-hash sha256:***************************************************************
kubeadm join 192.168.10.211:6443 --token ********************* \ --discovery-token-ca-cert-hash sha256:***************************************************************
kubeadm join 192.168.10.211:6443 --token ********************* \
--discovery-token-ca-cert-hash sha256:***************************************************************
kubectlをroot以外のユーザーでも実行できるように
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

他2台のWorkerNodeでもswapの無効化とkubeadm join ~を実行してクラスタに参加させます。

CNIのインストールを行います。

Installing Addonsのページでは大量に紹介されているのですが、前述の通りCalicoを選択。
Google Cloud のGKEでもCalicoを使っているらしく、似た環境にしたいためです。

CalicoQuickStartを参考に。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

tigera-operator.yaml をkubectl createすると実行はできますが、下記のWarningが出ます。

Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+

Kubernetes1.21以降PodSecurityPolicyは非推奨で、1.25から正式に廃止されるとのこと。
ちなみに、policy/v1ではPodSecurityPolicyは存在しません。
PodSecurityPolicyの置き換えは議論中らしいのでそのまま使うことに。

上のふたつのyamlをcreateしてからPodの様子を見てみます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
alico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
$ kubectl get pods -n calico-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h calico-node-nl5mt 1/1 Running 0 9h calico-node-vgjb2 1/1 Running 0 9h alico-node-wrmtn 1/1 Running 0 9h calico-typha-788bf594d7-fjt54 1/1 Running 0 9h calico-typha-788bf594d7-tvld2 1/1 Running 0 9h calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
alico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h

STATUSがすべてRunningになっていたらOK

Nodeの様子も確認します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
calico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
$ kubectl get pods -n calico-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h calico-node-nl5mt 1/1 Running 0 9h calico-node-vgjb2 1/1 Running 0 9h calico-node-wrmtn 1/1 Running 0 9h calico-typha-788bf594d7-fjt54 1/1 Running 0 9h calico-typha-788bf594d7-tvld2 1/1 Running 0 9h calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h
$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-bdd5f97c5-zq5tp 1/1 Running 0 9h
calico-node-nl5mt 1/1 Running 0 9h
calico-node-vgjb2 1/1 Running 0 9h
calico-node-wrmtn 1/1 Running 0 9h
calico-typha-788bf594d7-fjt54 1/1 Running 0 9h
calico-typha-788bf594d7-tvld2 1/1 Running 0 9h
calico-typha-788bf594d7-x5pcr 1/1 Running 0 9h

もしNotReadyになっていたらkubectl describe nodesやsystemctl status kubectlで何が起きているか確認し、トラブルシュートしていきます。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA