温馨提示×

centos k8s安装过程中注意事项

小樊
31
2025-12-21 17:44:03
栏目: 智能运维

CentOS 上安装 Kubernetes 的关键注意事项

一 系统与版本选型

  • 明确 CentOS 版本Kubernetes 版本 的匹配关系:在 CentOS 7.9(内核 3.10) 上,建议选择 Kubernetes ≤1.23.x;从 v1.24 起默认移除内置的 Dockershim,且对内核要求更高(如 ≥4.19),在 7.x 上常见兼容性问题;v1.26+ 建议 ≥5.10v1.27+ 在 7.x 上可能不再完全受支持。若需使用较新 K8s,优先考虑 CentOS Stream 8/9 或升级内核/迁移至受支持发行版。
  • 容器运行时选择:在 ≤1.23 可用 Docker 19.03+/20.10.x;从 v1.24 起推荐使用 containerd 作为 CRI(Docker 仍可通过 cri-dockerd 适配,但非默认路径)。
  • 基础资源与规模:每节点至少 2 核 CPU / 2GB 内存 / 30GB 磁盘;至少 2 节点(1 master + 1 worker);各节点间 网络互通 且能 访问外网 拉取镜像。

二 系统与安全基线

  • 主机名与解析:为每个节点设置唯一 hostname,并在所有节点维护 /etc/hosts 映射,避免解析不一致。
  • 时间同步:安装并启用 chrony/ntp,保证节点间 时间一致,避免证书校验、调度异常。
  • 关闭 Swap:swapoff -a 并注释 /etc/fstab 中的 swap 行,Kubelet 默认要求禁用 Swap。
  • 防火墙与 SELinux:实验/内网环境常直接 关闭 firewalldSELinux;生产环境应改为精细化放行(见“网络与端口”)。
  • 内核与模块:加载 br_netfilter、overlay 等模块,开启 net.bridge.bridge-nf-call-iptables/ip6tablesnet.ipv4.ip_forward,确保网桥与转发路径正确。

三 容器运行时与 kubelet 配置

  • 运行时安装与启用:安装 containerd.io(或 Docker CE),并设置为开机自启。
  • cgroup 驱动一致性:容器运行时与 kubelet 的 cgroup driver 必须一致。常见做法是将 Docker 设置为 systemd:/etc/docker/daemon.json 中配置 “exec-opts”: [“native.cgroupdriver=systemd”];containerd 默认即为 systemd。不一致会导致 Pod 无法启动kubelet 反复重启
  • kubelet 启动与自启:安装 kubeadm/kubelet/kubectl 后执行 systemctl enable --now kubelet;初始化前可用 kubeadm config images pull 预拉取镜像(国内可换镜像源)。

四 网络与端口规划

  • 网段规划:为 Service CIDRPod CIDR 预留不重叠网段,且不与宿主机网段冲突;例如常见组合为 Service 10.96.0.0/12Pod 10.244.0.0/16172.168.0.0/12(以实际网络为准)。
  • 网络插件:初始化完成后尽快安装 CNI 插件(如 Flannel/Calico),否则节点会长期处于 NotReady
  • 端口与防火墙:控制面与工作节点需放行关键端口(如 6443、10250、2379/2380、10251/10252、8472/4789 等,具体取决于组件与插件),生产环境不建议直接关闭防火墙,应基于白名单放行。

五 初始化与验证排障

  • 初始化参数:使用 kubeadm init 指定 –apiserver-advertise-address–pod-network-cidr,国内可设置 –image-repository=registry.aliyuncs.com/google_containers 加速;初始化后按提示执行 kubectl 配置节点加入命令
  • 常见故障排查:
    • 节点 NotReady:优先检查 CNI 是否安装Swap 是否关闭内核参数是否生效
    • 镜像拉取慢/失败:使用 国内镜像源 或提前拉取所需镜像。
    • 端口冲突:确认 6443、10250 等端口未被占用。
    • kubelet 异常:查看 journalctl -xeu kubelet,常见为 cgroup 驱动不一致镜像缺失端口占用 等。
  • 重置与重装:如需重来,执行 kubeadm reset 并清理 $HOME/.kube,再按流程初始化。

0