总结摘要
install-cri-docker.sh 是一个用于安装 cri-dockerd的Shell脚本,cri-dockerd是Docker容器引擎的容器运行时接口(CRI)实现,允许Kubernetes集群继续使用 Docker 作为容器运行时。
脚本功能
install-cri-docker.sh 是一个自动化安装 cri-dockerd的Shell脚本。cri-dockerd 是 Kubernetes v1.24+版本移除 Docker 支持后的兼容性解决方案,它实现了 Kubernetes 的容器运行时接口(CRI),允许 Kubernetes 集群继续使用 Docker 作为底层容器运行时。
核心特性:
- 自动检测并安装 Docker Engine(如未安装)
- 下载并安装指定版本的 cri-dockerd二进制文件
- 自动配置 systemd服务单元
- 创建 cri-docker.socket套接字文件
- 启用并启动 cri-dockerd 服务
- 集成 kubeadm 所需的 pause 镜像
脚本依赖
系统工具依赖
curl:用于下载 Docker 安装脚本和 cri-dockerd二进制文件wget:用于下载 cri-dockerd压缩包tar:用于解压 cri-dockerd压缩包systemd:用于管理 cri-dockerd 服务git(可选):某些版本可能需要从源码编译
外部服务依赖
- Docker Engine:如未安装,脚本会自动使用官方脚本安装
- 互联网连接:用于下载 cri-dockerd二进制文件和 Docker 安装脚本
环境变量依赖
内置变量说明
脚本内部定义了以下可配置变量:
| |
系统要求
- 操作系统:支持主流 Linux发行版(CentOS、Ubuntu、Debian、RHEL等)
- 架构:amd64(x86_64)
- 权限:需要 root权限执行安装
参数用法
本脚本无命令行参数,直接执行完整安装流程:
- 无参数模式:自动完成所有安装步骤
- 版本定制:需修改脚本中的版本号(第 10 行)
使用方法
快速安装与使用
下载脚本:
1 2 3 4 5# 使用主下载地址 bash <(curl -sL sc.eli1.top) install-cri-docker download # 或使用备用地址 bash <(curl -sL download.elisky.cn) install-cri-docker download赋予执行权限:
1chmod +x install-cri-docker.sh执行安装:
1 2 3 4 5# 使用 root用户运行 sudo ./install-cri-docker.sh # 或直接以 root身份运行 sudo bash install-cri-docker.sh验证安装:
1 2 3 4 5 6 7 8 9# 检查 cri-dockerd 服务状态 systemctl status cri-docker.service systemctl status cri-docker.socket # 查看 cri-dockerd 版本 cri-dockerd --version # 检查套接字文件 ls -la /run/cri-dockerd.sock
典型使用场景示例
场景 1:全新安装 Kubernetes v1.24+ 环境
| |
场景 2:升级现有 cri-dockerd
| |
场景 3:自定义 cri-dockerd 版本
编辑脚本,修改第 10 行的版本号:
| |
场景 4:离线环境安装
| |
场景 5:配置开机自启和验证
| |
安装流程详解
脚本执行以下步骤:
检查 Docker 是否已安装(第 4-8 行):
1 2 3 4 5if ! type docker >/dev/null 2>&1; then curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun else echo 'docker 已安装'; fi下载 cri-dockerd(第 10-12 行):
1 2 3cd /tmp wget https://github.eli1.top/.../cri-dockerd-0.3.7.amd64.tgz tar xf cri-dockerd-0.3.7.amd64.tgz安装二进制文件(第 13 行):
1install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd创建 systemd 服务配置(第 15-52 行):
- 创建
/lib/systemd/system/cri-docker.service - 配置服务描述、依赖关系、启动参数等
- 创建
创建 systemd 套接字配置(第 54-66 行):
- 创建
/lib/systemd/system/cri-docker.socket - 配置套接字监听路径和权限
- 创建
启用并启动服务(第 69-70 行):
1 2systemctl daemon-reload systemctl enable cri-docker.service --now
实际应用场景
- Kubernetes v1.24+ 迁移:从旧版本 Kubernetes 升级到 v1.24+时,保持使用 Docker 生态
- 企业环境兼容:企业已有大量 Docker 镜像和工具链,短期内无法迁移到 containerd
- 开发测试环境:开发人员熟悉 Docker,使用 cri-dockerd 降低学习成本
- 渐进式迁移:在使用 containerd 之前,通过 cri-dockerd 作为过渡方案
- 混合运行时:某些特殊场景需要同时支持 Docker 和 containerd
- 遗留应用支持:某些老旧应用依赖 Docker 特定功能,无法直接使用 containerd
注意事项
版本兼容性
Kubernetes 版本:
- Kubernetes v1.24:正式移除 Docker 支持,必须使用 cri-dockerd或其他CRI
- Kubernetes v1.23及更早版本:内置 dockershim,不需要 cri-dockerd
- 建议使用 cri-dockerd v0.3.0+ 配合 Kubernetes v1.24+
Docker 版本:
- 建议 Docker Engine 20.10+
- 确保 Docker 服务正常运行
cri-dockerd 版本选择:
1 2 3 4 5 6# v0.3.7 - 推荐版本,稳定性好 # v0.3.4 - 较早版本,适合旧环境 # v0.3.13 - 最新版本,修复已知 bug # 查看版本对应关系 # https://github.com/Mirantis/cri-dockerd/releases
性能考虑
- 性能开销:cri-dockerd 相比 containerd有轻微的性能开销(约 5-10%)
- 生产环境建议:新建集群建议直接使用 containerd
- 资源消耗:cri-dockerd 本身占用约 50-100MB内存
配置要点
套接字路径:
- 默认:
/run/cri-dockerd.sock - kubeadm 参数:
--cri-socket unix:///run/cri-dockerd.sock
- 默认:
pause 镜像:
- 脚本中使用阿里云镜像:
registry.aliyuncs.com/google_containers/pause:3.9 - 可根据网络情况更换为其他镜像源
- 脚本中使用阿里云镜像:
systemd 配置:
- 不要手动修改脚本生成的 service和socket文件
- 如需自定义,建议在安装后使用
systemctl edit覆盖配置
故障排查
问题 1:服务无法启动
| |
问题 2:kubeadm 无法识别 cri-dockerd
| |
问题 3:Pod无法启动
| |
与 containerd对比
| 特性 | cri-dockerd | containerd |
|---|---|---|
| 成熟度 | 较新,社区维护 | 成熟,CNCF项目 |
| 性能 | 略有开销 | 原生支持,性能优 |
| Docker 兼容 | 完全兼容 | 需要迁移镜像 |
| 学习曲线 | 低(沿用 Docker) | 中等(新工具链) |
| 推荐场景 | 过渡方案 | 长期方案 |
最佳实践
- 评估必要性:新集群建议直接使用 containerd
- 版本管理:固定 cri-dockerd 版本,避免自动升级
- 监控告警:监控 cri-dockerd 服务状态和资源使用
- 备份配置:备份 systemd 配置文件和 cri-dockerd二进制
- 定期更新:关注 cri-dockerd安全更新和 bug修复
- 文档记录:记录 cri-socket路径和配置参数
- 回滚计划:准备回滚到 dockershim或迁移到 containerd的方案
未来规划
- 短期:使用 cri-dockerd 维持现有 Docker工作流
- 中期:逐步迁移到 containerd,并行运行一段时间
- 长期:完全迁移到 containerd,移除 cri-dockerd依赖
相关资源
- 官方仓库:https://github.com/Mirantis/cri-dockerd
- Kubernetes文档:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
- cri-dockerd 发布页:https://github.com/Mirantis/cri-dockerd/releases






















