惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 CheckSSL.sh - SSL证书到期时间监控脚本 g.sh - Go语言环境管理工具安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress 4. K8S 控制器 Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 1. K8S 简介和认证介绍 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
install-cri-docker.sh - cri-dockerd安装脚本
云野开源志 · 2026-01-26 · via 云野开源志

总结摘要

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 安装脚本

环境变量依赖

内置变量说明

脚本内部定义了以下可配置变量:

1
2
3
4
5
6
7
8
# cri-dockerd 版本(硬编码在脚本中)
CRI_DOCKER_VERSION=v0.3.7

# 下载源(使用镜像加速)
DOWNLOAD_URL="https://github.eli1.top/https://github.com/Mirantis/cri-dockerd/releases"

# pause 镜像(使用国内镜像)
PAUSE_IMAGE="registry.aliyuncs.com/google_containers/pause:3.9"

系统要求

  • 操作系统:支持主流 Linux发行版(CentOS、Ubuntu、Debian、RHEL等)
  • 架构:amd64(x86_64)
  • 权限:需要 root权限执行安装

参数用法

本脚本无命令行参数,直接执行完整安装流程:

  • 无参数模式:自动完成所有安装步骤
  • 版本定制:需修改脚本中的版本号(第 10 行)

使用方法

快速安装与使用

  1. 下载脚本

    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
  2. 赋予执行权限

    1
    
    chmod +x install-cri-docker.sh
  3. 执行安装

    1
    2
    3
    4
    5
    
    # 使用 root用户运行
    sudo ./install-cri-docker.sh
    
    # 或直接以 root身份运行
    sudo bash install-cri-docker.sh
  4. 验证安装

    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+ 环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 先安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 2. 安装 cri-dockerd
sudo ./install-cri-docker.sh

# 3. 安装 kubeadm、kubelet、kubectl
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm kubectl

# 4. 初始化集群(指定 cri-dockerd 为容器运行时)
kubeadm init --pod-network-cidr=10.244.0.0/16 \
  --image-repository registry.aliyuncs.com/google_containers \
  --cri-socket unix:///run/cri-dockerd.sock

场景 2:升级现有 cri-dockerd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 停止现有服务
sudo systemctl stop cri-docker.service
sudo systemctl stop cri-docker.socket

# 备份旧版本
sudo mv /usr/local/bin/cri-dockerd /usr/local/bin/cri-dockerd.bak

# 重新运行安装脚本(会安装新版本)
sudo ./install-cri-docker.sh

# 重启服务
sudo systemctl daemon-reload
sudo systemctl start cri-docker.service
sudo systemctl start cri-docker.socket

# 验证版本
cri-dockerd --version

场景 3:自定义 cri-dockerd 版本

编辑脚本,修改第 10 行的版本号:

1
2
3
4
5
# 修改前
wget https://github.eli1.top/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.7/cri-dockerd-0.3.7.amd64.tgz

# 修改为其他版本(如 v0.3.4)
wget https://github.eli1.top/https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz

场景 4:离线环境安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 1. 在有网络的机器上下载 cri-dockerd二进制文件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.7/cri-dockerd-0.3.7.amd64.tgz

# 2. 传输到离线服务器
scp cri-dockerd-0.3.7.amd64.tgz user@offline-server:/tmp/

# 3. 手动安装
cd /tmp
tar xf cri-dockerd-0.3.7.amd64.tgz
cd cri-dockerd
sudo install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd

# 4. 复制 systemd 配置文件(从脚本中提取或手动创建)
# 参考脚本中的 cat >> ...部分创建 service和socket文件

# 5. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service --now
sudo systemctl enable cri-docker.socket --now

场景 5:配置开机自启和验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 启用开机自启
sudo systemctl enable cri-docker.service
sudo systemctl enable cri-docker.socket

# 立即启动服务
sudo systemctl start cri-docker.service
sudo systemctl start cri-docker.socket

# 检查服务状态
systemctl is-active cri-docker.service
systemctl is-active cri-docker.socket

# 查看日志
journalctl -u cri-docker.service -f

安装流程详解

脚本执行以下步骤:

  1. 检查 Docker 是否已安装(第 4-8 行):

    1
    2
    3
    4
    5
    
    if ! type docker >/dev/null 2>&1; then
        curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    else
        echo 'docker 已安装';
    fi
  2. 下载 cri-dockerd(第 10-12 行):

    1
    2
    3
    
    cd /tmp
    wget https://github.eli1.top/.../cri-dockerd-0.3.7.amd64.tgz
    tar xf cri-dockerd-0.3.7.amd64.tgz
  3. 安装二进制文件(第 13 行):

    1
    
    install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
  4. 创建 systemd 服务配置(第 15-52 行):

    • 创建 /lib/systemd/system/cri-docker.service
    • 配置服务描述、依赖关系、启动参数等
  5. 创建 systemd 套接字配置(第 54-66 行):

    • 创建 /lib/systemd/system/cri-docker.socket
    • 配置套接字监听路径和权限
  6. 启用并启动服务(第 69-70 行):

    1
    2
    
    systemctl 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:服务无法启动

1
2
3
4
5
6
7
# 查看详细错误
journalctl -u cri-docker.service -n 50 --no-pager

# 常见原因:
# - Docker 服务未启动:systemctl start docker
# - 端口冲突:检查是否有其他进程占用套接字
# - 权限问题:确保 socket文件权限正确

问题 2:kubeadm 无法识别 cri-dockerd

1
2
3
4
5
6
7
8
# 确保使用正确的 cri-socket参数
kubeadm init --cri-socket unix:///run/cri-dockerd.sock

# 验证 socket文件存在
ls -la /run/cri-dockerd.sock

# 检查 cri-dockerd 是否运行
ps aux | grep cri-dockerd

问题 3:Pod无法启动

1
2
3
4
5
6
7
8
# 查看 kubelet日志
journalctl -u kubelet -n 100 --no-pager

# 检查 CRI配置
crictl info

# 验证 Docker 正常运行
docker run hello-world

与 containerd对比

特性cri-dockerdcontainerd
成熟度较新,社区维护成熟,CNCF项目
性能略有开销原生支持,性能优
Docker 兼容完全兼容需要迁移镜像
学习曲线低(沿用 Docker)中等(新工具链)
推荐场景过渡方案长期方案

最佳实践

  1. 评估必要性:新集群建议直接使用 containerd
  2. 版本管理:固定 cri-dockerd 版本,避免自动升级
  3. 监控告警:监控 cri-dockerd 服务状态和资源使用
  4. 备份配置:备份 systemd 配置文件和 cri-dockerd二进制
  5. 定期更新:关注 cri-dockerd安全更新和 bug修复
  6. 文档记录:记录 cri-socket路径和配置参数
  7. 回滚计划:准备回滚到 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