温馨提示×

Debian k8s部署要注意什么

小樊
46
2026-07-06 07:27:18
栏目: 智能运维

在 Debian 上部署 Kubernetes(k8s)时,建议从 系统准备、容器运行时、k8s 版本、网络与存储、运维与安全 几个维度重点关注。下面按实战经验给你一份“注意清单”。


一、系统环境与版本选择

1. Debian 版本选择

推荐

  • Debian 11 (Bullseye)
  • Debian 12 (Bookworm)

⚠️ 注意

  • Debian 10 已偏老,部分新内核特性支持不完整
  • 内核 ≥ 5.4 建议,否则部分 CNI / eBPF 功能受限

查看内核:

uname -r

2. 禁用 swap(非常重要)

k8s 官方 强烈建议关闭 swap

swapoff -a
sed -i '/swap/d' /etc/fstab

否则 kubelet 可能起不来或报:

running with swap on is not supported

3. 内核参数与模块

必须加载的内核模块

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

sysctl 参数

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system

二、容器运行时(非常关键)

1. containerd(推荐)

官方推荐

  • 不要用 Docker(已被 k8s 弃用直接支持)

Debian 安装 containerd

apt update
apt install -y containerd

生成默认配置

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

⚠️ 必须修改:

[plugins."io.containerd.grpc.v1.cri"]
  SystemdCgroup = true

然后重启:

systemctl restart containerd
systemctl enable containerd

2. 确认 cgroup 驱动一致

kubelet 与 containerd 必须一致

  • 推荐:systemd

查看:

kubelet --help | grep cgroup

三、Kubernetes 安装

1. 使用官方 APT 源(不要用 snap)

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

2. 锁定版本(生产必做)

避免 apt upgrade 时自动升级 k8s:

apt-mark hold kubelet kubeadm kubectl

四、初始化集群(kubeadm)

1. 初始化 Master

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket unix:///run/containerd/containerd.sock

常见 CNI:

  • Calico:192.168.0.0/16
  • Flannel:10.244.0.0/16

2. 配置 kubectl

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

五、网络与 CNI 插件

1. 必须安装 CNI

否则节点一直 NotReady

✅ 常用选择:

  • Calico(推荐生产)
  • Flannel(简单)

示例(Calico):

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

2. 防火墙 / 安全组

确保端口开放:

组件 端口
API Server 6443
kubelet 10250
Calico 179
NodePort 30000–32767

Debian 默认 ufwnftables

ufw allow 6443

六、常见坑(Debian 特有)

1. iptables 模式

update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

否则 CNI 可能异常。


2. DNS 问题

  • 使用 systemd-resolved 时注意 /etc/resolv.conf
  • 推荐:
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

3. 时间同步

apt install -y chrony
systemctl enable chrony

证书对时间非常敏感。


七、生产级建议

✅ 必做:

  • 多 master(kubeadm + haproxy/keepalived)
  • etcd 备份
  • 使用 containerd 而非 Docker
  • 禁用 swap
  • 内核参数优化
  • 固定 k8s / OS 版本

✅ 推荐:

  • 使用 Ansible / Terraform 自动化
  • 提前规划 Pod CIDR / Service CIDR
  • 分离 control-plane 与 worker

八、快速检查清单 ✅

✅ swap off
✅ systemd cgroup
✅ containerd running
✅ kernel modules loaded
✅ sysctl applied
✅ CNI installed
✅ firewall ports open
✅ clock synchronized

如果你愿意,我可以:

  • ✅ 给你一套 Debian + containerd + Calico 的完整部署脚本
  • ✅ 对比 Debian vs Ubuntu 在 k8s 上的差异
  • ✅ 帮你设计 生产级 k8s 架构

你现在是要 单机测试 还是 生产多节点

0