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命令完全一样,不过要指定命名空间
相关推荐
Star(up up up)13 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
分布式存储与RustFS16 小时前
Terraform 状态文件老在本地丢、并发还撞锁:把 state 锁进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
csdn_aspnet16 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
对象存储与RustFS17 小时前
Jenkins 的构建产物别堆在控制器磁盘:用 RustFS 当它的 S3 工件仓库
后端·docker·云原生
罗小爬EX1 天前
Helm 从概念到实战:以一个普通 Web 应用为例
云原生·helm
java_logo1 天前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
xbzb1 天前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI2 天前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
fengkai45452 天前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS2 天前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准