首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从 0 到企业级私有云|Harbor + Kubernetes:企业级镜像仓库实战

从 0 到企业级私有云|Harbor + Kubernetes:企业级镜像仓库实战

作者头像
用户12454170
发布2026-05-06 20:47:47
发布2026-05-06 20:47:47
490
举报

📌 本文导览

字数:约 1500+ 字,阅读时间:8 分钟 你将了解到: ✅ Harbor 私有镜像仓库与 Kubernetes 的集成方法 ✅ 使用 containerd 配置 HTTP 私有仓库 ✅ 创建镜像拉取 Secret 并正确应用到 Pod ✅ 从 Harbor 拉取镜像并运行 Pod 的完整流程 ✅ 常见错误(HTTP 仓库、认证失败、ImagePullBackOff)的排障思路

在前面的系列文章中,我们已经完成了 CI/CD 架构设计、Jenkins 部署等基础工作。

但这些都只是“准备阶段”。

👉 真正的分水岭是:镜像能不能成功流转起来。

现在,我们做一件非常关键的事情:

🔥 打通 Harbor → Kubernetes 镜像拉取链路


一、为什么这一步如此重要?

在企业 CI/CD 的核心链路中:

代码语言:javascript
复制
代码 → 构建 → 镜像 → 仓库 → 部署 → 运行

今天我们完成的是中间最关键的一段:

代码语言:javascript
复制
Harbor → Kubernetes → Pod 运行

👉 一旦这一步打通,后续的 Jenkins 自动化就只是“锦上添花”。


二、整体架构图示

当前实验环境:

  • Harbor:部署在独立虚拟机
  • Kubernetes:运行时使用 containerd
  • Jenkins:已通过下方的 yaml 文件安装(作为后续流水线的基础)

👉 核心目标

让 Kubernetes 从 Harbor 拉取私有镜像并成功运行 Pod


三、准备工作(关键前提)

在开始之前,请确保以下条件满足:

1️⃣ Harbor 已正常运行

访问 http://<Harbor-IP>能够正常登录:

代码语言:javascript
复制
admin / 自定义密码

2️⃣ Harbor 中已有测试镜像

我已提前推送了一个测试镜像:

代码语言:javascript
复制
docker tag m.daocloud.io/docker.io/library/nginx xxx.xxx.xxx.xxx/demo/nginx:test
docker push xxx.xxx.xxx.xxx/demo/nginx:test

👉 Harbor 中存在:demo/nginx:test

3️⃣ 所有 K8s 节点配置 containerd 访问 HTTP Harbor

修改 /etc/containerd/config.toml,添加:

代码语言:javascript
复制
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."Harhor 地址"]
  endpoint = ["Harhor 地址"]

重启 containerd:

代码语言:javascript
复制
systemctl restart containerd

4️⃣ 在 Kubernetes 中创建镜像拉取凭证(Secret)

代码语言:javascript
复制
kubectl create secret docker-registry harbor-secret \
  --docker-server=Harbor地址 \
  --docker-username=admin \
  --docker-password=你的密码 \
  --docker-email=test@test.com

📦 附:Jenkins 部署说明

本实验中的 Jenkins 用于后续 CI/CD 流水线,不影响当前 Harbor→K8s 的链路验证。 如果你需要部署 Jenkins,推荐使用如下 yaml 快速安装:

代码语言:javascript
复制
apiVersion: apps/v1
kind:Deployment
metadata:
name:jenkins
namespace:cicd
spec:
replicas:1
selector:
    matchLabels:
      app:jenkins
template:
    metadata:
      labels:
        app:jenkins
    spec:
      containers:
      -name:jenkins
        image:m.daocloud.io/docker.io/jenkins/jenkins:lts
        ports:
        -containerPort:8080
---
apiVersion:v1
kind:Service
metadata:
name:jenkins
namespace:cicd
spec:
type:NodePort
ports:
-port:8080
    nodePort:30080
selector:
    app:jenkins

