K8s集群生产环境运行时最优选型部署实操 K8s集群生产环境运行时最优选型部署实操技术栈Kubernetes v1.32.13 Rocky Linux 8.6 Containerd 1.7.x CRI-O v1.30.x Docker 24.0.x runc 1.1.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群生产环境运行时最优选型部署实操操作环境K8s 集群 3 节点k8s-master(192.168.1.10), k8s-node1(192.168.1.11), k8s-node2(192.168.1.12)多运行时 作为容器运行时部署于所有节点节点最低配置 2C4G系统盘预留 50GB 以上容器数据目录 /var/lib/containerd, /var/lib/containers/storage, /var/lib/docker 建议独立挂载预留 100GB 以上操作系统 Rocky Linux 8.6内核版本 4.18已关闭 swap 分区已配置可用的 Yum 软件源多运行时 版本与 Kubernetes v1.32.13 兼容已加载 overlay 和 br_netfilter 内核模块对接原理多运行时 是 Kubernetes 容器运行时实现通过 CRIContainer Runtime Interface接口与 kubelet 通信。kubelet 通过 Unix 域套接字 /run/containerd/containerd.sock, /var/run/crio/crio.sock, /var/run/docker.sock 调用 多运行时 的 CRI 接口多运行时 负责镜像拉取、容器生命周期管理、存储管理和网络配置。容器的实际运行由 OCI 运行时 runc 完成网络配置由 CNI 插件完成。配置文件为 /etc/containerd/config.toml, /etc/crio/crio.conf, /etc/docker/daemon.json数据存储在 /var/lib/containerd, /var/lib/containers/storage, /var/lib/docker。 多运行时环境指在同一 K8s 集群中同时部署和管理多种容器运行时Containerd、CRI-O、Docker通过节点标签、运行时类RuntimeClass等机制实现不同工作负载使用不同运行时。多运行时管理需确保配置统一、版本兼容、故障隔离和运维标准化。详细步骤1. 环境检查与基础配置# 检查系统环境 hostname cat /etc/redhat-release uname -r ​ # 基础配置 modprobe overlay br_netfilter cat /etc/sysctl.d/99-kubernetes-cri.conf EOF net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 vm.swappiness 0 EOF sysctl --system swapoff -a ​ # 检查 多运行时 状态 systemctl status containerd / crio / docker --no-pager 2/dev/null | head -5 || echo 多运行时 未安装2. 安装/配置 多运行时# 备份原有配置 cp -a /etc/containerd/config.toml, /etc/crio/crio.conf, /etc/docker/daemon.json /etc/containerd/config.toml, /etc/crio/crio.conf, /etc/docker/daemon.json.bak.$(date %Y%m%d) 2/dev/null ​ # 配置关键参数cgroup systemd、存储驱动、pause镜像 # 修改 /etc/containerd/config.toml, /etc/crio/crio.conf, /etc/docker/daemon.json 中的关键配置 # 确保 cgroup_manager / exec-opts 为 systemd # 确保 storage_driver 为 overlay2 # 确保 pause_image 为可达地址 ​ # 重启服务生效 systemctl daemon-reload systemctl restart containerd / crio / docker sleep 3 systemctl is-active containerd / crio / docker3. 功能验证与测试# 验证服务状态 systemctl status containerd / crio / docker --no-pager | head -8 ​ # 验证 CRI 接口 crictl version crictl info 2/dev/null | grep -E status|runtimeVersion || echo crictl 未配置 ​ # 验证版本 containerd --version crio --version docker --version ​ # 测试镜像拉取 crictl pull busybox:latest 2/dev/null crictl images | grep busybox || echo 镜像拉取测试跳过验证流程# 1. 服务状态验证 systemctl is-active containerd / crio / docker systemctl is-enabled containerd / crio / docker # 预期active / enabled ​ # 2. 版本验证 containerd --version crio --version docker --version # 预期显示对应版本号 ​ # 3. CRI 接口验证 crictl info | grep -E status|runtimeType|runtimeVersion # 预期statusREADY ​ # 4. 配置验证 grep -E cgroup|systemd|storage|driver /etc/containerd/config.toml, /etc/crio/crio.conf, /etc/docker/daemon.json 2/dev/null || echo 配置文件检查 # 预期cgroup 驱动为 systemd ​ # 5. 镜像拉取测试 crictl pull busybox:latest crictl images | grep busybox # 预期镜像拉取成功 ​ # 6. Socket 验证 ls -la /run/containerd/containerd.sock, /var/run/crio/crio.sock, /var/run/docker.sock # 预期socket 文件存在排错方案服务启动失败执行 journalctl -u containerd / crio / docker -n 100 查看日志常见为配置文件语法错误或数据目录权限问题使用配置校验命令检查CRI 接口连接超时检查 /run/containerd/containerd.sock, /var/run/crio/crio.sock, /var/run/docker.sock 是否存在确认 containerd / crio / docker 服务已启动检查 /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确认修改的是正确的配置文件路径