Kubernetes适应CentOS环境的实践指南
在CentOS上部署和维护Kubernetes(k8s)集群时,需重点解决版本兼容性、系统配置适配及持续维护三大核心问题,以下是具体应对方案:
CentOS版本与Kubernetes版本的适配性是基础。CentOS 7是目前最成熟的适配版本,支持Kubernetes 1.19.x至1.26.x(如v1.23.10、v1.26.x为推荐稳定版);CentOS 8因官方已于2021年底停止维护,仅建议用于测试环境,若需使用,可选择Kubernetes 1.17.x等旧版本,但需承担兼容性风险。部署前需严格核对Kubernetes官方文档的版本支持列表,避免因版本冲突导致集群异常。
基础环境准备:
setenforce 0并修改/etc/selinux/config永久生效)、防火墙(systemctl stop firewalld && systemctl disable firewalld),避免网络策略与Kubernetes冲突;swapoff -a并注释/etc/fstab中的Swap条目),Kubernetes要求节点禁用Swap以保证Pod资源调度准确性;hostnamectl set-hostname <节点名称>),并同步节点时间(ntpdate ntp.aliyun.com),确保集群节点间通信正常。内核与依赖优化:
elrepo-kernel仓库的kernel-lt或kernel-ml),解决Pod创建失败、内存分配异常等问题;yum install -y net-tools nmap-ncat yum-utils安装网络工具和包管理辅助工具,确保后续安装流程顺利。Docker/cgroup驱动配置:
Kubernetes推荐使用systemd作为Docker的cgroup驱动,需修改Docker服务配置(/etc/docker/daemon.json),添加"exec-opts": ["native.cgroupdriver=systemd"],并重启Docker服务(systemctl daemon-reload && systemctl restart docker),避免Docker与Kubernetes的cgroup驱动不兼容导致节点无法加入集群。
组件安装与初始化:
使用yum安装指定版本的kubelet、kubeadm、kubectl(如yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0 --disable-gpg-check),并通过systemctl enable --now kubelet启用kubelet服务;
在Master节点执行kubeadm init --pod-network-cidr=10.244.0.0/16初始化集群(--pod-network-cidr需与后续网络插件匹配),将生成的admin.conf复制至~/.kube/config,配置kubectl客户端访问集群。
网络插件部署:
选择兼容的网络插件(如Flannel、Calico),以Flannel为例,执行kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml安装,解决Pod间通信问题。若使用Calico,需调整内核参数(net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1),确保桥接流量能被iptables处理。
版本升级策略:
当Kubernetes发布新版本时,使用kubeadm upgrade命令逐步升级集群(如kubeadm upgrade apply v1.26.1),升级前需备份etcd数据(etcdctl snapshot save /opt/etcd-snapshot.db),并确认节点上的kubelet、Docker版本与新版本兼容,避免升级失败。
日志与故障排查:
部署后通过kubectl get nodes检查节点状态(应为Ready)、kubectl get pods --all-namespaces查看Pod运行情况(应为Running);若出现兼容性问题,可通过journalctl -u kubelet -f查看kubelet日志,或kubectl describe pod <pod名称>查看Pod事件,定位具体原因(如cgroup内存泄露会导致Pod频繁重启,网络插件配置错误会导致Pod无法通信)。