在 Debian 上部署 Kubernetes(k8s)时,建议从 系统准备、容器运行时、k8s 版本、网络与存储、运维与安全 几个维度重点关注。下面按实战经验给你一份“注意清单”。
✅ 推荐
⚠️ 注意
查看内核:
uname -r
k8s 官方 强烈建议关闭 swap:
swapoff -a
sed -i '/swap/d' /etc/fstab
否则 kubelet 可能起不来或报:
running with swap on is not supported
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
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
✅ 官方推荐
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
✅ kubelet 与 containerd 必须一致
systemd查看:
kubelet --help | grep cgroup
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
避免 apt upgrade 时自动升级 k8s:
apt-mark hold kubelet kubeadm kubectl
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sock
常见 CNI:
192.168.0.0/1610.244.0.0/16mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
否则节点一直 NotReady
✅ 常用选择:
示例(Calico):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
确保端口开放:
| 组件 | 端口 |
|---|---|
| API Server | 6443 |
| kubelet | 10250 |
| Calico | 179 |
| NodePort | 30000–32767 |
Debian 默认 ufw 或 nftables:
ufw allow 6443
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
否则 CNI 可能异常。
systemd-resolved 时注意 /etc/resolv.confrm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
apt install -y chrony
systemctl enable chrony
证书对时间非常敏感。
✅ 必做:
✅ 推荐:
✅ swap off
✅ systemd cgroup
✅ containerd running
✅ kernel modules loaded
✅ sysctl applied
✅ CNI installed
✅ firewall ports open
✅ clock synchronized
如果你愿意,我可以:
你现在是要 单机测试 还是 生产多节点?