温馨提示×

CentOS系统Kubernetes部署全攻略

小樊
96
2026-01-11 01:13:38
栏目: 智能运维

CentOS 7 上部署 Kubernetes v1.28 实操指南

一 环境规划与前置要求

  • 操作系统与版本:建议使用 CentOS 7.9 Minimal,内核建议 ≥ 3.10
  • 节点规划(示例):
    • Master:k8s-master 192.168.9.86
    • Worker1:k8s-worker1 192.168.9.87
    • Worker2:k8s-worker2 192.168.9.88
  • 硬件建议:Master 2 核 CPU / 4GB 内存 / 40GB 存储;Worker 视负载调整。
  • 网络与端口:节点间互通;Master 开放 6443、2379-2380、10250-10252、10255;Worker 开放 10250、10255、30000-32767;建议使用 静态 IP 并配置 /etc/hosts 解析主机名。
  • 时间同步:所有节点需 NTP 同步,避免证书与调度异常。

二 所有节点通用配置

  • 设置主机名与 hosts
    hostnamectl set-hostname k8s-master   # 在 master 执行
    hostnamectl set-hostname k8s-worker1  # 在 worker1 执行
    hostnamectl set-hostname k8s-worker2  # 在 worker2 执行
    
    cat >> /etc/hosts << EOF
    192.168.9.86 k8s-master
    192.168.9.87 k8s-worker1
    192.168.9.88 k8s-worker2
    EOF
    
  • 关闭防火墙与 SELinux(测试/内网环境常用;生产请按安全策略放通端口)
    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
  • 关闭 Swap
    swapoff -a
    sed -i '/swap/s/^/#/' /etc/fstab
    
  • 内核网络参数
    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
    
  • 安装基础工具与时间同步
    yum update -y
    yum install -y wget curl net-tools conntrack-tools telnet bind-utils yum-utils
    yum install ntpdate -y
    ntpdate ntp1.aliyun.com
    echo "0 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >> /etc/crontab
    
  • 重启
    reboot
    

以上步骤为后续组件安装提供干净、可预期的系统环境。

三 安装容器运行时与 Kubernetes 组件

  • 安装 Docker(使用国内镜像源加速)
    yum install -y yum-utils
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
    systemctl enable --now docker
    
    cat > /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": [
        "https://registry.cn-hangzhou.aliyuncs.com",
        "https://docker.xuanyuan.me"
      ],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": { "max-size": "200m" }
    }
    EOF
    systemctl restart docker
    
  • 安装 cri-dockerd(Kubernetes 1.24+ 需要,用于对接 Docker)
    # 以 v0.3.12 为例(CentOS 7 x86_64)
    wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm
    rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm
    
    # 指定国内 pause 镜像(提升拉取成功率)
    sed -i 's|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9|' \
      /usr/lib/systemd/system/cri-docker.service
    
    systemctl daemon-reload
    systemctl enable --now cri-docker
    
  • 添加 Kubernetes YUM 源(国内镜像)
    cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
    exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
    EOF
    
  • 安装 kubeadm、kubelet、kubectl(锁定版本)
    yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
    systemctl enable --now kubelet
    

以上完成运行时与组件安装,为集群初始化做好准备。

四 初始化控制平面与加入工作节点

  • Master 初始化(请按实际 IP 修改)
    kubeadm init \
      --apiserver-advertise-address=192.168.9.86 \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version v1.28.0 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16 \
      --cri-socket=unix:///var/run/cri-dockerd.sock
    
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 获取 Worker 加入命令(token 默认 24 小时 有效)
    kubeadm token create --print-join-command
    
  • Worker 加入集群(示例)
    kubeadm join 192.168.9.86:6443 \
      --token <token> \
      --discovery-token-ca-cert-hash sha256:<hash> \
      --cri-socket=unix:///var/run/cri-dockerd.sock
    
  • 验证
    kubectl get nodes
    kubectl get pods -n kube-system
    

以上完成控制平面搭建与节点扩容,集群处于可用状态。

五 部署网络插件与验证

  • 部署 Calico(与上面 Pod CIDR 10.244.0.0/16 匹配)
    curl -O https://docs.projectcalico.org/manifests/calico.yaml
    # 如需国内加速可先下载到本地再 apply
    kubectl apply -f calico.yaml
    
  • 等待节点 Ready 并验证
    kubectl get nodes
    kubectl get pods -n kube-system -w
    
  • 简单应用测试
    kubectl create deployment nginx --image=nginx:1.25 --replicas=2
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get svc nginx
    curl http://<任一节点IP>:<NodePort>
    

网络插件就绪后,Pod 间可互通,Service 可对外暴露。

六 常见问题与加固建议

  • 常见问题速解
    • Token 过期:在 Master 执行 kubeadm token create --print-join-command 重新生成。
    • 镜像拉取失败:确认 image-repositoryregistry.aliyuncs.com/google_containers,或提前导入镜像;检查 cri-dockerd 的 pause 镜像地址。
    • 节点 NotReady:检查 cri-dockerdkubelet 状态、内核参数、网络插件 Pod 是否 Running。
    • 端口不通:按“端口要求”放通防火墙或临时关闭测试;确认 apiserver 6443 与管理平面通信正常。
    • Calico 部署失败:核对 Pod CIDR 与 Calico 配置一致,查看 calico-node 日志定位。
  • 安全与加固建议
    • 生产环境不建议直接关闭防火墙,按“端口要求”精细化放通;SELinux 建议保持 enforcing 并配置策略或使用容器友好的 profile。
    • 启用 RBAC、最小权限与镜像签名校验;开启 kubelet 只读端口 10255 仅在内网可信环境使用。
    • 使用 systemd cgroup driver,为 kubelet 配置资源预留与审计日志;定期升级补丁与版本。

0