当前位置: 首页 > news >正文

K8s集群从Docker切换到Containerd后,如何搞定Harbor和阿里云镜像仓库的配置(保姆级避坑)

Kubernetes集群从Docker迁移到Containerd:Harbor与阿里云镜像仓库配置全指南

当Kubernetes集群从Docker切换到Containerd时,镜像仓库的配置方式发生了根本性变化。许多运维团队在迁移过程中发现,原本熟悉的Docker配置方法不再适用,特别是对于私有镜像仓库如Harbor和云厂商提供的镜像服务如阿里云ACR。本文将深入解析Containerd的配置逻辑,提供从基础配置到实战验证的完整解决方案。

1. Containerd与Docker的配置思维差异

Docker时代,我们习惯在/etc/docker/daemon.json中配置镜像仓库和加速器。而Containerd采用了完全不同的配置体系,核心配置文件是/etc/containerd/config.toml。这种差异不仅仅是文件路径的变化,更是配置理念的转变。

Containerd的配置结构更加模块化,主要分为几个关键部分:

  • registry.mirrors:用于配置镜像仓库的镜像站点(mirror)
  • registry.configs:用于配置访问私有仓库的认证信息
  • registry.auths:兼容Docker认证信息的配置方式

与Docker相比,Containerd的配置更加细粒度化。例如,在Docker中,我们可能简单地配置一个全局的镜像加速器,而在Containerd中,我们需要为每个registry(如docker.io、harbor.example.com等)单独配置mirror和认证信息。

2. Containerd基础配置解析

2.1 配置文件结构与位置

Containerd的主配置文件通常位于/etc/containerd/config.toml。如果文件不存在,可以使用以下命令生成默认配置:

containerd config default > /etc/containerd/config.toml

配置文件采用TOML格式,主要结构如下:

