K8s 1.30 实战:Containerd 镜像仓库配置与 nerdctl 管理命令

文章目录

管理容器(创建、销毁等)都是由CRI进行的;常见的CRI有Containerd、kata等;

k8s1.24之前没有CRI协议,直接硬编码Docker的api,使用dockerd运行时;1.24开始有CRI协议,但需要自己安装运行时,经常使用Containerd运行时。

Docker和Containerd的调用链

RunC:容器底层执行工具,调用linux内核去创建容器。

修改Containerd的镜像仓库地址

改成成阿里云 ACR

目前使用的k8s版本是:v1.30

bash 复制代码
# kubectl version
Client Version: v1.30.14
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.1
# Containerd配置文件:/etc/containerd/config.toml
# ACR公开仓库域名
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.cn-hangzhou.aliyuncs.com"]
endpoint = ["registry.cn-hangzhou.aliyuncs.com"]
# 重启Containerd:systemctl restart containerd

常见错误排查

1. 配置后拉取镜像失败

现象 :执行 ctr images pull 或 nerdctl pull 时提示 failed to resolve reference 或 connection refused。

原因:

  • 配置文件中的 endpoint 地址写错,或镜像仓库域名与配置的 registry.mirrors 不匹配;
  • 修改配置后没有重启 Containerd,导致新配置未生效;
  • 服务器无法访问外网,或阿里云 ACR 域名被防火墙拦截。

解决方法:

bash 复制代码
# 1. 检查配置是否生效
containerd config dump | grep -A 5 "registry.mirrors"

# 2. 确认配置无误后重启 Containerd
systemctl restart containerd

# 3. 测试拉取镜像
ctr images pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest

2. Containerd 重启失败

现象 :执行 systemctl restart containerd 后提示 Job for containerd.service failed。

原因:

  • config.toml 语法错误,TOML 格式不合法;
  • 配置了不存在的插件路径或镜像仓库;
  • 端口被占用,或 containerd.sock 文件权限异常。

解决方法:

bash 复制代码
# 1. 查看详细错误日志
journalctl -u containerd -n 50 --no-pager

# 2. 校验配置文件语法
containerd config dump > /dev/null

# 3. 若语法错误,备份后恢复默认配置再逐步修改
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
containerd config default > /etc/containerd/config.toml
systemctl restart containerd

3. nerdctl 命令找不到

现象 :执行 nerdctl version 提示 command not found。

原因:

  • 解压后的二进制文件没有移动到 /usr/local/bin 目录;
  • 文件没有可执行权限;
  • /usr/local/bin 不在当前用户的 PATH 环境变量中。

解决方法:

bash 复制代码
# 1. 确认文件已解压并移动到正确位置
tar -zxvf nerdctl-2.3.5-linux-amd64.tar.gz
mv nerdctl /usr/local/bin/

# 2. 赋予可执行权限
chmod +x /usr/local/bin/nerdctl

# 3. 验证命令是否可用
nerdctl version

Containerd管理命令:nerdctl

官方地址:https://github.com/containerd/nerdctl.git

下载链接:https://github.com/containerd/nerdctl/releases/download/v2.3.5/nerdctl-2.3.5-linux-amd64.tar.gz

下载后解压将命令移动到/usr/local/bin目录下即可

  • 基础命令
bash 复制代码
# 查看版本
nerdctl version
# 查看当前k8s运行的容器,一定要加上命名空间
nerdctl -n k8s.io ps
# nerdctl命令与docker命令完全一样,不过要指定命名空间
相关推荐
寻林写彡6 小时前
01| 裸机部署 K8S:从零搭建生产可用集群
云原生·kubernetes
更深兼春远8 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
念何架构之路9 小时前
zap WriteSyncer与Sink体系
云原生·golang
小白的码BUG之路12 小时前
Docker -- No space left on device
运维·docker·容器
EatFan12 小时前
从云原生到AI原生:2026后端架构“三驾马车”(事件驱动、虚拟线程、AI Agent内嵌)演进解析
spring boot·云原生·架构·虚拟线程·ai-native·ai agent·spring ai
wzq11_66613 小时前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
程序员老陆13 小时前
Docker 命令全景指南:从镜像构建到生产运维
运维·docker·容器
Henry-SAP1 天前
SAP MRP失效根源业务角度解析
人工智能·云原生·sap·erp
江湖有缘1 天前
3款开源绘图工具整理合集,可Docker一键部署!
docker·容器·开源
nhdh1 天前
Higress:AI时代云原生网关新选择
人工智能·云原生