适用于 CentOS 的 Kubernetes 容器编排技巧
一 基础环境与内核优化
- 关闭或放宽安全策略:临时关闭 SELinux(setenforce 0),生产可改为 permissive;关闭 firewalld 或按需精确放行端口;禁用 Swap(swapoff -a 并注释 /etc/fstab),否则 kubelet 可能拒绝启动或性能受影响。
- 主机与内核网络:配置 /etc/hosts 保证节点互解析;启用桥接与转发:加载 br_netfilter,设置 net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1、net.ipv4.ip_forward=1 并
sysctl --system 生效。
- 容器运行时与 cgroup:优先选择 Containerd(轻量、符合 CRI);安装后生成默认配置并将 SystemdCgroup = true,与 kubelet 的 cgroup 驱动保持一致,避免 “cgroup driver mismatch”。
- 镜像与版本:国内环境为加速拉取核心镜像,可在
kubeadm init 时使用 –image-repository registry.aliyuncs.com/google_containers;选择与运行时匹配的 Kubernetes 版本,避免组件不兼容。
二 集群初始化与工作节点加入
- 安装组件:在所有节点安装 kubeadm、kubelet、kubectl 并
systemctl enable --now kubelet,保持 kubelet 持续运行直至集群就绪。
- 初始化控制平面:在 Master 执行
kubeadm init,指定 –apiserver-advertise-address、–pod-network-cidr(如 10.244.0.0/16 对应 Flannel,或 192.168.0.0/16 常见用于 Calico),必要时使用 –image-repository 指定国内镜像源。
- 配置 kubectl:拷贝 /etc/kubernetes/admin.conf 到 $HOME/.kube/config 并修正权限。
- 安装 CNI 网络插件:如 Flannel(
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml)或 Calico(按官方清单安装),确保与 –pod-network-cidr 一致。
- 加入工作节点:使用
kubeadm join ... 命令;若 token 过期,在主节点执行 kubeadm token create --print-join-command 重新生成。
三 高可用与控制平面负载均衡
- 架构要点:为 kube-apiserver 前置 负载均衡器(VIP + Keepalived 或 HAProxy),实现 API 入口高可用;多 Master 场景下 kube-controller-manager 与 kube-scheduler 自带选主机制。
- 方案示例:两台 Master 部署 HAProxy + Keepalived,对外暴露 VIP:6443;HAProxy 四层转发至各 Master 的 6443,Keepalived 提供 VRRP 故障漂移。
- kubeadm 方式:也可采用 –control-plane-endpoint <LOAD_BALANCER_DNS:PORT> 与 –upload-certs 的方式引导多控制面集群,再由工作节点
kubeadm join 加入。
四 工作负载编排与调度优化
- 资源与副本:为 Pod 设置 requests/limits,避免资源争用;通过 Deployment 管理副本与滚动更新。
- 调度策略:使用 nodeSelector / nodeAffinity / podAffinity / podAntiAffinity 控制 Pod 分布,提升可用性与性能;例如对无状态服务设置 podAntiAffinity 打散到不同节点。
- 有状态与守护:有状态应用用 StatefulSet(稳定网络标识与有序部署/扩缩容),节点级守护用 DaemonSet(如日志、监控、网络插件)。
- 配置与密钥:用 ConfigMap 管理配置、Secret 管理敏感信息,与镜像解耦,便于环境差异化与安全管理。
五 镜像、存储、监控与日常运维
- 镜像与运行时:优先选择 轻量基础镜像(如 Alpine) 减小攻击面与传输耗时;在 CentOS 8+ 默认 cgroups v2 环境下,确保 kubelet/容器运行时 兼容配置。
- 持久化存储:结合 PV/PVC 与 StorageClass 对接本地盘、NFS、Ceph 等,为数据库等有状态服务提供稳定存储。
- 可观测性:部署 Prometheus + Grafana 监控集群与应用指标,使用 ELK/EFK 集中收集与分析日志。
- 维护与升级:定期 升级 Kubernetes 与节点组件、回滚失败的 Deployment、轮换证书、审计安全事件与资源配额;生产环境建议启用 RBAC、Pod Security 与 NetworkPolicy 强化安全边界。