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命令完全一样,不过要指定命名空间
相关推荐
孔令飞1 天前
工具分享:OneX AI 工具安装、配置及功能介绍
云原生·go·ai编程
程序猿阿越1 天前
从 StatefulSet 到容器挂载:CSI 源码走读
后端·kubernetes·源码阅读
分布式存储与RustFS1 天前
机器要下线,数据先线上搬家:RustFS 存储池退役实操
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
一掬净土1 天前
kubelet 报错如下:docker does not support reopening container log files
docker·云原生·kubelet·logfiles
weixin_539446781 天前
Ubuntu部署Minikube
kubernetes
fb_123451 天前
K8s存储与配置核心实战
云原生·容器·kubernetes
A-刘晨阳1 天前
【云原生】nerdctl 部署及使用指南
运维·docker·kubernetes·云计算·1024程序员节·nerdctl
bigbig_ben2 天前
yearning安装docker
运维·docker·容器
IT小小猪2 天前
从零搭建K8s 集群
云原生·容器·kubernetes