Preparation

To setup a k8s cluster, I will prepare 4 machines with the following network setting:

hostnameiprole
gm-mini192.168.31.199HAProxy
gm-red192.168.31.200k8s master
gm-green192.168.31.201k8s master
gm-blue192.168.31.202k8s worker
gm-orange192.168.31.203k8s worker

1. create master on gm-red

sudo kubeadm init \
    --apiserver-advertise-address=192.168.31.200 \
    --image-repository=registry.aliyuncs.com/google_containers \
    --kubernetes-version=v1.29.0 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16 \
    --cri-socket=unix:///run/containerd/containerd.sock \
    --control-plane-endpoint=192.168.31.199:6443 \
    --upload-certs

2. Apply CNI network plugin

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

3. Join as control-panel nodes (gm-green)

sudo kubeadm join 192.168.31.199:6443 \
    --token 7yszg3.su99ir6t8m9o8ttr \
	--discovery-token-ca-cert-hash sha256:xxxx \
	--control-plane \
    --certificate-key yyyyy

4. Join as worker node (gm-blue, gm-orange)

sudo kubeadm join 192.168.31.199:6443 \
    --token aaa.bbb \
	--discovery-token-ca-cert-hash sha256:xxxx