温馨提示×

如何在CentOS上安装K8S集群

小樊
35
2025-11-16 04:05:59
栏目: 智能运维

在 CentOS 上使用 kubeadm 部署 Kubernetes 集群

一 环境准备

  • 节点规划:至少准备 1 台 Master1 台 Worker;推荐 CentOS 7/8,每台至少 2 核 CPU、2GB 内存、30GB 磁盘,节点间网络互通且可访问外网。
  • 主机名与解析:为各节点设置唯一主机名(如 k8s-master、k8s-node1),并在所有节点编辑 /etc/hosts 添加 IP 与主机名映射。
  • 时间同步:安装并启用 chrony/ntp,保证集群时间一致。
  • 关闭 Swap:执行 swapoff -a 并注释 /etc/fstab 中的 swap 行。
  • SELinux:建议设为 permissive(临时 setenforce 0,永久修改 /etc/selinux/configSELINUX=permissive)。
  • 防火墙:为简化入门可临时关闭 firewalldsystemctl stop/disable firewalld);生产环境请改为精细化放行 6443、10250、2379/2380、10251/10252、8472/4789(VXLAN) 等端口。
  • 内核参数与模块:加载 br_netfilter,开启桥接与转发。
  • 容器运行时:安装 Docker CE/Containerd(下文给出两种常用方式)。

二 安装容器运行时

  • Docker CE(常用)
    1. 安装依赖与源
      yum install -y yum-utils device-mapper-persistent-data lvm2
      yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    2. 安装并启动
      yum install -y docker-ce docker-ce-cli containerd.io
      systemctl enable --now docker
    3. 可选加速
      mkdir -p /etc/docker && tee /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://mirrors.aliyuncs.com"] } EOF
      systemctl daemon-reload && systemctl restart docker
  • Containerd(可选,kubeadm 亦可对接 containerd)
    1. 安装 containerd(以官方静态包为例)
      yum install -y yum-utils && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      yum install -y containerd.io
    2. 生成默认配置并启用
      containerd config default | tee /etc/containerd/config.toml
      systemctl enable --now containerd
    3. 如使用 containerd,后续 kubeadm 初始化时可通过 --cri-socket unix:///run/containerd/containerd.sock 指定。

三 安装 kubeadm kubelet kubectl

  • 添加 Kubernetes YUM 源(国内镜像优先)
    cat <<EOF >/etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/doc/rpm-package-key.gpg
    EOF
  • 安装组件
    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  • 启动 kubelet(先不启动容器,待 kubeadm 初始化后再拉起)
    systemctl enable --now kubelet

四 初始化 Master 节点

  • 预拉取镜像(可选,加速初始化)
    kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
  • 初始化命令(按需选择其一)
    • 单 Master(经典 Pod CIDR)
      kubeadm init --apiserver-advertise-address=<MASTER_IP> --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
    • 高可用或指定控制面端点
      kubeadm init --control-plane-endpoint="<VIP_or_DNS:6443>" --upload-certs --pod-network-cidr=10.244.0.0/16 --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
  • 安装网络插件(二选一,与上面 Pod CIDR 保持一致)
    • 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

五 加入 Worker 节点与验证

  • 获取加入命令
    • 查看或生成新令牌:
      kubeadm token list(若过期)
      kubeadm token create --print-join-command
  • 在 Worker 节点执行输出的 join 命令(示例)
    kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
  • 验证
    • 节点状态:kubectl get nodes(应为 Ready
    • 系统 Pod:kubectl get pods -A(所有 Pod 应为 Running
  • 常见问题速查
    • 镜像拉取失败:确认已设置 image-repository=registry.aliyuncs.com/google_containers 或提前 kubeadm config images pull
    • Pod 无法跨节点通信:确认已安装 Flannel/Calico,且 Pod CIDR 与插件配置一致。
    • 节点 NotReady:检查 kubelet 状态、/var/log/messages 与容器运行时日志,确认 CNI 已成功配置网络接口。

0