CentOS 部署 Kubernetes 的关键要点
一 环境准备与系统基线
- 资源与拓扑:至少准备1 台 Master + 2 台 Node,每台建议≥2 核 CPU、≥2GB 内存、≥30GB 磁盘,节点间内网互通,可访问外网(拉取镜像)。
- 主机名与解析:为各节点设置唯一hostname,并在所有节点维护一致的 /etc/hosts 或使用内网 DNS。
- 时间同步:安装并启用 NTP/chrony,保证节点间时间一致(例如 ntpdate 或 chronyd 服务)。
- 关闭 Swap:执行 swapoff -a 并在 /etc/fstab 中注释 swap 条目,Kubelet 要求禁用 Swap。
- SELinux:建议设为 SELINUX=permissive(或 disabled),并重启使其生效。
- 防火墙与安全组:测试环境可临时关闭 firewalld;生产环境应基于最小暴露面配置规则,仅开放 6443/10250/10251/10252/8472(UDP, Flannel VXLAN) 等必要端口。
- 内核参数:启用桥接与转发,创建 /etc/sysctl.d/k8s.conf:
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
执行 sysctl --system 生效。
二 容器运行时与 kubelet 配置
- 运行时选择:优先使用 containerd(轻量、与 K8s 集成度高);也可使用 Docker(需配置 cgroup 驱动一致)。
- 安装 containerd(示例):
- 加载内核模块:overlay、br_netfilter
- 安装包:yum install -y containerd.io
- 启动并设为开机自启:systemctl enable --now containerd
- 安装 kubeadm/kubelet/kubectl:
- 添加 Kubernetes YUM 源(可选国内镜像源以加速)
- 安装:yum install -y kubelet kubeadm kubectl
- 开机自启:systemctl enable --now kubelet(此时 kubelet 可能处于 CrashLoopBackOff,待集群初始化后恢复)
- 重要配置:
- 若使用 Docker,编辑 /etc/docker/daemon.json,设置 “exec-opts”: [“native.cgroupdriver=systemd”],与 kubelet 一致。
- 可选:启用 IPVS 提升大规模 Service 转发性能(加载 ip_vs 内核模块并配置 kube-proxy 模式)。
三 初始化控制平面与节点加入
- 镜像准备:提前拉取所需镜像(kube-apiserver/controller-manager/scheduler/proxy/pause/etcd/coredns),可用 kubeadm config images list 查看并按需拉取(国内镜像源可加速)。
- 初始化 Master:
- 命令示例:
kubeadm init --apiserver-advertise-address=<MASTER_IP> \
–pod-network-cidr=<POD_CIDR> \
–service-cidr=<SERVICE_CIDR> \
–image-repository= \
–kubernetes-version=
- 常见取值:POD_CIDR=10.244.0.0/16(Flannel) 或 10.96.0.0/12(Calico);SERVICE_CIDR=10.96.0.0/12。
- 配置 kubectl:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 加入 Worker:
- 方式一:使用 kubeadm init 输出中的 kubeadm join 命令。
- 方式二:在 Master 上生成新令牌:
kubeadm token create --print-join-command
- 验证:
kubectl get nodes
kubectl get pods -A
四 网络方案选择与部署
- 必须安装 CNI 网络插件,否则节点将一直处于 NotReady。
- 常见方案对比:
| 插件 |
适用场景 |
关键特性 |
典型 CIDR/配置 |
| Flannel |
快速上手、通用 VXLAN |
覆盖网络、部署简单 |
Pod CIDR 常用 10.244.0.0/16 |
| Calico |
需要网络策略、可路由网络 |
纯三层 BGP、支持 NetworkPolicy |
可按需规划 Pod CIDR(如 10.96.0.0/12 或自定义) |
| Weave Net |
多主机灵活组网 |
点对点加密链路、策略支持 |
自动发现与配置 |
- 部署示例:
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 网络策略:启用 NetworkPolicy 做命名空间/Pod 间访问控制,提升安全性。
五 高可用、可观测、安全与运维
- 高可用:
- 控制平面:部署 3 台 Master 并结合 kubeadm 的 HA 方案或外部 Keepalived + HAProxy 提供 VIP。
- 数据面:多 Node 分布,结合 Cluster Autoscaler 实现弹性。
- 可观测:
- 监控告警:Prometheus + Grafana + Alertmanager
- 日志:集中式 ELK/Fluentd
- 指标:Metrics Server + HPA 实现自动扩缩容
- 安全与合规:
- RBAC 最小权限;镜像与仓库可信;定期升级补丁;密钥/Secret 妥善管理;开启 Pod Security 或 PSP 策略。
- 备份与恢复:定期备份 etcd 与关键 Kubernetes 资源清单,并演练恢复流程。
- 日常运维:
- 节点维护:使用 cordon/drain 安全下线;
- 版本升级:遵循 kubeadm 升级流程 分阶段升级控制面与节点;
- 故障排查:journalctl -u kubelet、kubectl describe/logs、检查 CNI 与 Service CIDR 冲突。