温馨提示×

如何顺利在centos上安装k8s

小樊
31
2025-12-25 15:07:42
栏目: 智能运维

在 CentOS 上顺利安装 Kubernetes 的实操指南

一 环境准备与前置条件

  • 系统建议:CentOS 7.x/8.x,内核建议 ≥ 3.10;硬件最低:2 核 CPU、2–4 GB 内存、20 GB 磁盘(生产建议 4 核/8 GB+)。节点间网络互通,时间同步(推荐 chrony/ntp)。
  • 主机名与解析:为各节点设置唯一主机名(如 master、worker1),并在 /etc/hosts 做好解析。
  • 关闭交换分区与 SELinux:
    • 临时与永久关闭 swap:sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
    • SELinux 可先设为宽容模式:sudo setenforce 0 && sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
  • 防火墙与安全组:测试环境可关闭防火墙 sudo systemctl stop firewalld && sudo systemctl disable firewalld;生产环境按需放行端口(如 6443、10250、10251、10252、2379/2380、8472/4789 UDP 等,取决于网络插件与控制面组件)。
  • 容器运行时:安装 Docker CE(或 containerd),并启动:sudo systemctl start docker && sudo systemctl enable docker
  • 安装 kubeadm/kubelet/kubectl(所有节点):
    • 添加仓库(国内可用镜像源加速):
      cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch/
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
      
    • 安装并启用:sudo yum install -y kubelet kubeadm kubectl --disableexcludekubernetes && sudo systemctl enable --now kubelet
      以上准备可显著降低后续初始化与网络插件安装时的故障率。

二 使用 kubeadm 初始化集群

  • 拉取镜像(可选,提前缓存):sudo kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers(如网络受限,可指定国内镜像仓库)。
  • 初始化控制平面(示例):
    sudo kubeadm init \
      --apiserver-advertise-address=<MASTER_IP> \
      --image-repository registry.aliyuncs.com/google_containers \
      --kubernetes-version=v1.22.15 \
      --service-cidr=10.96.0.0/12 \
      --pod-network-cidr=10.244.0.0/16
    
    说明:
    • --pod-network-cidr 需与所选 CNI 插件一致(如 Flannel 默认 10.244.0.0/16Calico 常见 192.168.0.0/16)。
    • 初始化成功后,控制台会输出 kubeadm join ... 命令,务必保存。
  • 配置 kubectl(普通用户):
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 安装 CNI 网络插件(二选一,按上一步的 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
  • 验证:kubectl get nodes 应看到 master 状态为 Readykubectl get pods -A 核心组件与网络插件 Pod 均为 Running

三 加入 Worker 节点

  • 在 Master 上生成加入命令(若初始化输出已过期):
    kubeadm token create --print-join-command
    
  • 在 Worker 节点执行输出的 kubeadm join ... --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
  • 回到 Master 验证:kubectl get nodes,等待新节点变为 Ready
  • 常见问题排查要点:
    • 节点时间不同步(启用 chrony 同步)。
    • 防火墙/安全组未放行必要端口。
    • 容器运行时未就绪(systemctl status docker / crictl ps)。
    • Pod CIDR 与 CNI 配置不一致(导致节点 NotReady)。

四 快速验证与常见问题处理

  • 快速连通性验证:
    kubectl run nginx --image=nginx:1.25 --port=80 --restart=Never
    kubectl expose deployment nginx --type=NodePort --port=80
    kubectl get svc nginx  # 获取 NodePort
    curl http://<任一节点IP>:<NodePort>
    
  • 常见问题速解:
    • 节点 NotReady:检查 CNI 是否安装Pod CIDR 是否匹配、节点是否 Ready
    • 镜像拉取失败:使用国内镜像仓库或提前 kubeadm config images pull
    • kubectl 权限错误:确认 $HOME/.kube/config 来自 admin.conf 且属主正确。
    • kubelet 启动失败:查看 journalctl -xeu kubelet,常见为 cgroup 驱动不一致(Docker 默认 cgroupfs,kubelet 常用 systemd,需统一)。

五 单机与替代方案

  • 仅学习/测试可用 Minikube(本机部署,快速上手):
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
    sudo minikube start --driver=none
    minikube status
    
    适合快速验证或在资源受限环境下体验 Kubernetes。

0