Skip to content

Ubuntu/Debian 安装 K8S 集群

安装 Docker

这里使用作者镜像的安装脚本,安装 Docker,并使用清华源。

bash
curl -O https://docs.alexsun.top/public/debian-basic.sh
chmod +x debian-basic.sh
sudo ./debian-basic.sh --update --docker --docker-socket -M tuna

配置 containerd 使用 systemd 作为 cgroup 驱动。

bash
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd

配置系统

禁用交换空间:

bash
sudo swapoff -a

需要注释 /etc/fstab 所有的 swap 行。

bash
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

这一步需要手动检查,如果还有没注释的内容需要删除,许多系统的 swap 配置不同:

bash
sudo vim /etc/fstab

安装 K8S

这里使用清华镜像:

bash
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/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://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.28.15-1.1 kubeadm=1.28.15-1.1 kubectl=1.28.15-1.1
sudo apt-mark hold kubelet kubeadm kubectl

配置系统网桥:

bash
sudo modprobe br_netfilter
echo 'br_netfilter' | sudo tee /etc/modules-load.d/k8s.conf
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

检查是否安装成功:

bash
cat /proc/sys/net/bridge/bridge-nf-call-iptables
cat /proc/sys/net/ipv4/ip_forward

初始化集群

【注意】以下步骤仅需要在 master 节点执行。

初始化集群:

bash
sudo kubeadm init \
  --pod-network-cidr=10.66.210.0/24 \
  --apiserver-advertise-address=10.66.210.175 \
  --control-plane-endpoint=10.66.210.175

如果成功,请留意输出的 kubeadm join 命令,稍后需要在 worker 节点执行。

配置 kubectl

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

安装 Calico 网络插件:

bash
curl https://raw.githubusercontent.com/projectcalico/calico/v3.30.0/manifests/calico.yaml -O

通常 Calico 会自动拉取镜像,但在中国大陆可能会失败,此时建议配置镜像:

bash
sed -i 's#docker.io/#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/#g' calico.yaml

应用 Calico:

bash
kubectl apply -f calico.yaml

加入 Worker 节点

在 worker 节点执行 kubeadm join 命令,此命令可直接复制上述输出的命令。

测试

测试集群是否正常:

bash
kubectl get nodes -o wide
kubectl get pods -n kube-system -o wide

检查某个 Pod 是否正常:

bash
kubectl describe pod -n kube-system $POD_NAME

删除 Pod:

bash
kubectl delete pod -n kube-system $POD_NAME