HCRM博客

CentOS怎么安装Kubernetes,K8s安装详细步骤

在CentOS系统上部署Kubernetes集群是一项系统工程,其核心上文归纳在于:严谨的系统环境初始化、容器运行时的正确配置以及Kubernetes组件版本的精准匹配,是确保集群高可用性和稳定运行的三大基石,任何一环节的疏漏都可能导致节点NotReady或Pod无法正常调度,本文将摒弃繁琐的理论赘述,直接基于生产环境标准,详细拆解在CentOS上搭建K8s集群的全流程。

系统环境初始化与内核参数调优

CentOS怎么安装Kubernetes,K8s安装详细步骤-图1

CentOS怎么安装Kubernetes,K8s安装详细步骤-图2

在开始安装之前,必须对所有节点(Master节点和Worker节点)进行标准化的环境准备,这是最容易被忽视但至关重要的一步,需要关闭系统的防火墙和SELinux,因为Kubernetes的网络组件(如Calico或Flannel)与防火墙规则极易产生冲突,导致网络不可达,必须永久关闭Swap分区,Kubernetes设计之初将内存作为可压缩资源,一旦开启Swap,会导致内存回收延迟,严重影响性能,甚至导致集群崩溃。

接下来是内核参数的调优,为了确保容器间网络的通畅,需要加载br_netfilter模块,并修改/etc/sysctl.d/k8s.conf文件,开启net.bridge.bridgenfcallip6tablesnet.bridge.bridgenfcalliptables,这一步的作用是让iptables能够对经过网桥的IPv4/IPv6数据包进行处理,这是Pod跨主机通信的前提,建议将文件句柄数打开数量调大,防止高并发场景下因资源限制导致服务异常。

容器运行时的选择与配置

自Kubernetes 1.24版本起,Dockershim已被彻底移除,这意味着Containerd或CRIO成为了更推荐的容器运行时,本文以Containerd为例进行部署,因为它轻量且调用链更短,性能更优,安装Containerd时,建议直接使用阿里云的YUM源,以确保下载速度和稳定性。

安装完成后,配置/etc/containerd/config.toml是关键,必须将SystemdCgroup设置为true,因为Kubelet默认使用systemd作为cgroup驱动,如果Containerd使用cgroupfs,会导致资源管理不一致,进而引发Pod启动失败,需要配置sandbox_image,即Pause镜像的地址,考虑到国内网络环境,建议将其修改为阿里云或腾讯云的镜像仓库地址,避免因网络问题导致镜像拉取超时。

Kubernetes核心组件安装与集群初始化

Kubernetes的三个核心组件——Kubelet、Kubeadm和Kubectl——需要通过YUM源进行安装,为了获得更快的下载速度,同样推荐配置阿里云的Kubernetes仓库,在安装完成后,执行yum install命令时,建议不指定具体版本,让系统自动匹配仓库中的最新稳定版,但为了生产环境的可控性,通常会在/etc/yum.repos.d/kubernetes.repo中开启exclude,通过disableexcludes=kubernetes参数来手动控制版本升级。

集群的初始化在Master节点上进行,使用kubeadm init命令时,必须指定apiserveradvertiseaddress为Master节点的IP地址,以及podnetworkcidr(通常为10.244.0.0/16),这里的CIDR必须与后续安装的网络插件(如Flannel)默认配置保持一致,否则Pod将无法获取IP地址,初始化成功后,系统会输出kubeadm join命令,该命令包含了加入集群所需的Token和CA证书哈希,需妥善保存,用于Worker节点的加入。

CentOS怎么安装Kubernetes,K8s安装详细步骤-图3

网络插件部署与集群验证

Master节点初始化完成后,集群状态通常为NotReady,这是因为缺少容器网络接口(CNI)插件,Calico和Flannel是两个主流选择,Calico功能强大,支持网络策略,适合对安全要求较高的企业级应用;Flannel则配置简单,性能尚可,适合测试环境和小型集群,以Flannel为例,只需执行kubectl apply f对应的YAML文件即可,部署完成后,等待几分钟,执行kubectl get nodes,当状态变为Ready时,说明集群核心网络已打通。

为了验证集群功能,可以部署一个Nginx测试Pod,并通过Service暴露端口,如果在集群内部或外部能够成功访问Nginx的欢迎页面,即证明Kubernetes集群在CentOS上部署成功,在此过程中,如果遇到Pod镜像拉取失败,除了检查网络,还应重点排查/etc/containerd/config.toml中的镜像仓库配置以及imagePullSecrets是否正确。

相关问答

Q1:在CentOS上安装Kubernetes时,kubeadm init报错“[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2”怎么办? A1:这是因为Kubernetes Master节点默认要求至少2核CPU,如果是测试环境,可以通过在kubeadm init命令中追加ignorepreflighterrors=NumCPU参数来跳过此预检,但在生产环境中,强烈建议满足硬件最低要求,否则会导致集群运行极其不稳定。

Q2:Worker节点执行kubeadm join后,在Master节点上查看状态是“NotReady”,且kubelet日志报错“cgroup driver mismatch”,如何解决? A2:这是典型的Cgroup驱动不一致问题,Kubelet默认使用systemd cgroup驱动,而Containerd或Docker可能默认使用cgroupfs,解决方案是修改Containerd的配置文件/etc/containerd/config.toml,设置SystemdCgroup = true,然后重启Containerd服务,问题即可解决。

通过以上步骤,我们可以在CentOS上构建一个符合生产级标准的Kubernetes集群,操作过程中,细节决定成败,尤其是网络规划和容器运行时的配置,需要运维人员具备扎实的底层网络知识,如果您在部署过程中遇到其他疑难杂症,欢迎在评论区留言探讨,我们将共同解决技术难题。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/92751.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~