← 返回文章列表
Helm 快速入门与进阶指南
Helm K8s 包管理器完整指南,包含 Ingress、RBAC、Probe 等核心概念
4 分钟阅读
字号
Helm 快速入门与进阶指南
学习日期:2026-03-27
一、Helm 是什么
Helm = K8s 的包管理器,类似于 apt/yum/homebrew。
解决的问题: K8s 应用由多个 YAML 资源文件组成(Deployment/Service/Ingress/ConfigMap...),手动管理繁琐。Helm 把这些打包成一个 Chart,安装/升级/回滚一条命令搞定。
二、核心概念
| 概念 | 作用 |
|---|---|
| Chart | Helm 包,类似 RPM/DEB |
| Repository | Chart 仓库,类似 apt 源 |
| Release | Chart 安装后的实例,可以安装多次 |
| values.yaml | 默认配置参数 |
| template | Go 模板,生成 YAML |
| Ingress | HTTP/HTTPS 入口 |
| IngressClass | 入口控制器名称 |
| ServiceAccount | Pod 的身份 |
| RBAC | 权限控制模型 |
| Probe | 健康检查探针 |
三、Ingress 详解
访问范围对比
| 对象 | 访问范围 |
|---|---|
| ClusterIP | 集群内部 |
| NodePort | 集群外部(端口 30000-32767) |
| LoadBalancer | 云厂商 ELB/ALB 分配公网 IP |
| Ingress | HTTP/HTTPS 基于域名/路径的路由 |
Ingress vs Ingress Controller
| 概念 | 区别 |
|---|---|
| Ingress | K8s 标准资源对象,声明式路由规则 |
| Ingress Controller | 实际处理流量的组件(Nginx/Traefik/ALB) |
Ingress = 规则,Ingress Controller = 执行者。
IngressClass 声明
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx完整 Ingress YAML 示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.com
secretName: my-tls
rules:
- host: app.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 8080
- path: /web
pathType: Prefix
backend:
service:
name: web-svc
port:
number: 80常用 Annotations(Ingress Controller 指令)
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # URL 重写
nginx.ingress.kubernetes.io/proxy-body-size: "50m" # 上传大小
nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制 HTTPS四、ServiceAccount 与 RBAC
User Account vs ServiceAccount
| 类型 | 作用范围 |
|---|---|
| User Account | 真实用户(管理员) |
| ServiceAccount | Pod/应用的身份 |
RBAC 四要素
| 要素 | 作用 |
|---|---|
| Role/ClusterRole | 定义权限(能做什么) |
| RoleBinding/ClusterRoleBinding | 把角色绑定到主体 |
| Subject | 被授权的对象(User/ServiceAccount) |
| Verbs | 操作动作(get/list/create/delete...) |
RoleBinding 示例
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-binding
namespace: default
subjects:
- kind: ServiceAccount
name: my-app
roleRef:
kind: Role
name: my-role内置 ClusterRole
| 角色 | 权限 |
|---|---|
| admin | namespace 内所有权限 |
| edit | namespace 内读写(不能改 RBAC) |
| view | namespace 内只读 |
| cluster-admin | 整个集群管理员(危险) |
五、Probe 健康检查探针
三种探针
| 探针 | 作用 | 失败动作 |
|---|---|---|
| startupProbe | 容器启动成功 | kill 后重建 |
| readinessProbe | 就绪接收流量 | Service 摘除 |
| livenessProbe | 存活状态 | kubelet 重启容器 |
执行顺序
容器启动 → startupProbe(成功后 livenessProbe 才生效)
→ readinessProbe(持续检查就绪)
→ livenessProbe(持续检查存活)
容器终止 → preStop 钩子 → 等待优雅终止期 → SIGTERM → 进程退出Probe 配置示例
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
readinessProbe:
tcpSocket:
port: 8080
periodSeconds: 5
startupProbe:
exec:
command: [cat, /tmp/healthy]
failureThreshold: 30
periodSeconds: 10六、Helm 命令速查
# 添加仓库
helm repo add bitnami https://charts.bitnami.com
helm repo add aliyun https://mirrors.aliyun.com/helm-charts
# 搜索/安装/升级
helm search repo nginx
helm install my-nginx bitnami/nginx
helm upgrade my-nginx bitnami/nginx --set service.type=NodePort
# 回滚/卸载
helm rollback my-nginx 1
helm uninstall my-nginx
# 查看/创建 Chart
helm list
helm create my-chart
helm package my-chart
# 本地测试
helm install ./my-chart --dry-run --debug分享