Helm
Public Agent Skills for Terminal and Kubernetes
npx -y skills add chaterm/terminal-skills --skill helmAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Helm 包管理
SKILL.md
6.6 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
Helm 包管理
概述
Helm Chart 开发、仓库管理、版本升级等技能。
基础命令
仓库管理
# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
# 更新仓库
helm repo update
# 列出仓库
helm repo list
# 搜索 Chart
helm search repo nginx
helm search hub nginx # 搜索 Artifact Hub
# 删除仓库
helm repo remove bitnami
安装与卸载
# 安装 Chart
helm install my-release bitnami/nginx
helm install my-release bitnami/nginx -n namespace --create-namespace
# 指定 values
helm install my-release bitnami/nginx -f values.yaml
helm install my-release bitnami/nginx --set replicaCount=3
# 模拟安装(不实际执行)
helm install my-release bitnami/nginx --dry-run
# 生成模板
helm template my-release bitnami/nginx
# 卸载
helm uninstall my-release
helm uninstall my-release -n namespace
查看与管理
# 列出已安装的 Release
helm list
helm list -A # 所有命名空间
helm list -n namespace
# 查看 Release 状态
helm status my-release
# 查看 Release 历史
helm history my-release
# 获取 Release 的 values
helm get values my-release
helm get values my-release --all # 包含默认值
# 获取 Release 的 manifest
helm get manifest my-release
# 获取 Release 的 notes
helm get notes my-release
升级与回滚
# 升级 Release
helm upgrade my-release bitnami/nginx
helm upgrade my-release bitnami/nginx -f values.yaml
helm upgrade my-release bitnami/nginx --set replicaCount=5
# 安装或升级
helm upgrade --install my-release bitnami/nginx
# 回滚
helm rollback my-release # 回滚到上一版本
helm rollback my-release 2 # 回滚到指定版本
# 查看历史
helm history my-release
Chart 开发
创建 Chart
# 创建新 Chart
helm create mychart
# Chart 目录结构
mychart/
├── Chart.yaml # Chart 元数据
├── values.yaml # 默认配置值
├── charts/ # 依赖 Chart
├── templates/ # 模板文件
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # 模板助手
│ ├── NOTES.txt # 安装说明
│ └── tests/
└── .helmignore
Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for my application
type: application
version: 0.1.0
appVersion: "1.0.0"
keywords:
- app
- web
maintainers:
- name: Your Name
email: [email protected]
dependencies:
- name: postgresql
version: "12.x.x"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
values.yaml
replicaCount: 1
image:
repository: nginx
tag: "latest"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: false
className: nginx
hosts:
- host: example.com
paths:
- path: /
pathType: Prefix
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
postgresql:
enabled: true
模板语法
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "mychart.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "mychart.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 80
{{- if .Values.resources }}
resources:
{{- toYaml .Values.resources | nindent 10 }}
{{- end }}
模板助手
# templates/_helpers.tpl
{{- define "mychart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- define "mychart.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- define "mychart.labels" -}}
helm.sh/chart: {{ include "mychart.chart" . }}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Chart 打包与发布
# 验证 Chart
helm lint mychart/
# 打包 Chart
helm package mychart/
# 生成索引
helm repo index . --url https://example.com/charts
# 推送到 OCI 仓库
helm push mychart-0.1.0.tgz oci://registry.example.com/charts
依赖管理
# 更新依赖
helm dependency update mychart/
# 构建依赖
helm dependency build mychart/
# 列出依赖
helm dependency list mychart/
常见场景
场景 1:多环境部署
# 不同环境的 values 文件
helm upgrade --install my-release ./mychart \
-f values.yaml \
-f values-prod.yaml \
-n production
场景 2:条件渲染
# templates/ingress.yaml
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "mychart.fullname" . }}
spec:
# ...
{{- end }}
场景 3:循环渲染
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend:
service:
name: {{ include "mychart.fullname" $ }}
port:
number: {{ $.Values.service.port }}
{{- end }}
{{- end }}
场景 4:调试模板
# 渲染模板但不安装
helm template my-release ./mychart -f values.yaml
# 调试特定模板
helm template my-release ./mychart --show-only templates/deployment.yaml
# 使用 --debug 查看详细信息
helm install my-release ./mychart --dry-run --debug
故障排查
| 问题 | 排查方法 |
|---|---|
| 模板渲染错误 | helm template --debug |
| 安装失败 | helm status, kubectl describe |
| 升级失败 | helm history, helm rollback |
| 依赖问题 | helm dependency update |
# 查看渲染后的 manifest
helm get manifest my-release
# 查看安装 hooks
helm get hooks my-release
# 强制替换资源
helm upgrade my-release ./mychart --force
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.