← 返回文章列表

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,安装/升级/回滚一条命令搞定。

二、核心概念

概念作用
ChartHelm 包,类似 RPM/DEB
RepositoryChart 仓库,类似 apt 源
ReleaseChart 安装后的实例,可以安装多次
values.yaml默认配置参数
templateGo 模板,生成 YAML
IngressHTTP/HTTPS 入口
IngressClass入口控制器名称
ServiceAccountPod 的身份
RBAC权限控制模型
Probe健康检查探针

三、Ingress 详解

访问范围对比

对象访问范围
ClusterIP集群内部
NodePort集群外部(端口 30000-32767)
LoadBalancer云厂商 ELB/ALB 分配公网 IP
IngressHTTP/HTTPS 基于域名/路径的路由

Ingress vs Ingress Controller

概念区别
IngressK8s 标准资源对象,声明式路由规则
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真实用户(管理员)
ServiceAccountPod/应用的身份

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

角色权限
adminnamespace 内所有权限
editnamespace 内读写(不能改 RBAC)
viewnamespace 内只读
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
分享

// RELATED_POSTS

0%