运维

运维相关知识和内容

Helm Charts高级用法:模板开发与仓库管理

一、Helm概述

1.1 为什么用Helm

Helm是Kubernetes的包管理器:
- 打包:将应用及相关资源打包
- 版本管理:支持版本升级和回滚
- 配置管理:模板化配置
- 共享分发:Chart仓库分享

1.2 Chart结构

mychart/
├── Chart.yaml          # Chart元数据
├── values.yaml         # 默认配置
├── charts/             # 依赖的Charts
└── templates/          # K8s资源模板
    ├── deployment.yaml
    ├── service.yaml
    └── _helpers.tpl    # 辅助模板

二、模板开发

2.1 values.yaml

replicaCount: 2
image:
  repository: myregistry/myapp
  tag: "latest"
service:
  type: ClusterIP
  port: 8080
resources:
  limits:
    cpu: 100m
    memory: 128Mi

2.2 模板语法

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

三、流程控制

3.1 条件渲染

{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
...
{{- end }}

3.2 循环渲染

{{- range $service := .Values.services }}
apiVersion: v1
kind: Service
metadata:
  name: {{ $service.name }}
...
{{- end }}

四、依赖管理

4.1 Chart依赖

dependencies:
  - name: postgresql
    version: "12.x.x"
    repository: "https://charts.bitnami.com"
helm dependency update

五、总结

Helm Chart开发要点:
1. 模板化:善用helpers和函数
2. 配置校验:values.schema.json
3. 依赖管理:版本锁定
4. 测试:CI/CD集成测试