安装完成后,通过 kubectl get pods -n cicd确认 Jenkins 正常运行即可。 后续文章我将使用 Jenkins + Kaniko 实现自动构建与推送。


四、实战:Kubernetes 拉取 Harbor 镜像

1️⃣ 创建测试 Pod

test-harbor.yaml

代码语言:javascript
复制
apiVersion: v1
kind:Pod
metadata:
name:test-harbor
spec:
containers:
-name:nginx
    image:192.168.114.136/demo/nginx:test
    ports:
    -containerPort:80
imagePullSecrets:
-name:harbor-secret

2️⃣ 应用配置

代码语言:javascript
复制
kubectl apply -f test-harbor.yaml

3️⃣ 观察状态

代码语言:javascript
复制
kubectl get pod -w

4️⃣ 成功标志

当状态变为 Running

代码语言:javascript
复制
test-harbor   Running

👉 说明镜像已成功拉取并运行


五、验证服务是否正常

进入容器测试:

代码语言:javascript
复制
kubectl exec -it test-harbor -- curl localhost

返回结果示例:

代码语言:javascript
复制
Welcome to nginx!

👉 这说明:

  • 镜像不仅拉取成功
  • 容器已经正常运行

六、你已经完成了什么?

很多人会低估这一步,但实际上你已经具备了企业级关键能力:

✅ 完整的企业级镜像流转链路

代码语言:javascript
复制
镜像构建(手动)→ Harbor 仓库 → Kubernetes 拉取 → Pod 运行成功

✅ 关键技术点落地

  • 私有镜像仓库(Harbor)
  • K8s 私有镜像认证(Secret)
  • containerd 配置 HTTP 镜像源
  • Pod 成功运行并验证服务

👉 在真实企业环境中,这一步已经可以支撑生产部署


七、常见踩坑总结(强烈建议收藏)

错误现象

常见原因

解决方案

http: server gave HTTP response to HTTPS client

containerd 默认要求 HTTPS,但 Harbor 使用 HTTP

配置 containerd 的 registry.mirrors为 HTTP 端点

unauthorized

未配置或配置错误的 imagePullSecret

正确创建 secret,并确保 Pod 中引用

ImagePullBackOff

Harbor 地址错误 / 网络不通 / secret 缺失

检查地址、网络连通性,重新创建 secret


八、下一步:进入 CI/CD 核心

到这里,我们才真正具备:

🔥 做自动化流水线的基础条件

接下来我们将进入:

🚀 Jenkins + Kaniko 构建镜像并自动推送 Harbor

实现完整的自动化闭环:

代码语言:javascript
复制
Git → Jenkins → 构建镜像 → 推送 Harbor → 自动部署到 Kubernetes

九、总结

今天我们做了一件非常关键的事情:

打通了 Harbor 到 Kubernetes 的部署链路

这意味着:

  • 你的 CI/CD 架构不是“纸上谈兵”
  • 而是已经具备实际落地能力

本文内部分图示来源于互联网,侵删!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么这一步如此重要?
  • 二、整体架构图示
  • 三、准备工作(关键前提)
    • 1️⃣ Harbor 已正常运行
    • 2️⃣ Harbor 中已有测试镜像
    • 3️⃣ 所有 K8s 节点配置 containerd 访问 HTTP Harbor
    • 4️⃣ 在 Kubernetes 中创建镜像拉取凭证(Secret)
  • 📦 附:Jenkins 部署说明
  • 四、实战:Kubernetes 拉取 Harbor 镜像
    • 1️⃣ 创建测试 Pod
    • 2️⃣ 应用配置
    • 3️⃣ 观察状态
    • 4️⃣ 成功标志
  • 五、验证服务是否正常
  • 六、你已经完成了什么?
    • ✅ 完整的企业级镜像流转链路
    • ✅ 关键技术点落地
  • 七、常见踩坑总结(强烈建议收藏)
  • 八、下一步:进入 CI/CD 核心
  • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档