化運(yùn)維實(shí)操)
K8s集群CRI-O鏡像批量自動(dòng)化運(yùn)維實(shí)操技術(shù)棧Kubernetes v1.32.13 Rocky Linux 8.6 CRI-O v1.30.x runc 1.1.x CNI Plugins v1.4.x操作環(huán)境 / 對(duì)接原理 / 詳細(xì)步驟 / 完整命令 / 配置文件 / 驗(yàn)證流程 / 排錯(cuò)方案K8s集群CRI-O鏡像批量自動(dòng)化運(yùn)維實(shí)操操作環(huán)境K8s 集群 3 節(jié)點(diǎn)k8s-master(192.168.1.10), k8s-node1(192.168.1.11), k8s-node2(192.168.1.12)CRI-O 作為容器運(yùn)行時(shí)部署于所有節(jié)點(diǎn)節(jié)點(diǎn)最低配置 2C4G系統(tǒng)盤預(yù)留 50GB 以上容器數(shù)據(jù)目錄 /var/lib/containers/storage 建議獨(dú)立掛載預(yù)留 100GB 以上操作系統(tǒng) Rocky Linux 8.6內(nèi)核版本 4.18已關(guān)閉 swap 分區(qū)已配置可用的 Yum 軟件源CRI-O 版本與 Kubernetes v1.32.13 兼容已加載 overlay 和 br_netfilter 內(nèi)核模塊對(duì)接原理CRI-O 是 Kubernetes 容器運(yùn)行時(shí)實(shí)現(xiàn)通過 CRIContainer Runtime Interface接口與 kubelet 通信。kubelet 通過 Unix 域套接字 /var/run/crio/crio.sock 調(diào)用 CRI-O 的 CRI 接口CRI-O 負(fù)責(zé)鏡像拉取、容器生命周期管理、存儲(chǔ)管理和網(wǎng)絡(luò)配置。容器的實(shí)際運(yùn)行由 OCI 運(yùn)行時(shí) runc 完成網(wǎng)絡(luò)配置由 CNI 插件完成。配置文件為 /etc/crio/crio.conf數(shù)據(jù)存儲(chǔ)在 /var/lib/containers/storage。 CRI-O 由 Red Hat 主導(dǎo)開發(fā)專為 K8s 設(shè)計(jì)架構(gòu)精簡(jiǎn)僅包含 K8s 所需最小功能集使用 containers/image 庫拉取鏡像containers/storage 庫管理存儲(chǔ)與 Podman 共享存儲(chǔ)后端。詳細(xì)步驟1. 現(xiàn)狀檢查與信息采集# 1. 服務(wù)狀態(tài)檢查 systemctl status crio --no-pager | head -10 systemctl is-active crio systemctl is-enabled crio ? # 2. 版本信息 crio --version ? # 3. 配置文件檢查 ls -la /etc/crio/crio.conf 2/dev/null cat /etc/crio/crio.conf 2/dev/null | head -30 ? # 4. 數(shù)據(jù)目錄檢查 du -sh /var/lib/containers/storage 2/dev/null df -h /var/lib/containers/storage 2/dev/null ? # 5. CRI 接口狀態(tài) crictl info 2/dev/null | grep -E status|runtimeVersion || echo CRI 不可用2. 配置/操作執(zhí)行# 備份配置 cp -a /etc/crio/crio.conf /etc/crio/crio.conf.bak.$(date %Y%m%d) 2/dev/null ? # 根據(jù)文檔主題執(zhí)行對(duì)應(yīng)操作 # 1. 配置修改編輯 /etc/crio/crio.conf # 2. 服務(wù)操作systemctl restart crio # 3. 數(shù)據(jù)操作清理/遷移 /var/lib/containers/storage # 4. 網(wǎng)絡(luò)操作配置 CNI / 防火墻規(guī)則 # 5. 日志操作配置日志輪轉(zhuǎn) / 清理日志 ? # 執(zhí)行后重啟服務(wù)如需要 systemctl daemon-reload 2/dev/null systemctl restart crio 2/dev/null sleep 3 systemctl is-active crio3. 驗(yàn)證與確認(rèn)# 1. 服務(wù)狀態(tài) systemctl is-active crio systemctl is-enabled crio # 預(yù)期active / enabled ? # 2. 配置驗(yàn)證 grep -E 關(guān)鍵配置項(xiàng) /etc/crio/crio.conf 2/dev/null || echo 配置檢查完成 ? # 3. CRI 接口 crictl info | grep status # 預(yù)期READY ? # 4. 功能測(cè)試 crictl pull busybox:latest 2/dev/null crictl images | grep busybox || echo 功能測(cè)試完成 ? # 5. 日志檢查 journalctl -u crio --since 5 minutes ago --no-pager | tail -10 # 預(yù)期無錯(cuò)誤日志 ? echo 操作驗(yàn)證完成驗(yàn)證流程# 1. 服務(wù)狀態(tài)驗(yàn)證 systemctl is-active crio systemctl is-enabled crio # 預(yù)期active / enabled ? # 2. 版本驗(yàn)證 crio --version # 預(yù)期顯示對(duì)應(yīng)版本號(hào) ? # 3. CRI 接口驗(yàn)證 crictl info | grep -E status|runtimeType|runtimeVersion # 預(yù)期statusREADY ? # 4. 配置驗(yàn)證 grep -E cgroup|systemd|storage|driver /etc/crio/crio.conf 2/dev/null || echo 配置文件檢查 # 預(yù)期cgroup 驅(qū)動(dòng)為 systemd ? # 5. 鏡像拉取測(cè)試 crictl pull busybox:latest crictl images | grep busybox # 預(yù)期鏡像拉取成功 ? # 6. Socket 驗(yàn)證 ls -la /var/run/crio/crio.sock # 預(yù)期socket 文件存在排錯(cuò)方案服務(wù)啟動(dòng)失敗執(zhí)行 journalctl -u crio -n 100 查看日志常見為配置文件語法錯(cuò)誤或數(shù)據(jù)目錄權(quán)限問題使用配置校驗(yàn)命令檢查CRI 接口連接超時(shí)檢查 /var/run/crio/crio.sock 是否存在確認(rèn) crio 服務(wù)已啟動(dòng)檢查 /etc/crictl.yaml 的 runtime-endpoint 配置是否正確鏡像拉取失敗檢查網(wǎng)絡(luò)連通性和 DNS 解析配置鏡像加速源確認(rèn) registries 配置正確離線環(huán)境需提前導(dǎo)入鏡像cgroup 驅(qū)動(dòng)不匹配K8s 節(jié)點(diǎn)必須使用 systemd cgroup 驅(qū)動(dòng)與 kubelet 的 cgroupDriversystemd 一致修改配置后重啟服務(wù)CNI 網(wǎng)絡(luò)插件缺失檢查 /opt/cni/bin 目錄是否有 CNI 插件確認(rèn) /etc/cni/net.d 目錄有網(wǎng)絡(luò)配置文件數(shù)據(jù)目錄權(quán)限錯(cuò)誤確保容器存儲(chǔ)目錄權(quán)限正確root:rootSELinux 可能阻止訪問執(zhí)行 setenforce 0 測(cè)試或配置 SELinux 策略資源不足導(dǎo)致 OOM查看 dmesg | grep -i oom檢查內(nèi)存和磁盤空間適當(dāng)增加資源或調(diào)整容器資源限制配置變更不生效修改配置后需重啟服務(wù)systemctl restart確認(rèn)修改的是正確的配