K8s集群CRI-O容器精细化生命周期管控实操技术栈Kubernetes v1.32.13 Rocky Linux 8.6 CRI-O v1.30.x runc 1.1.x CNI Plugins v1.4.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群CRI-O容器精细化生命周期管控实操操作环境K8s 集群 3 节点k8s-master(192.168.1.10), k8s-node1(192.168.1.11), k8s-node2(192.168.1.12)CRI-O 作为容器运行时部署于所有节点节点最低配置 2C4G系统盘预留 50GB 以上容器数据目录 /var/lib/containers/storage 建议独立挂载预留 100GB 以上操作系统 Rocky Linux 8.6内核版本 4.18已关闭 swap 分区已配置可用的 Yum 软件源CRI-O 版本与 Kubernetes v1.32.13 兼容已加载 overlay 和 br_netfilter 内核模块对接原理CRI-O 是 Kubernetes 容器运行时实现通过 CRIContainer Runtime Interface接口与 kubelet 通信。kubelet 通过 Unix 域套接字 /var/run/crio/crio.sock 调用 CRI-O 的 CRI 接口CRI-O 负责镜像拉取、容器生命周期管理、存储管理和网络配置。容器的实际运行由 OCI 运行时 runc 完成网络配置由 CNI 插件完成。配置文件为 /etc/crio/crio.conf数据存储在 /var/lib/containers/storage。 CRI-O 由 Red Hat 主导开发专为 K8s 设计架构精简仅包含 K8s 所需最小功能集使用 containers/image 库拉取镜像containers/storage 库管理存储与 Podman 共享存储后端。详细步骤1. 现状检查与信息采集# 1. 服务状态检查 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. 数据目录检查 du -sh /var/lib/containers/storage 2/dev/null df -h /var/lib/containers/storage 2/dev/null # 5. CRI 接口状态 crictl info 2/dev/null | grep -E status|runtimeVersion || echo CRI 不可用2. 配置/操作执行# 备份配置 cp -a /etc/crio/crio.conf /etc/crio/crio.conf.bak.$(date %Y%m%d) 2/dev/null # 根据文档主题执行对应操作 # 1. 配置修改编辑 /etc/crio/crio.conf # 2. 服务操作systemctl restart crio # 3. 数据操作清理/迁移 /var/lib/containers/storage # 4. 网络操作配置 CNI / 防火墙规则 # 5. 日志操作配置日志轮转 / 清理日志 # 执行后重启服务如需要 systemctl daemon-reload 2/dev/null systemctl restart crio 2/dev/null sleep 3 systemctl is-active crio3. 验证与确认# 1. 服务状态 systemctl is-active crio systemctl is-enabled crio # 预期active / enabled # 2. 配置验证 grep -E 关键配置项 /etc/crio/crio.conf 2/dev/null || echo 配置检查完成 # 3. CRI 接口 crictl info | grep status # 预期READY # 4. 功能测试 crictl pull busybox:latest 2/dev/null crictl images | grep busybox || echo 功能测试完成 # 5. 日志检查 journalctl -u crio --since 5 minutes ago --no-pager | tail -10 # 预期无错误日志 echo 操作验证完成验证流程# 1. 服务状态验证 systemctl is-active crio systemctl is-enabled crio # 预期active / enabled # 2. 版本验证 crio --version # 预期显示对应版本号 # 3. CRI 接口验证 crictl info | grep -E status|runtimeType|runtimeVersion # 预期statusREADY # 4. 配置验证 grep -E cgroup|systemd|storage|driver /etc/crio/crio.conf 2/dev/null || echo 配置文件检查 # 预期cgroup 驱动为 systemd # 5. 镜像拉取测试 crictl pull busybox:latest crictl images | grep busybox # 预期镜像拉取成功 # 6. Socket 验证 ls -la /var/run/crio/crio.sock # 预期socket 文件存在排错方案服务启动失败执行 journalctl -u crio -n 100 查看日志常见为配置文件语法错误或数据目录权限问题使用配置校验命令检查CRI 接口连接超时检查 /var/run/crio/crio.sock 是否存在确认 crio 服务已启动检查 /etc/crictl.yaml 的 runtime-endpoint 配置是否正确镜像拉取失败检查网络连通性和 DNS 解析配置镜像加速源确认 registries 配置正确离线环境需提前导入镜像cgroup 驱动不匹配K8s 节点必须使用 systemd cgroup 驱动与 kubelet 的 cgroupDriversystemd 一致修改配置后重启服务CNI 网络插件缺失检查 /opt/cni/bin 目录是否有 CNI 插件确认 /etc/cni/net.d 目录有网络配置文件数据目录权限错误确保容器存储目录权限正确root:rootSELinux 可能阻止访问执行 setenforce 0 测试或配置 SELinux 策略资源不足导致 OOM查看 dmesg | grep -i oom检查内存和磁盘空间适当增加资源或调整容器资源限制配置变更不生效修改配置后需重启服务systemctl restart确认修改的是正确的配置文件路径