0%

kubernetes 集群部署

本次演示将使用 debian12 部署 kubernetes 简称 k8s
当前的 docker 版本为 27.0.3,k8s 版本为 v1.30.0

本次演示将使用三个 debian 每个机器的配置为 4核4G

node1 192.168.10.59 主控
node2 192.168.10.60 节点
node3 192.168.10.61 节点

部署docker 和 k8s

下面的操作需要在所有机器运行

安装 dcoker

安装 docker
下面的命令是从 https://docs.docker.com/engine/install/debian/ 拷贝的

1
2
3
4
5
6
7
8
9
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果你需要在当前用户运行的话请运行下面的这句命令,然后关闭终端重新登录。

1
sudo usermod -aG docker $USER

安装 k8s

安装 k8s 需要修改 docker 的 cgroup
这里我参考的 https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#cgroup-drivers

启用 IPv4 数据包转发

1
2
3
4
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

修改 docker 的 cgroup 需要使用 containerd 的默认配置,使用下面的命令生成默认配置

1
containerd config default | sudo tee /etc/containerd/config.toml

然后修改 /etc/containerd/config.toml 内的 SystemdCgroup = false 将其改成 SystemdCgroup = true

重启 containerd

1
sudo systemctl restart containerd

安装 k8s
这里我参考是的 https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1
2
3
4
5
6
sudo apt install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

组装集群

下面的操作需要,需要不用每个机器都执行了节点和主控要分开操作

在主控上初始化集群

登录 192.168.10.59 执行下面的操作

这里的 --pod-network-cidr 10.244.0.0/16 是 flanne 需要的网段,具体请参考 https://github.com/flannel-io/flannel
--apiserver-advertise-address 是主控的 ip

1
sudo kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address 192.168.10.59

初始化成功后 stdout 里有一句类似于 kubeadm join 192.168.10.59:6443 --token <token> --discovery-token-ca-cert-hash sha256:<sash> 这样的输出,复制出来,稍后会用到

让当前登录的的普通也可以执行 kubectl

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

部署 cni

cni 必须部署不然节点加入后,状态一直是 NotReady

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

节点加入主控

登录节点 192.168.10.60192.168.10.61 运行,刚刚在主控上复制的,加入节点的命令,记得在命令的最前面加入 sudo

1
sudo kubeadm join 192.168.10.59:6443 --token <token> --discovery-token-ca-cert-hash sha256:<sash>

到这里部署就完成了

检查部署状态

登录主控 192.168.10.59 运行 kubectl get nodes

下面是输出结果

1
2
3
4
5
6
niconiconi@node1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 NotReady control-plane 114s v1.30.2
node2 NotReady <none> 40s v1.30.2
node3 NotReady <none> 33s v1.30.2
niconiconi@node1:~$

如果是像我这样的输出,那么就是节点还没准好,稍等一下后再次运行 kubectl get nodes
一般准备时间不会超过2分钟。等节点状态全部变成 Ready 后,集群就部署成功了

1
2
3
4
5
6
niconiconi@node1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane 4m30s v1.30.2
node2 Ready <none> 3m16s v1.30.2
node3 Ready <none> 3m9s v1.30.2
niconiconi@node1:~$