在 CentOS 上部署 Kubernetes(k8s) 时,有很多“坑”是生产环境必须注意的。下面从 系统准备、安装方式、网络、存储、安全、运维 几个维度总结关键注意事项。
生产环境也可考虑 Rocky Linux / AlmaLinux 替代 CentOS
systemctl stop firewalld
systemctl disable firewalld
或放行 k8s 所需端口(6443、10250 等)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/d' /etc/fstab
kubelet 默认不允许使用 swap
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
modprobe br_netfilter
yum install -y containerd
systemctl enable --now containerd
注意
SystemdCgroup = true配置
| 方式 | 适合场景 |
|---|---|
| kubeadm | ✅ 生产 / 学习最常用 |
| 二进制 | 高级定制 |
| kubespray | 多节点自动化 |
kubeadm init \
--pod-network-cidr=10.244.0.0/16
/etc/hosts 正确解析常见选择:
注意:
| 角色 | CPU | 内存 |
|---|---|---|
| Master | 2C | 4G |
| Worker | 2C | 4G |
生产建议 Master ≥ 4C8G
hostnamectl set-hostname k8s-master
cat /etc/hosts
192.168.1.10 k8s-master
192.168.1.11 k8s-node1
etcdctl snapshot save snapshot.db
一定定期备份!
❌ swap 没关 → kubelet 起不来
❌ SELinux 没关 → pod 无法运行
❌ 时间不同步 → certificate expired
❌ firewalld 开着 → 节点 NotReady
❌ Docker 版本不兼容 → 容器起不来
kubectl get nodes
kubectl get pods -A
kubectl cluster-info
如果你愿意,我可以:
你现在是 学习环境还是生产环境?单节点还是多节点?