温馨提示×

怎样让centos成功部署k8s

小樊
45
2025-12-05 22:14:33
栏目: 智能运维

在 CentOS 上用 kubeadm 部署 Kubernetes 的可复现步骤

一 环境准备与系统初始化

  • 资源与系统
    • 至少准备 2 台机器(1 台 Master + 1 台 Node),推荐 2 核 CPU、2GB 内存、30GB 磁盘以上,系统为 CentOS 7/8 x86_64,节点间网络互通,最好配置 静态 IP 与主机名
  • 基础配置(所有节点)
    • 关闭 Swap:
      • 临时:swapoff -a
      • 永久:sed -ri 's/.*swap.*/#&/' /etc/fstab
    • 关闭 SELinux:
      • 临时:setenforce 0
      • 永久:sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    • 关闭防火墙(测试环境):
      • systemctl stop firewalld && systemctl disable firewalld
    • 内核与转发:
      • 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
    • 主机名与 hosts:
      • hostnamectl set-hostname k8s-master(Node 改为 k8s-node1/2)
      • cat >> /etc/hosts << EOF
        192.168.0.10 k8s-master
        192.168.0.11 k8s-node1
        192.168.0.12 k8s-node2
        EOF
    • 时间同步:
      • yum install -y ntpdate && ntpdate time.windows.com(或内网 NTP)
  • 容器运行时(Docker)
    • 安装:yum install -y yum-utils && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • 安装组件:yum install -y docker-ce docker-ce-cli containerd.io
    • 启动:systemctl start docker && systemctl enable docker
    • 建议将 Docker 的 cgroup 驱动设为 systemd(与 kubelet 一致):
      • mkdir -p /etc/docker
      • cat > /etc/docker/daemon.json << EOF
        { "exec-opts": ["native.cgroupdriver=systemd"] }
        EOF
      • systemctl restart docker
        以上步骤覆盖了 kubeadm 部署前的通用准备:关闭 swap/SELinux/防火墙、内核转发、主机名与 hosts、时间同步与 Docker 安装与驱动配置。

二 安装 kubeadm kubelet kubectl

  • 配置 Kubernetes YUM 源(国内镜像示例):
    • 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=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
  • 安装组件:
    • yum install -y kubelet kubeadm kubectl
    • systemctl enable --now kubelet(此时 kubelet 可能反复重启,属正常,待 init 后恢复)
  • 镜像预拉取(可选,提升成功率):
    • kubeadm config images list 查看所需镜像
    • 使用国内镜像仓库或提前导入对应版本镜像,避免墙内外拉取失败
      以上完成 kubeadm/kubelet/kubectl 的安装与基础准备。

三 初始化 Master 与加入 Node

  • 初始化 Master(仅在 Master 节点执行)
    • 命令示例:
      • kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16
    • 常见网络插件的 Pod CIDR:
      • Flannel:10.244.0.0/16
      • Calico:192.168.0.0/16
    • 成功后按提示执行:
      • mkdir -p $HOME/.kube
      • cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      • chown $(id -u):$(id -g) $HOME/.kube/config
  • 获取 Node 加入命令
    • 重新生成并打印:kubeadm token create --print-join-command
    • 或查看现有 token:kubeadm token list(配合 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 获取哈希)
  • 加入 Node(在每个 Worker 节点执行)
    • 示例:kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
  • 说明
    • --pod-network-cidr 必须与所选网络插件一致(Flannel 用 10.244.0.0/16,Calico 常用 192.168.0.0/16
      以上完成集群初始化与节点加入流程。

四 部署网络插件

  • 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 pods -n kube-system 确认 kube-flannelcalico Pod 均为 Running
    • kubectl get nodes 确认节点 Ready
      网络插件部署完成后,Pod 间网络与跨节点通信即可正常工作。

五 验证与常见问题处理

  • 快速验证
    • kubectl cluster-info
    • kubectl get nodes -o wide
    • kubectl get pods --all-namespaces
  • 常见问题速查
    • kubelet 启动失败:确认已关闭 Swap、内核参数生效、Docker 使用 systemd 驱动、可访问外网或已导入镜像。
    • coredns 处于 Pending:未安装或 Pod CIDR 与网络插件不匹配(Flannel 用 10.244.0.0/16,Calico 常用 192.168.0.0/16)。
    • 节点 NotReady:检查网络插件 Pod 是否 Running、节点间 6443/10250 等端口是否放通(生产环境不建议直接关闭防火墙,按需放行)。
    • 镜像拉取失败:使用国内镜像源或提前 docker load 所需镜像。
    • token 过期:在 Master 上 kubeadm token create --print-join-command 重新生成加入命令。
      以上验证与排错要点可快速定位大多数初始化失败原因。

0