如何使用kubeadm在CentOS系统上安装Kubernetes(k8s)集群?

问题浏览数Icon
10
问题创建时间Icon
2025-04-18 07:27:00
回答 | 共 3 个
作者头像
liustar66
  1. 环境准备

    • 确认所有CentOS节点(建议7+/8+)已完成基础配置,包括主机名解析、时间同步、关闭防火墙及SELinux(setenforce 0永久生效需修改/etc/selinux/config)。
    • 确保所有节点已禁用swap(swapoff -a并注释/etc/fstab中的swap条目)。
  2. 安装容器运行时

    • 推荐安装Docker(yum install -y docker-ce)或containerd,配置cgroup驱动为systemd(修改/etc/docker/daemon.json添加"exec-opts": ["native.cgroupdriver=systemd"]后重启服务)。
  3. 安装kubeadm/kubelet/kubectl

    • 配置Kubernetes的yum源,通过yum install -y kubeadm-<version> kubelet-<version> kubectl-<version>安装指定版本(需保持版本一致性),完成后执行systemctl enable --now kubelet
  4. 初始化Master节点

    • 执行kubeadm init --apiserver-advertise-address=<master-ip> --pod-network-cidr=10.244.0.0/16(若使用Flannel网络插件),记录输出的join命令。
    • 根据提示配置kubectl:mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/config,并验证节点状态(kubectl get nodes)。
  5. 部署网络插件

    • 应用Flannel配置:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml,等待Pod就绪。
  6. 加入Worker节点

    • 在Worker节点执行kubeadm join命令(包含token及ca-cert-hash),使用kubeadm token create --print-join-command可生成新token(默认24小时过期)。
  7. 验证集群

    • 在Master节点运行kubectl get pods -A确认所有核心组件(coredns/kube-proxy等)及网络插件处于Running状态。

注意事项

  • 生产环境需配置高可用(多Master节点+负载均衡器)
  • 建议提前规划证书有效期、etcd存储路径等配置参数
  • 若需GPU支持,需额外安装nvidia-docker2及k8s-device-plugin
作者头像
mistfeng66

是否考虑过使用k3s替代Kubernetes?它更轻量且部署简单,适合边缘计算场景。

作者头像
shizhong77

在CentOS系统上使用kubeadm部署Kubernetes集群的实践经验总结如下:

一、环境准备

  1. 系统配置:

    • 关闭防火墙:systemctl disable --now firewalld
    • 禁用SELinux:修改/etc/selinux/config为disabled
    • 设置主机名解析:确保/etc/hosts包含所有节点IP与主机名映射
    • 加载内核模块:br_netfilter, overlay
    • 配置sysctl参数:net.bridge.bridge-nf-call-iptables=1
  2. 容器运行时:

    • 安装containerd 1.6+并配置systemd作为cgroup驱动
    • 验证运行时状态:ctr images pull docker.io/library/nginx:alpine

二、安装核心组件

  1. 配置yum源:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    EOF
  2. 安装指定版本:

    yum install -y kubeadm-1.25.7 kubelet-1.25.7 kubectl-1.25.7 --disableexcludes=kubernetes

三、集群初始化

  1. 控制平面节点:

    kubeadm init --image-repository registry.aliyuncs.com/google_containers \
    --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=192.168.1.100
  2. 网络插件:

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

四、典型挑战与解决方案

  1. 镜像拉取失败:

    • 预拉取镜像:kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
    • 手动同步镜像到私有仓库
  2. kubelet持续重启:

    • 检查/var/lib/kubelet/config.yaml与kubeadm配置一致性
    • 验证cgroup驱动配置:containerd需设置systemd cgroup
  3. 节点NotReady状态:

    • 排查CNI插件日志:journalctl -u calico-node -f
    • 验证网络策略:iptables -L -n -t nat
  4. 证书过期问题:

    • 定期更新证书:kubeadm certs renew all
    • 配置外部etcd集群提升稳定性

五、验证要点

  1. 核心组件状态:

    kubectl get pods -n kube-system
    kubectl get nodes -o wide
  2. 网络连通性测试:

    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80
    curl <ClusterIP>

实践表明,版本锁定(1.25 LTS)、国内镜像加速、前置环境校验是部署成功的关键要素。建议使用自动化工具预先完成系统参数配置,并通过GitOps维护集群状态。