温馨提示×

如何用脚本部署Debian K8s

小樊
50
2026-09-17 11:32:49
栏目: 智能运维

下面给你一套用脚本自动化部署 Debian 上 Kubernetes(K8s) 的实战思路,适用于 Debian 11/12,使用 containerd + kubeadm(官方推荐方式)。


一、部署架构说明

  • 系统:Debian 11/12
  • 容器运行时:containerd
  • K8s 版本:1.28+(可自行改)
  • 网络插件:Calico
  • 方式:kubeadm
  • 角色:1 Master + N Worker

二、通用初始化脚本(所有节点)

保存为 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 节点部署脚本

保存为 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

四、Worker 节点加入脚本

在 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

六、可选增强(脚本可扩展)

  • 自动生成 join 命令
  • 使用 ansible 批量部署
  • 使用 cloud-init
  • 高可用(keepalived + haproxy)

七、常见坑

❌ swap 没关
❌ containerd 没用 systemd cgroup
❌ 防火墙未放行 6443/10250
❌ Debian 内核太旧


如果你需要:

  • 单节点 K8s
  • 离线部署脚本
  • Debian + k3s
  • 生产级 HA 脚本

告诉我你的使用场景,我可以直接给你完整脚本。

0