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無法通信)。