下面给你一套用脚本自动化部署 Debian 上 Kubernetes(K8s) 的实战思路,适用于 Debian 11/12,使用 containerd + kubeadm(官方推荐方式)。
保存为 init-node.sh
#!/bin/bash
set -e
# 1. 关闭 swap
swapoff -a
sed -i '/swap/d' /etc/fstab
# 2. 设置内核参数
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
# 3. 安装依赖
apt update
apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
# 4. 安装 containerd
apt install -y containerd
# 5. 配置 containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 使用 systemd cgroup
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd
# 6. 添加 K8s apt 源
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | 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.28/deb/ /" > /etc/apt/sources.list.d/kubernetes.list
apt update
# 7. 安装 kubeadm kubelet kubectl
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
chmod +x init-node.sh
./init-node.sh
保存为 master.sh
#!/bin/bash
set -e
# 初始化集群
kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers
# 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 安装 Calico
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
echo "Master 部署完成"
chmod +x master.sh
./master.sh
在 Master 上执行:
kubeadm token create --print-join-command
复制输出内容,在 Worker 上执行(示例):
kubeadm join 192.168.1.10:6443 \
--token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx
可保存为 worker.sh
kubectl get nodes
kubectl get pods -A
ansible 批量部署cloud-init❌ swap 没关
❌ containerd 没用 systemd cgroup
❌ 防火墙未放行 6443/10250
❌ Debian 内核太旧
如果你需要:
告诉我你的使用场景,我可以直接给你完整脚本。