在 Debian 上安装 Kubernetes(k8s) 时,有几个非常关键但又容易被忽略的点。下面按 “必须做 / 强烈建议 / 常见坑” 来总结,适合生产环境也适合学习环境。
uname -a
cat /etc/os-release
Kubernetes 明确要求关闭 swap
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
⚠️ 不关 swap,kubelet 会直接报错
学习环境:
sudo ufw disable
生产环境: 至少放行:
hostnamectl set-hostname master
cat <<EOF >> /etc/hosts
192.168.1.10 master
192.168.1.11 node1
EOF
⚠️ hostname 不能有大写字母、下划线
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
modprobe br_netfilter
echo br_netfilter | sudo tee /etc/modules-load.d/br_netfilter.conf
⚠️ Docker 已不再是 k8s 默认运行时(1.24+)
sudo apt update
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sudo systemctl restart containerd
sudo apt install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sock
⚠️ 常见错误:
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
| CNI | 适合 |
|---|---|
| Calico | 生产 |
| Flannel | 简单 |
| Cilium | 高级 |
Flannel 示例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
kubelet --cgroup-driver=systemd
containerd SystemdCgroup = true
sudo apt install -y chrony
sudo systemctl enable chronyd
90% 是:
✅ 使用 containerd 而不是 Docker
✅ 使用 Calico + kube-proxy ipvs
✅ 控制平面 至少 2C4G
✅ 工作节点 至少 2C4G
✅ 不要直接用 root 操作 kubectl
free -m # swap 必须为 0
systemctl status containerd
kubectl get nodes
kubectl get pods -A
如果你愿意,我可以:
直接告诉我你的 Debian 版本 + 单节点/多节点 即可。