温馨提示×

k8s在centos上的安装步骤详解

小樊
35
2025-12-17 19:13:13
栏目: 智能运维

在 CentOS 上安装 Kubernetes 的实操步骤

一 环境准备与前提条件

  • 操作系统与硬件
    • 建议使用 CentOS 7.x/8.x,至少 2 核 CPU、2GB 内存、20GB 磁盘(生产推荐 4–8GB 内存、SSD)。
    • 节点间网络互通,可访问外网以下载镜像与依赖。
  • 基础配置
    • 设置主机名:hostnamectl set-hostname <k8s-master|k8s-nodeX>
    • 配置 /etc/hosts 解析各节点主机名与 IP。
    • 时间同步:启用 chronyntpdate 同步时间。
    • 关闭交换分区:swapoff -a 并注释 /etc/fstab 中的 swap 行。
    • 防火墙与安全策略:为简化安装可临时关闭 firewalldSELinux(生产环境请按需放行端口与策略)。
    • 内核网络参数与模块:
      • 写入:/etc/sysctl.d/k8s.conf
        • net.bridge.bridge-nf-call-ip6tables = 1
        • net.bridge.bridge-nf-call-iptables = 1
        • net.ipv4.ip_forward = 1
      • 执行:modprobe br_netfilter && sysctl --system
  • 容器运行时
    • 安装 Docker CE(或 containerd),并配置开机自启。

二 安装容器运行时 Docker

  • 安装依赖与仓库
    • yum install -y yum-utils device-mapper-persistent-data lvm2
    • 添加 Docker 源(国内可用镜像源加速):
      • 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
  • 可选优化(提升稳定性与拉取速度)
    • /etc/docker/daemon.json 示例:
      • { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors": ["https://<你的加速器地址>"] }
    • 修改后重启:systemctl restart docker

三 安装 Kubernetes 组件 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 --disableexcludekubernetes
    • systemctl enable --now kubelet
  • 说明
    • 如遇到 kubelet 启动失败与 Swap 相关报错,可在 /etc/sysconfig/kubelet 增加 KUBELET_EXTRA_ARGS="--fail-swap-on=false"(仅用于实验环境,生产请保持 Swap 关闭并正确配置 kubelet)。

四 初始化控制平面 Master 节点

  • 初始化命令(按需替换参数)
    • 示例:kubeadm init --apiserver-advertise-address <MASTER_IP> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version <VERSION> --service-cidr 10.96.0.0/12 --pod-network-cidr 10.244.0.0/16
    • 常见网络插件与 Pod CIDR 对应关系:
      • Calico:常用 192.168.0.0/16(示例:--pod-network-cidr=192.168.0.0/16
      • Flannel:常用 10.244.0.0/16
  • 配置 kubectl
    • mkdir -p $HOME/.kube
    • cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装 CNI 网络插件
    • Calicokubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    • Flannelkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 验证
    • kubectl get nodes 应看到 Master 状态为 Ready
    • kubectl get pods -A 检查系统 Pod 均为 Running

五 加入工作节点 Node 与验证

  • 获取加入命令
    • 在 Master 上执行:kubeadm token create --print-join-command
    • 或在初始化输出中复制 kubeadm join ... 命令
  • 在 Node 节点执行加入
    • sudo kubeadm join <MASTER_IP>:<PORT> --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
  • 验证
    • 在 Master 上:kubectl get nodes 应看到所有 Node 为 Ready
    • 运行测试应用验证网络与服务发布:
      • kubectl run nginx --image=nginx --port=80 --restart=Never
      • kubectl expose deployment nginx --type=NodePort --port=80
      • 访问 http://<NODE_IP>:<NodePort> 验证 Nginx 页面可访问
  • 常见问题排查要点
    • 节点时间不同步、防火墙未放行、kubelet 未就绪、镜像拉取失败(可使用国内镜像源)、CNI 未正确安装或 Pod CIDR 与插件不匹配。

0