[plugins."io.containerd.grpc.v1.cri".registry] config_path = "" [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".auth] username = "admin" password = "password"

2.2 关键配置字段详解

registry.mirrors

registry.mirrors用于配置镜像仓库的镜像站点。例如,为docker.io配置多个镜像加速器:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = [ "https://br003st4.mirror.aliyuncs.com", "https://registry-1.docker.io", "https://08c765900e00f5d20f0dc0005a40c3a0.mirror.swr.myhuaweicloud.com" ]

注意:Containerd会按顺序尝试这些endpoint,直到成功拉取镜像。

registry.configs

registry.configs用于配置私有仓库的认证信息。例如,配置Harbor仓库的认证:

[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".auth] username = "admin" password = "Harbor12345"

3. Harbor私有仓库配置实战

3.1 基础配置

假设Harbor仓库地址为http://192.168.209.182,我们需要在config.toml中添加以下配置:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.209.182"] endpoint = ["http://192.168.209.182"] [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.209.182".auth] username = "admin" password = "Harbor12345"

配置完成后,重启Containerd服务:

systemctl restart containerd

3.2 测试镜像拉取

使用crictl测试从Harbor拉取镜像:

crictl pull 192.168.209.182/nginx/mynginx:v1.0

3.3 Kubernetes中使用Harbor镜像

在Kubernetes中,除了在Containerd中配置认证信息外,还可以通过Secret来提供认证:

kubectl create secret docker-registry harbor-secret \ --docker-username=admin \ --docker-password=Harbor12345 \ --docker-server=192.168.209.182

然后在Pod定义中引用这个Secret:

apiVersion: v1 kind: Pod metadata: name: test-app spec: containers: - name: nginx image: 192.168.209.182/nginx/mynginx:v1.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: harbor-secret

4. 阿里云ACR配置实战

4.1 基础配置

假设阿里云ACR地址为registry.cn-hangzhou.aliyuncs.com,配置如下:

[plugins."io.containerd.grpc.v1.cri".registry.configs."registry.cn-hangzhou.aliyuncs.com".auth] username = "your_username" password = "your_password"

4.2 镜像加速器配置

阿里云提供了镜像加速器服务,可以为docker.io配置加速:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://br003st4.mirror.aliyuncs.com"]

4.3 Kubernetes中使用ACR镜像

创建访问ACR的Secret:

kubectl create secret docker-registry ali-secret \ --docker-username=your_username \ --docker-password=your_password \ --docker-server=registry.cn-hangzhou.aliyuncs.com

在Pod定义中使用:

apiVersion: v1 kind: Pod metadata: name: test-app spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/testpm-k8s/nginx:1.14 imagePullSecrets: - name: ali-secret

5. 常见问题排查与优化

5.1 镜像拉取失败排查步骤

  1. 检查Containerd日志

    journalctl -u containerd --no-pager -n 100
  2. 验证配置是否生效

    containerd config dump | grep -A 10 "registry"
  3. 手动测试镜像拉取

    crictl pull <image-name>

5.2 安全最佳实践

  • 避免在配置文件中明文存储密码,可以考虑使用凭证助手
  • 为不同的仓库使用不同的凭证,遵循最小权限原则
  • 定期轮换凭证

5.3 性能优化建议

  • 为常用镜像仓库配置就近的镜像站点
  • 合理设置镜像缓存策略
  • 考虑使用P2P镜像分发方案如Dragonfly

在实际迁移过程中,我发现最关键的步骤是理解Containerd的配置逻辑与Docker的区别。特别是在多集群环境中,保持配置的一致性非常重要。建议使用配置管理工具如Ansible来统一管理所有节点的Containerd配置。

http://www.jsqmd.com/news/666929/

相关文章:

  • 2026年封闭式管道焊机公司选哪家,开放式管道焊机/管道自动焊机/管板焊机/管管焊机,封闭式管道焊机源头厂家口碑推荐 - 品牌推荐师
  • 【uniapp】scroll-view 动态内容自动滚动到底部的实现与优化
  • DDrawCompat完整指南:一键解决Windows经典游戏兼容性问题
  • 实战指南:基于LLaMA-Factory与Qwen3.5-4B,从零构建专业医疗AI助手
  • 2025届最火的六大AI科研网站推荐榜单
  • 对讲功能自动化测试方案与实现
  • 【UCIe】Multi-Module链路协同训练与带宽优化策略解析
  • Go语言的反射修改切片容量与数组指针在底层操作中的限制
  • 手机内存LPDDR4的ZQ校准到底在干啥?一个电阻如何影响你的游戏帧率?
  • 别再被‘Permission Denial’卡住了!Android跨应用启动Activity的exported属性详解与实战避坑
  • 2026届学术党必备的AI科研工具实际效果
  • 【认知科学×AGI双轨验证】:2026奇点大会公布的7类人类元认知能力量化模型,已获MIT、DeepMind联合复现
  • Minecraft世界管理终极指南:如何用MCA Selector快速清理和优化你的存档 [特殊字符]
  • qmc-decoder音频解密工具:3分钟解锁QQ音乐加密文件,实现音乐播放自由
  • 如何快速实现智能配置:OpCore-Simplify自动化EFI构建工具深度解析指南
  • 2025届最火的五大AI辅助论文网站横评
  • HCL华三模拟器静态路由配置保姆级教程:从拓扑搭建到全网互通(附命令详解)
  • 惠州无人机模胚加工厂家-昌晖模胚厂 - 昌晖模胚
  • 向量引擎中转站偷走我半条命后终于把API密钥这件事整明白了
  • 条码字体革命:开源神器5分钟搞定专业条码生成
  • 给TOY计算机加点“料”:用Python为教学CPU添加自定义指令(比如乘法、跳转)
  • 3分钟看懂B站评论区:你的专属“读心“助手
  • 实战指南:用Python模拟实现CP-ABE的访问树构建与解密(附完整代码)
  • 2026年学咖啡师服务联系方式指南:学咖啡师选哪个品牌?学咖啡师价格比较全解析 - 品牌策略师
  • 如何用PPTist模板系统3分钟创建专业演示文稿
  • 用Python和Pandas玩转ConceptNet中文版:从CSV文件到知识图谱查询的保姆级教程
  • 用JavaScript给华为手表写个运动游戏App?手把手教你从零到上架(附源码)
  • 机器学习数据版本管理
  • 告别二值化!用Halcon的edges_sub_pix和segment_contours_xld搞定低对比度图像轮廓分割
  • Scrcpy Mask:终极安卓设备键鼠映射控制指南