温馨提示×

centos部署k8s有哪些要点

小樊
39
2025-12-05 22:11:26
栏目: 智能运维

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 冲突。

0