K8s Lab 把当前仓库文档整理成一个可阅读的网页站点

Repository Reading Site

Helm 与 Harbor — 包管理与私有镜像仓库

一个应用可能需要 Deployment + Service + ConfigMap + Secret + Ingress + HPA + PDB... 十几个 YAML 文件。手动 `kubectl apply` 管理这些文件: Helm 把一组相关的 K8s 资源打包为 **Chart**,一条命令安装/升级/回滚。 | 概念 | 说明 | 类比 | |-

Markdownphase-3/01-helm-harbor.md2026年4月9日 12:03

Helm 与 Harbor — 包管理与私有镜像仓库

Helm — K8s 的"包管理器"

为什么需要 Helm?

一个应用可能需要 Deployment + Service + ConfigMap + Secret + Ingress + HPA + PDB... 十几个 YAML 文件。手动 kubectl apply 管理这些文件:

  • 版本管理困难
  • 环境差异(dev/prod)靠手动改
  • 升级/回滚要一个个文件处理

Helm 把一组相关的 K8s 资源打包为 Chart,一条命令安装/升级/回滚。

核心概念

概念 说明 类比
Chart 一组模板化的 K8s YAML npm 包 / apt 包
Release Chart 的一次安装实例 运行中的应用
Repository Chart 仓库 npm registry
values.yaml 配置参数 环境变量 / .env

我们用 Helm 装了什么

helm repo list    # 查看已添加的仓库
helm list -A      # 查看所有 Release
Release Chart Namespace 说明
nfs-provisioner nfs-subdir-external-provisioner kube-system NFS 动态存储
monitoring kube-prometheus-stack monitoring Prometheus + Grafana
loki loki-stack monitoring 日志收集
ingress-nginx ingress-nginx ingress-nginx Ingress 控制器
harbor harbor harbor 镜像仓库
gitea gitea gitea 自托管 Git

Helm 常用操作

# 搜索 Chart
helm search repo prometheus

# 查看 Chart 的可配置项
helm show values prometheus-community/kube-prometheus-stack | head -50

# 安装(自定义配置)
helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set grafana.service.type=NodePort

# 升级(修改配置)
helm upgrade monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set grafana.service.nodePort=30300

# 回滚
helm rollback monitoring 1    # 回到 revision 1

# 卸载
helm uninstall monitoring -n monitoring

# 模板渲染(不安装,只看生成的 YAML)
helm template monitoring prometheus-community/kube-prometheus-stack \
  --set grafana.service.type=NodePort > rendered.yaml

面试题

Q: Helm 3 和 Helm 2 的区别?

  • Helm 2 有一个集群内组件 Tiller(用 ClusterAdmin 权限运行),是安全隐患
  • Helm 3 去掉了 Tiller,直接用 kubeconfig 的权限操作
  • Release 信息存在 Secret 中(不再需要 Tiller)

Q: Helm 和 Kustomize 怎么选?

  • Helm:适合复杂应用(多组件、需要条件逻辑、需要打包分发)
  • Kustomize:适合简单的环境差异(base + overlays)
  • 可以结合使用:Helm 渲染 → Kustomize 做环境覆盖

Harbor — 企业级镜像仓库

为什么需要私有镜像仓库?

  1. 安全 — 不把镜像放在公网,避免供应链攻击
  2. 速度 — 从内网拉取镜像比 Docker Hub 快得多
  3. 合规 — 镜像扫描(Trivy)、签名验证、准入策略
  4. 可控 — 不依赖外部服务的可用性

Harbor 架构

用户/CI → Harbor Nginx (入口)
              │
         ┌────┴────┐
         │ Harbor   │ ← Web UI + API
         │ Core     │
         └────┬────┘
              │
    ┌─────────┼──────────┐
    │         │          │
Registry  Database    Redis    Trivy
(存镜像)  (元数据)  (缓存/队列) (漏洞扫描)

安装

helm install harbor harbor/harbor \
  --namespace harbor \
  --set expose.type=nodePort \
  --set expose.nodePort.ports.http.nodePort=30180 \
  --set expose.tls.enabled=false \
  --set externalURL=http://107.148.176.193:30180 \
  --set persistence.persistentVolumeClaim.registry.storageClass=nfs-dynamic \
  --set persistence.persistentVolumeClaim.registry.size=20Gi \
  --set harborAdminPassword=Harbor12345

访问信息

项目
URL http://107.148.176.193:30180
用户名 admin
密码 Harbor12345

使用 Harbor 推送/拉取镜像

# 1. 配置 containerd 信任 HTTP 仓库(每个节点)
# 在 /etc/containerd/certs.d/107.148.176.193:30180/hosts.toml 中配置

# 2. 登录
docker login 107.148.176.193:30180

# 3. 给镜像打 tag
docker tag nginx:1.25 107.148.176.193:30180/library/nginx:1.25

# 4. 推送
docker push 107.148.176.193:30180/library/nginx:1.25

# 5. 在 K8s 中使用
# image: 107.148.176.193:30180/library/nginx:1.25

Harbor 的核心功能

功能 说明
镜像管理 推送、拉取、删除、Tag 管理
漏洞扫描 Trivy 自动扫描镜像中的 CVE
复制策略 从 Docker Hub 同步镜像到 Harbor
RBAC 项目级别的用户权限管理
审计日志 谁推了什么镜像、谁拉了什么
Garbage Collection 清理未引用的 layer,释放存储

面试题

Q: 生产环境的镜像管理流程是什么?

开发 push 代码 → CI 构建镜像 → 推送到 Harbor (dev 项目)
                                    │
                              Trivy 自动扫描
                                    │
                              漏洞检查通过?
                                    │
                              ← 推广到 prod 项目
                                    │
                              ArgoCD 检测到新镜像
                                    │
                              自动/手动部署到 prod

02-argocd-gitops.md