温馨提示×

怎样在centos上安装k8s多节点

小樊
45
2025-12-21 17:46:07
栏目: 智能运维

在 CentOS 上用 kubeadm 部署多节点 Kubernetes 集群

一 架构与准备

  • 节点规划:至少准备1 台 Master + 2 台 Worker;推荐 CentOS 7/8,每台≥2 核 CPU、≥2 GB 内存,节点间网络互通,主机名与 MAC/Product UUID 不重复。
  • 网络规划:建议固定 Service CIDR=10.96.0.0/12Pod CIDR=10.244.0.0/16(与 Flannel 默认一致);如用域名访问 API,准备 controlPlaneEndpoint
  • 主机名与解析:设置主机名(如 master、node1、node2),并在所有节点配置 /etc/hosts 或使用 DNS。
  • 基础环境:关闭 Swap、配置内核网络参数、开启 bridge-nf-call-iptables、安装容器运行时(Docker 或 containerd)。

二 所有节点通用配置

  • 关闭防火墙与 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/modules-load.d/k8s.conf </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
  • 安装容器运行时(二选一)
    • Docker(CentOS 7 常用):
      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 docker-ce-cli containerd.io
      mkdir -p /etc/docker
      tee /etc/docker/daemon.json <<‘EOF’
      {
      “registry-mirrors”: [“https://82m9ar63.mirror.aliyuncs.com”],
      “exec-opts”: [“native.cgroupdriver=systemd”],
      “log-driver”: “json-file”,
      “log-opts”: { “max-size”: “100m” },
      “storage-driver”: “overlay2”
      }
      EOF
      systemctl daemon-reload && systemctl enable --now docker
    • containerd(更贴近 kubeadm 默认):
      yum install -y containerd
      mkdir -p /etc/containerd && containerd config default >/etc/containerd/config.toml
      sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/’ /etc/containerd/config.toml
      systemctl enable --now containerd
  • 安装 kubeadm/kubelet/kubectl:
    cat >/etc/yum.repos.d/kubernetes.repo <<‘EOF’
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    EOF
    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    systemctl enable --now kubelet

三 初始化控制平面 Master

  • 预拉取镜像(避免墙导致 init 失败):
    kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
  • 初始化命令(单 Master 示例,按需替换参数):
    kubeadm init \ –apiserver-advertise-address=<MASTER_IP> \ –image-repository=registry.aliyuncs.com/google_containers \ –kubernetes-version=v1.28.4 \ –service-cidr=10.96.0.0/12 \ –pod-network-cidr=10.244.0.0/16
    说明:如有多网卡,请指定 –apiserver-advertise-address;如用域名或 VIP,使用 –controlPlaneEndpoint
  • 初始化完成后按提示执行:
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(与 Pod CIDR 保持一致):
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

四 加入 Worker 节点

  • 获取加入命令(在 Master 上):
    kubeadm token create --print-join-command
    输出示例:
    kubeadm join <MASTER_IP>:6443 --token --discovery-token-ca-cert-hash sha256:
  • 在每台 Worker 上执行上述命令,完成后在 Master 检查:
    kubectl get nodes -o wide
    等待节点状态变为 Ready

五 高可用与常见问题

  • 高可用控制平面(多 Master):
    • 初始化首个 Master 时添加 –controlPlaneEndpoint <VIP|域名>:6443–upload-certs
    • 其他 Master 加入:
      kubeadm join <VIP|域名>:6443 \ –token \ –discovery-token-ca-cert-hash sha256: \ –control-plane --certificate-key
  • 常见问题速查
    • 镜像拉取失败:使用国内镜像仓库(如 registry.aliyuncs.com/google_containers)并提前 images pull。
    • 节点 NotReady:确认 Pod CIDR 与网络插件一致(Flannel 默认 10.244.0.0/16),检查 kubelet 日志:journalctl -u kubelet -f。
    • cgroup 驱动不一致:Docker 使用 native.cgroupdriver=systemd;containerd 配置 SystemdCgroup=true
    • 端口连通性:确保 6443/10250/2379 等端口放通(或临时关闭防火墙用于排障)。

0