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 pullnerdctl pull 时提示 failed to resolve referenceconnection 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命令完全一样,不过要指定命名空间
相关推荐
2601_966871401 小时前
全新 云原生系统精讲与全流程落地实践,云原生 DevOpS 进阶实战营
运维·云原生·devops
识途老码1 小时前
docker运行sqlserver
docker·容器·sqlserver
小谈不敲代码2 小时前
【10-kubernetes的控制器】
kubernetes·运维开发
Henry-SAP2 小时前
小米自研AI芯片亮相
人工智能·云原生·sap·erp
心之语歌2 小时前
Windows Docker Desktop 部署 SQL Server 2022 完整安装手册
windows·docker·容器
分布式存储与RustFS2 小时前
把 12TB 生产数据从 MinIO 迁到 RustFS:一次真实迁移的实测
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
java_logo2 小时前
Docker 部署 TypeWords:轻松搭建英语单词与文章练习平台
运维·docker·容器·轩辕镜像·typewords·英语单词练习·四级单词练习
无望__wsk3 小时前
k8s控制器
java·docker·kubernetes
不好听6133 小时前
Dockerfile 实战:把第一个 Node 服务容器化
docker·容器