セルフホストでKubernetesを構築する #
実装について #
- ハイパバイザ:ESXi
- ホストOS:Ubuntu 22.04
実装の流れ #
- 仮想マシンの設定
- 全ノードで共通の設定をする
- 各ノードの設定をする
- Masterノードにて設定する
- Workerノードにて設定する
構成 #
- Masterノード
- ホスト名:lab-k8s-master-node
- 構成:
- vCPU:2
- RAM:4GB
- Disk:30GB
- Workerノード
- ホスト名:lab-k8s-worker-node01
- 構成:
- vCPU:2
- RAM:4GB
- Disk:30GB
1. 仮想マシンの設定
以下のように設定
2. 全ノードで共通の設定をする
- 各ノードのホストを/etc/hostsに記載
root@lab-k8s-master-node:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 lab-k8s-master-node
192.168.100.81 lab-k8s-master-node # Masterノード
192.168.100.82 lab-k8s-worker-node01 # Workerノード
192.168.100.83 lab-k8s-worker-node02 # 今後追加予定のWorkerノード
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
- swapを無効化
root@lab-k8s-master-node:~# swapoff -a
root@lab-k8s-master-node:~# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- カーネルモジュールをロード
root@lab-k8s-master-node:~# tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
root@lab-k8s-master-node:~# modprobe overlay
root@lab-k8s-master-node:~# modprobe overlay
root@lab-k8s-master-node:~# tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
- containerdをインストール、起動・永続化
root@lab-k8s-master-node:~# apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
root@lab-k8s-master-node:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
root@lab-k8s-master-node:~# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
root@lab-k8s-master-node:~# apt update
root@lab-k8s-master-node:~# apt install -y containerd.io
root@lab-k8s-master-node:~# containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
root@lab-k8s-master-node:~# sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
root@lab-k8s-master-node:~# systemctl restart containerd
root@lab-k8s-master-node:~# systemctl enable containerd
- Kubernetes関連のパッケージをインストイール
root@lab-k8s-master-node:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/kubernetes-xenial.gpg
root@lab-k8s-master-node:~# apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
root@lab-k8s-master-node:~# apt update
root@lab-k8s-master-node:~# apt install -y kubelet kubeadm kubectl
root@lab-k8s-master-node:~# apt-mark hold kubelet kubeadm kubectl
3. 各ノードの設定をする
3-1. Masterノードにて設定する
- 以下k8sを初期化
- ※ここで出力されるトークンを記録しましょう
root@lab-k8s-master-node:~# kubeadm init --control-plane-endpoint=lab-k8s-master-node
root@lab-k8s-master-node:~# mkdir -p $HOME/.kube
root@lab-k8s-master-node:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@lab-k8s-master-node:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 以下のyamlファイルを実行してCalicoをローカルk8sにデプロイ
root@k8s-master:~# kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
3-2. Workerノードにて設定する
kubeadm join
を実行(クラスタに参加)
kubeadm join k8s-master:6443 --token pg46jl.pvynngmtqsrukf6l --discovery-token-ca-cert-hash sha256:${"kubeadm init"実行時に出力されたトークン情報}
実装後 #
root@lab-k8s-master-node:~# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-6c99c8747f-4mvpd 1/1 Running 0 42h
kube-system calico-node-d28wl 1/1 Running 0 42h
kube-system calico-node-d4gnf 1/1 Running 0 42h
kube-system coredns-5d78c9869d-ctnc5 1/1 Running 0 43h
kube-system coredns-5d78c9869d-fbsdf 1/1 Running 0 43h
kube-system etcd-lab-k8s-master-node 1/1 Running 0 43h
kube-system kube-apiserver-lab-k8s-master-node 1/1 Running 0 43h
kube-system kube-controller-manager-lab-k8s-master-node 1/1 Running 0 43h
kube-system kube-proxy-cwhfc 1/1 Running 0 42h
kube-system kube-proxy-gc97b 1/1 Running 0 43h
kube-system kube-scheduler-lab-k8s-master-node 1/1 Running 0 43h
kubernetes-dashboard dashboard-metrics-scraper-764cf47594-l6vzg 1/1 Running 0 42h
kubernetes-dashboard kubernetes-dashboard-68997bf576-vjgh2 1/1 Running 0 42h
root@lab-k8s-master-node:~# kubectl get node
NAME STATUS ROLES AGE VERSION
lab-k8s-master-node Ready control-plane 43h v1.27.2
lab-k8s-worker-node01 Ready <none> 42h v1.27.2
- 今回はただk8sを建てただけなので、ここから様々なサービスを実装してみたい思います。