本次演示将使用 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 | sudo apt update |
如果你需要在当前用户运行的话请运行下面的这句命令,然后关闭终端重新登录。
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 | cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf |
修改 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 | sudo apt install -y apt-transport-https ca-certificates curl gpg |
组装集群
下面的操作需要,需要不用每个机器都执行了节点和主控要分开操作
在主控上初始化集群
登录 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 | mkdir -p $HOME/.kube |
部署 cni
cni 必须部署不然节点加入后,状态一直是 NotReady
1 | kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml |
节点加入主控
登录节点 192.168.10.60
和 192.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 | niconiconi@node1:~$ kubectl get nodes |
如果是像我这样的输出,那么就是节点还没准好,稍等一下后再次运行 kubectl get nodes
。
一般准备时间不会超过2分钟。等节点状态全部变成 Ready 后,集群就部署成功了
1 | niconiconi@node1:~$ kubectl get nodes |