HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 概览

    • K8s 实战学习实验室
    • 服务访问清单
    • K8s-Lab 学习总纲、仓库评估与专家路线图
  • 课程正文

    • 环境验证与第一课:认识你的真实集群
    • 第二课:kubectl apply 之后,到底发生了什么
    • 第三课:调度器如何选节点,为什么 Pod 会 Pending
    • 第四课:Kubernetes 网络、协议分层、VXLAN/IPIP/WireGuard 原理与排障
    • 第五课:NetworkPolicy、零信任网络与流量边界
    • 第六课:身份、认证、授权、准入与 ServiceAccount / RBAC 原理
    • 第七课:ConfigMap 与 Secret 注入模型、更新机制与安全边界
    • 第八课:存储持久化、PV / PVC / StorageClass 与 NFS 原理
    • 第九课:StatefulSet、Headless Service、稳定身份与存储原理
    • 第十课:探针、滚动更新、优雅终止与 PDB 原理
    • 第十一课:requests / limits、QoS、OOM 与驱逐原理
    • 第十二课:HPA、自动扩缩容、指标链路与副本伸缩原理
    • 第十三课:Service、EndpointSlice、kube-proxy、CoreDNS 与服务发现原理
    • 第十四课:Ingress-nginx、反向代理、Host / Path、NodePort 与北南向流量原理
    • 第十五课:HTTPS、TLS、SNI、证书信任与 Ingress 终止原理
    • 第十六课:cert-manager、Ingress 自动签发、证书生命周期与 ACME 工作流原理
    • 第十七课:ACME、Let's Encrypt、HTTP-01 / DNS-01、Orders / Challenges 与生产限制原理
    • 第十八课:大模型全生态,从数据到训练到部署到治理原理
    • 第十九课:大模型数据集、清洗、标注、切分、版本管理与质量治理原理
    • 第二十课:大模型训练、SFT、LoRA、Checkpoint、Adapter 与模型产物原理
    • 第二十一课:大模型推理、量化、KV Cache、vLLM、吞吐/延迟与部署发布链路原理
  • 实验操作记录

    • 本次仓库审查操作记录与命令原理
    • 本轮操作记录:环境验证、集群基线盘点与故障样本采集
    • 本轮操作记录:kubectl apply 主链路实验
    • 本轮操作记录:调度实验与 Pending 排查
    • 本轮操作记录:Kubernetes 网络原理、协议对比与调试实验
    • 本轮操作记录:NetworkPolicy 与零信任网络实验
    • 本轮操作记录:身份、认证、授权、准入实验
    • 本轮操作记录:ConfigMap 与 Secret 注入、更新与安全边界实验
    • 本轮操作记录:存储持久化、PV / PVC / StorageClass 与 NFS 实验
    • 本轮操作记录:StatefulSet、Headless Service 与稳定身份实验
    • 本轮操作记录:探针、滚动更新、优雅终止与 PDB 实验
    • 本轮操作记录:资源模型、QoS、OOM 与 CPU 节流实验
    • 本轮操作记录:HPA 自动扩缩容实验
    • 本轮操作记录:Service、EndpointSlice、CoreDNS 与服务发现排障实验
    • 本轮操作记录:Ingress-nginx、NodePort 与北南向流量实验
    • 本轮操作记录:HTTPS、TLS、自签证书与 Ingress 实验
    • 本轮操作记录:cert-manager 安装、CA 签发与 Ingress 自动证书实验
    • 本轮操作记录:ACME staging、HTTP-01 失败样本与排障实验
    • 本轮操作记录:大模型全生态与基础原理科普文撰写
    • 本轮操作记录:大模型数据集样本与治理文档编写
    • 本轮操作记录:大模型训练与模型产物概念文撰写
    • 本轮操作记录:大模型推理与服务发布概念文撰写

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

Helm — K8s 的"包管理器"

为什么需要 Helm?

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

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

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

核心概念

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

我们用 Helm 装了什么

helm repo list    # 查看已添加的仓库
helm list -A      # 查看所有 Release
ReleaseChartNamespace说明
nfs-provisionernfs-subdir-external-provisionerkube-systemNFS 动态存储
monitoringkube-prometheus-stackmonitoringPrometheus + Grafana
lokiloki-stackmonitoring日志收集
ingress-nginxingress-nginxingress-nginxIngress 控制器
harborharborharbor镜像仓库
giteagiteagitea自托管 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

访问信息

项目值
URLhttp://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