如何在CentOS上有效部署Kubernetes管理系统?

代码编程 2025-06-10 1152

手把手教你用CentOS部署Kubernetes,轻松搞定容器编排

最近公司项目组打算把老旧的虚拟机架构换成容器化部署,我负责研究Kubernetes的落地方案,经过一周折腾,终于在CentOS 7.9上成功部署了单节点集群,这里把踩过的坑和实操经验分享给大家。

CentOS部署Kubernetes-管理系统-管理系统

为什么选CentOS?

很多人纠结CentOS和Ubuntu哪个更适合K8s,其实两个系统都能跑,但CentOS在企业级应用中更常见,我们团队之前用CentOS部署过OpenStack,运维同学对yum包管理更熟悉,而且CentOS 7的生命周期到2024年,短期不用担心系统升级问题。

部署前必做的准备工作

  1. 硬件配置:建议至少4核8G内存,我测试时用2核4G跑起来有点吃力,特别是同时拉取镜像时CPU直接飙到90%
  2. 网络配置:关闭防火墙(生产环境建议配置安全组规则),关闭SELinux(setenforce 0),修改主机名(hostnamectl set-hostname k8s-master
  3. 时间同步yum install -y ntpdate && ntpdate time.windows.com,K8s组件对时间敏感,不同步会导致证书验证失败

安装Docker容器引擎

K8s 1.24开始弃用了dockershim,但很多老项目还在用Docker,这里还是演示Docker安装:

# 添加Docker仓库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装指定版本(19.03.15兼容性最好)
yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io
# 配置镜像加速器(阿里云示例)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
systemctl enable --now docker

安装K8s核心组件

  1. 添加K8s仓库

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
  2. 安装kubeadm/kubelet/kubectl

    # 指定1.23.17版本(与Docker 19.03兼容)
    yum install -y kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17 --disableexcludes=kubernetes
    systemctl enable --now kubelet

初始化K8s集群

关键命令来了,这里要特别注意--pod-network-cidr参数:

CentOS部署Kubernetes-管理系统-管理系统
kubeadm init \
  --apiserver-advertise-address=192.168.1.100 \
  --pod-network-cidr=10.244.0.0/16 \
  --kubernetes-version v1.23.17

执行后会出现类似这样的提示:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署网络插件(Flannel)

K8s默认没有网络插件,必须手动安装:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

等待几分钟后,执行kubectl get pods -n kube-system,看到所有Pod都是Running状态就成功了。

常见问题排查

  1. 镜像拉取失败:检查/etc/docker/daemon.json的镜像加速器配置
  2. 证书过期kubeadm certs check-expiration查看证书有效期,快到期时用kubeadm certs renew all更新
  3. CNI冲突:如果之前装过其他网络插件,需要先清理:kubectl delete -f <旧插件yaml>

生产环境优化建议

  1. 高可用部署:至少3个master节点,用kubeadm init --control-plane-endpoint配置VIP
  2. 资源限制:在/etc/kubernetes/manifests/kube-apiserver.yaml中添加--max-requests-inflight参数
  3. 监控告警:部署Prometheus+Grafana,设置资源使用率阈值告警

这次部署让我深刻体会到,K8s虽然强大,但细节处理不好就会踩坑,比如Flannel的CIDR配置必须和kubeadm初始化时的参数一致,否则Pod之间无法通信,建议大家部署时先在测试环境验证,生产环境再逐步迁移。

最后分享个小技巧:把所有安装命令写成Shell脚本,配合Ansible批量部署,能节省大量时间,如果遇到具体问题,欢迎在评论区交流,我看到都会回复。

一元50个赞秒到平台-快手增粉软件
« 上一篇 2025-06-10
自助下单平台10个赞-下载抖音涨粉丝软件
下一篇 » 2025-06-10