在 CentOS 上部署 Kubernetes(k8s) 时,有一些系统层面和集群层面的坑和注意事项非常常见。下面按「部署前 → 部署中 → 部署后」给你一个实用清单。
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
k8s 官方不要求在生产环境关 SELinux,但学习和测试环境建议关,避免莫名其妙的问题
swapoff -a
sed -i '/swap/d' /etc/fstab
kubelet 默认不允许使用 swap
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
modprobe br_netfilter
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd
时间不同步会导致:证书失败、etcd 异常
| k8s 版本 | 容器运行时 |
|---|---|
| ≤1.23 | docker + cri-dockerd |
| ≥1.24 | containerd(推荐) |
yum install -y containerd
systemctl enable containerd
systemctl start containerd
⚠️ CentOS 上 docker 默认 cgroup driver 是
cgroupfs,k8s 要求systemd
✅ kubeadm
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers
⚠️ 注意:
--pod-network-cidr 必须和 CNI 匹配| 插件 | 特点 |
|---|---|
| Flannel | 简单,适合测试 |
| Calico | 生产推荐 |
| Cilium | 新趋势(eBPF) |
Flannel 示例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
❌ 主机名不能用 localhost
❌ 多节点 hostname 必须唯一
❌ iptables 和 nftables 混用
❌ 忘记 kubeadm reset 就重装
❌ /var 分区太小(etcd 爆炸)
❌ 不配置 kubelet cgroup driver
如果你愿意,我可以:
你现在是 学习 / 测试 / 生产 环境?