Kubernetes Helm Charts å®å šã¬ã€ã 2026ïŒããã±ãŒãžã³ã°ããããã€ã¡ã³ãã颿¥å¯Ÿç
Helm 3ã䜿çšããKubernetesã¢ããªã±ãŒã·ã§ã³ã®ããã±ãŒãžã³ã°ãšãããã€ã¡ã³ãææ³ã解説ããã£ãŒãæ§é ããã³ãã¬ãŒãäœæãäŸåé¢ä¿ç®¡çããããŠæè¡é¢æ¥ã§é »åºãã質åãšåçäŸãç¶²çŸ çã«ç޹ä»ããŸãã

Kubernetes Helm Chartsã¯ããã¹ãŠã®KubernetesãªãœãŒã¹ãåäžã®ããŒãžã§ã³ç®¡çãããã¢ãŒãã£ãã¡ã¯ãã«ããã±ãŒãžåããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ããç°¡çŽ åããŸããçŸåšã®å®å®çã§ããHelm 3ã¯ãTillerã®å¿ èŠæ§ãæé€ããOCIã¬ãžã¹ããªã®ãµããŒããå°å ¥ããããšã§ããã£ãŒãã®é åžãããå®å šãã€æšæºåããããã®ã«ããŠããŸããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ããã£ãŒãã®äœæããã³ãã¬ãŒãåããããã€ã¡ã³ãæŠç¥ããããŠæ¡çšããŒã ããæãé »ç¹ã«è³ªåããã颿¥ã®ãã€ã³ãã«ã€ããŠè§£èª¬ããŸãã
Helmãã£ãŒãã«ã¯ãChart.yamlïŒã¡ã¿ããŒã¿ïŒãvalues.yamlïŒããã©ã«ãå€ïŒãããã³Kubernetesãããã§ã¹ããå«ãtemplates/ãã£ã¬ã¯ããªãå«ãŸããŸããhelm installã³ãã³ãã¯ãã³ãã¬ãŒããå€ã§ã¬ã³ããªã³ã°ããã¯ã©ã¹ã¿ãŒã«é©çšããŸãã
Helmãã£ãŒãã®æ§é ãšã³ã³ããŒãã³ããçè§£ãã
Helmãã£ãŒãã¯ãäºåå®çŸ©ãããæ§é ãæã€ãã£ã¬ã¯ããªã§ãããã£ãŒãåããã£ã¬ã¯ããªåãšãªããåãã¡ã€ã«ã¯ããã±ãŒãžã³ã°ãšãããã€ã¡ã³ãããã»ã¹ã«ãããŠç¹å®ã®åœ¹å²ãæãããŸãã
# Chart.yaml
apiVersion: v2
name: my-application
description: A production-ready web application
type: application
version: 1.0.0
appVersion: "2.1.0"
dependencies:
- name: postgresql
version: "15.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabledapiVersion: v2ã¯Helm 3ãšã®äºææ§ã瀺ããŸããversionãã£ãŒã«ãã¯ãã£ãŒãã®å€æŽã远跡ããappVersionã¯ãããã€ãããã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ãåæ ããŸããäŸåé¢ä¿ã¯ããã®ãã£ãŒããå¿
èŠãšããä»ã®ãã£ãŒãã宣èšãããªãã·ã§ã³ã§æå¹åã»ç¡å¹åã®æ¡ä»¶ãèšå®ã§ããŸãã
# values.yaml
replicaCount: 3
image:
repository: myregistry.io/app
tag: "2.1.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8080
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
postgresql:
enabled: true
auth:
database: appdbvalues.yamlã¯ãã€ã³ã¹ããŒã«æã«ãŠãŒã¶ãŒãäžæžãã§ããèšå®ã®ããã©ã«ãå€ãå®çŸ©ããŸããæå³ã®ããããŒã®äžã«å€ããã¹ãããããšã§ãèšå®ãæŽçãããèªå·±ææžåãããŸãã
Helmãã³ãã¬ãŒãã«ããKubernetesãããã€ã¡ã³ãã®äœæ
Helmãã³ãã¬ãŒãã¯ãGoãã³ãã¬ãŒããšSprig颿°ã䜿çšããŠãKubernetesãããã§ã¹ããåçã«çæããŸãã{{ .Values }}ãªããžã§ã¯ãã¯values.yamlã®å
容ãžã®ã¢ã¯ã»ã¹ãæäŸãã{{ .Release }}ã«ã¯ãããã€ã¡ã³ãã®ã¡ã¿ããŒã¿ãå«ãŸããŸãã
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-application.fullname" . }}
labels:
{{- include "my-application.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "my-application.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "my-application.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
resources:
{{- toYaml .Values.resources | nindent 12 }}nindent颿°ã¯æ¹è¡ãšã€ã³ãã³ãã远å ããYAMLçæã«ãããŠéèŠãªåœ¹å²ãæãããŸãã_helpers.tplã§å®çŸ©ãããååä»ããã³ãã¬ãŒããšincludeã䜿çšããããšã§ããã³ãã¬ãŒããDRYã«ä¿ã¡ãä¿å®æ§ãé«ããŸãã
# templates/_helpers.tpl
{{- define "my-application.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 "my-application.labels" -}}
helm.sh/chart: {{ include "my-application.chart" . }}
app.kubernetes.io/name: {{ include "my-application.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}ãã«ããŒãã³ãã¬ãŒãã¯ããã¹ãŠã®ãªãœãŒã¹ã«ããã£ãŠåœåèŠåãšã©ãã«ãæšæºåããKubernetesã®æšå¥šã©ãã«ãšã®äžè²«æ§ã確ä¿ããŸãã
Helmãã£ãŒãã®äŸåé¢ä¿ãšãµããã£ãŒã
è€éãªã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å ŽåãããŒã¿ããŒã¹ããã£ãã·ã¥ããŸãã¯ã¡ãã»ãŒãžãã¥ãŒã«äŸåããŸããHelmã®äŸåé¢ä¿ã«ããããããããµããã£ãŒããšããŠåã蟌ã¿ãã€ã³ã¹ããŒã«äžã«èªåçã«ç®¡çããããšãã§ããŸãã
# ããã±ãŒãžã³ã°åã«äŸåé¢ä¿ãæŽæ°
helm dependency update ./my-application
# äŸåé¢ä¿ããã«ãïŒcharts/ãã£ã¬ã¯ããªãäœæïŒ
helm dependency build ./my-applicationhelm dependency updateã³ãã³ãã¯äŸåé¢ä¿ãcharts/ãã£ã¬ã¯ããªã«ããŠã³ããŒãããŸããæ¡ä»¶ä»ãäŸåé¢ä¿ã¯ãå€ã䜿çšããŠæå¹åãåãæ¿ããŸãïŒ
# values.yaml
postgresql:
enabled: true
redis:
enabled: false# Chart.yaml
dependencies:
- name: postgresql
version: "15.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
- name: redis
version: "19.x"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabledãã®ãã¿ãŒã³ã«ãããæ¬çªç°å¢ã§ã¯ãããŒãžããµãŒãã¹ã䜿çšããéçºç°å¢ã§ã¯ã¯ã©ã¹ã¿å ããŒã¿ããŒã¹ã䜿çšãããããªãç°å¢åºæã®èšå®ãå¯èœã«ãªããŸãã
Helm 3.8以éã¯ãDocker HubãGitHub Container RegistryãAWS ECRãªã©ã®OCIæºæ ã®ã¬ãžã¹ããªãžã®ãã£ãŒãä¿åããµããŒãããŠããŸããhelm push my-app-1.0.0.tgz oci://registry.example.com/chartsã§ãã£ãŒããããã·ã¥ã§ããŸãã
ãªãªãŒã¹ç®¡çã«ããHelmãã£ãŒãã®ãããã€
Helmã¯ãããã€ã¡ã³ãããªãªãŒã¹ãšããŠè¿œè·¡ããããŒãžã§ã³ç®¡çãããããŒã«ããã¯ãšã¢ããã°ã¬ãŒããå¯èœã«ããŸããåãªãªãŒã¹ã¯ç£æ»ãšåŸ©æ§ã®ããã®å±¥æŽãç¶æããŸãã
# ã«ã¹ã¿ã å€ã§ãã£ãŒããã€ã³ã¹ããŒã«
helm install my-release ./my-application \
--namespace production \
--create-namespace \
--values production-values.yaml \
--set image.tag=2.1.1
# æ¢åã®ãªãªãŒã¹ãã¢ããã°ã¬ãŒã
helm upgrade my-release ./my-application \
--namespace production \
--values production-values.yaml \
--set image.tag=2.2.0 \
--atomic \
--timeout 5m--atomicãã©ã°ã¯ãã¢ããã°ã¬ãŒãã倱æããå Žåã«èªåçã«ããŒã«ããã¯ããããšãä¿èšŒããŸãã--timeoutãã©ã°ã¯ãHelmããªãœãŒã¹ã®æºåå®äºãåŸ
æ©ããæéãèšå®ããŸãã
# ãªãªãŒã¹å±¥æŽã衚瀺
helm history my-release -n production
# 以åã®ãªããžã§ã³ã«ããŒã«ããã¯
helm rollback my-release 2 -n production
# ãªãªãŒã¹ãã¢ã³ã€ã³ã¹ããŒã«
helm uninstall my-release -n production --keep-history--keep-historyãã©ã°ã¯ãã¢ã³ã€ã³ã¹ããŒã«åŸããªãªãŒã¹ã¬ã³ãŒããä¿æããŸããããã¯ã³ã³ãã©ã€ã¢ã³ã¹ãšãããã°ã«åœ¹ç«ã¡ãŸãã
DevOpsã®é¢æ¥å¯Ÿçã¯ã§ããŠããŸããïŒ
ã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã¿ãŒãflashcardsãæè¡ãã¹ãã§ç·Žç¿ããŸãããã
Helmãã£ãŒãã®ãã¹ããšæ€èšŒæŠç¥
ãããã€åã«Helmãã£ãŒãããã¹ãããããšã§ããã³ãã¬ãŒããšã©ãŒãèšå®ã®åé¡ãæ©æã«çºèŠã§ããŸããHelmã«ã¯ãªã³ãã£ã³ã°ãšãã©ã€ã©ã³ãã¹ãã®ããã®çµã¿èŸŒã¿ããŒã«ãçšæãããŠããŸãã
# ãã£ãŒãã®ãšã©ãŒãšãã¹ããã©ã¯ãã£ã¹ããªã³ã
helm lint ./my-application
# ãããã€ããã«ãã³ãã¬ãŒããããŒã«ã«ã§ã¬ã³ããªã³ã°
helm template my-release ./my-application \
--values production-values.yaml \
> rendered-manifests.yaml
# ã¯ã©ã¹ã¿ãŒAPIã«å¯ŸããŠãã©ã€ã©ã³
helm install my-release ./my-application \
--dry-run \
--debug \
--namespace productionhelm templateã³ãã³ãã¯ãããã§ã¹ããããŒã«ã«ã§ã¬ã³ããªã³ã°ããçæãããYAMLãæ€èšŒããCIãã€ãã©ã€ã³ã«äŸ¿å©ã§ãã--dry-runãã©ã°ã¯ãããã§ã¹ããKubernetes APIãµãŒããŒã«éä¿¡ããŠæ€èšŒããŸããããªãœãŒã¹ã¯äœæããŸããã
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "my-application.fullname" . }}-test"
labels:
{{- include "my-application.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: curl
image: curlimages/curl:8.7.1
command: ['curl']
args: ['{{ include "my-application.fullname" . }}:{{ .Values.service.port }}/health']
restartPolicy: Neverhelm.sh/hook: testãæã€Helmããã¯ã¯ãhelm test my-releaseã®åŸã«å®è¡ãããã€ã³ã¹ããŒã«åŸã®ãããã€ã¡ã³ããæ£ããåäœããããšãæ€èšŒããŸãã
é«åºŠãªHelmãã³ãã¬ãŒãæè¡
æ¬çªãã£ãŒãã§ã¯ãæ¡ä»¶ä»ãããžãã¯ãã«ãŒããããã³ããŒã¿å€æãå¿ èŠã«ãªããŸããSprig颿°ã¯ãæååæäœããšã³ã³ãŒãã£ã³ã°ãããã³ãããŒå¶åŸ¡ã®ããã®ãŠãŒãã£ãªãã£ã§Goãã³ãã¬ãŒããæ¡åŒµããŸãã
# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "my-application.fullname" . }}-config
data:
{{- range $key, $value := .Values.config }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- if .Values.features.enabled }}
FEATURE_FLAGS: {{ .Values.features.flags | join "," | quote }}
{{- end }}# templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: {{ include "my-application.fullname" . }}-secrets
type: Opaque
data:
{{- range $key, $value := .Values.secrets }}
{{ $key }}: {{ $value | b64enc }}
{{- end }}range颿°ã¯ããããšãªã¹ããå埩åŠçããŸããb64enc颿°ã¯Kubernetesã·ãŒã¯ã¬ããçšã«å€ãbase64ãšã³ã³ãŒãããŸãããã€ãæŒç®åã¯ããŒã¿å€æã®ããã«é¢æ°ããã§ãŒã³ããŸãã
values.yamlã«ã·ãŒã¯ã¬ãããä¿åãããšãããŒãžã§ã³ç®¡çã§å ¬éãããŠããŸããŸããæ¬çªãããã€ã¡ã³ãã§ã¯ãHashiCorp VaultãExternal Secrets OperatorãšAWS Secrets ManagerããŸãã¯SOPSã§æå·åãããvaluesãã¡ã€ã«ãªã©ã®å€éšã·ãŒã¯ã¬ãããããŒãžã£ãŒã䜿çšããŠãã ããã
Helmãã£ãŒãã®é¢æ¥è³ªåãšåç
æè¡é¢æ¥ã§ã¯ãæŠå¿µçããã³å®è·µçãªè³ªåãéããŠHelmã®ç¥èãé »ç¹ã«ãã¹ããããŸãã以äžã«æãé »ç¹ã«è³ªåããããããã¯ã«ã€ããŠè§£èª¬ããŸãã
helm installãšhelm upgrade --installã®éãã¯äœã§ããïŒ
helm installã¯æ°ãããªãªãŒã¹ãäœæãããªãªãŒã¹ããã§ã«ååšããå Žåã¯å€±æããŸããhelm upgrade --installïŒ--installãã©ã°ä»ãïŒã¯ããªãªãŒã¹ãååšããªãå Žåã¯æ°ãããªãªãŒã¹ãäœæããååšããå Žåã¯ã¢ããã°ã¬ãŒãããŸããCI/CDãã€ãã©ã€ã³ã§ã¯éåžžãåªçãªãããã€ã¡ã³ãã®ããã«helm upgrade --installã䜿çšããŸãã
Helmãã£ãŒãã«ã»ã³ã·ãã£ããªããŒã¿ãæž¡ãã«ã¯ã©ãããã°ããã§ããïŒ
3ã€ã®ã¢ãããŒãããããŸãïŒå€éšã·ãŒã¯ã¬ãããããŒãžã£ãŒïŒVaultãAWS Secrets ManagerïŒãæå·åãããvaluesãã¡ã€ã«ïŒSOPSãsealed-secretsïŒããŸãã¯Helmå€ã§äœæããããã³ãã¬ãŒãã§åç §ãããKubernetesã·ãŒã¯ã¬ããã§ããããŒãžã§ã³ç®¡çã«ã³ãããããããã¬ãŒã³ããã¹ãã®values.yamlãã¡ã€ã«ã«ã·ãŒã¯ã¬ãããä¿åããããšã¯é¿ããŠãã ããã
Helmããã¯ãšã¯äœã§ããïŒãã€äœ¿çšãã¹ãã§ããïŒ
ããã¯ã¯ãªãªãŒã¹ã©ã€ããµã€ã¯ã«ã®ç¹å®ã®ãã€ã³ãã§å®è¡ãããŸãïŒpre-installãpost-installãpre-upgradeãpost-upgradeãpre-deleteãpost-deleteãpre-rollbackãpost-rollbackãããã³testãäžè¬çãªäœ¿çšäŸã«ã¯ãã¢ããã°ã¬ãŒãåã®ããŒã¿ããŒã¹ãã€ã°ã¬ãŒã·ã§ã³ããããã€ã¡ã³ãåŸã®éç¥éä¿¡ããŸãã¯çµ±åãã¹ãã®å®è¡ãå«ãŸããŸãã
ãã£ãŒãã®ããŒãžã§ãã³ã°ã¯ã©ã®ããã«åŠçããŸããïŒ
Chart.yamlã®versionãã£ãŒã«ãã¯ãã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã䜿çšããŠãã£ãŒãã®å€æŽã远跡ããŸããappVersionãã£ãŒã«ãã¯ããããã€ãããã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã远跡ããŸããã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ãåããŸãŸã§ãããã£ãŒãã®å€æŽãããã°versionãã€ã³ã¯ãªã¡ã³ãããŠãã ããã
.helmignoreã®ç®çã¯äœã§ããïŒ
.gitignoreãšåæ§ã«ã.helmignoreã¯ãã£ãŒãããã±ãŒãžã³ã°ãããã¡ã€ã«ãé€å€ããŸããäžè¬çãªãšã³ããªã«ã¯ã*.tgzïŒä»¥åã®ãã«ãã®ããã±ãŒãžã³ã°ãåé¿ïŒã.git/ãã©ã³ã¿ã€ã ã§äžèŠãª*.mdããã¥ã¡ã³ããããã³CIèšå®ãã¡ã€ã«ãå«ãŸããŸãã
Kubernetesã®é¢æ¥å¯Ÿçãããã«é²ãããå Žåã¯ãSharpSkillã®Kubernetesåºç€ããã³Kuberneteså¿çšã®è³ªåã¢ãžã¥ãŒã«ãã芧ãã ããã
ãŸãšã
Helmãã£ãŒãã䜿çšããéã®å®è·µçãªãã€ã³ãã¯ä»¥äžã®éãã§ãïŒ
- Chart.yamlã¡ã¿ããŒã¿ãvalues.yamlããã©ã«ããããã³Kubernetesãããã§ã¹ããå«ãtemplatesãã£ã¬ã¯ããªãæç¢ºã«åé¢ããŠãã£ãŒããæ§æãã
- _helpers.tplã®ãã«ããŒãã³ãã¬ãŒãã䜿çšããŠããã¹ãŠã®ãªãœãŒã¹ã«ããã£ãŠåœåãšã©ãã«ãæšæºåãã
- ç°å¢åºæã®èšå®ã®ããã«ãChart.yamlã§æ¡ä»¶ä»ãæå¹åã䜿çšããŠäŸåé¢ä¿ã管çãã
- æ¬çªç°å¢ã«ãããã€ããåã«ã
helm lintãhelm templateãããã³helm install --dry-runã§ãã£ãŒãããã¹ããã - æå³ã®ããååã§ãªãªãŒã¹ã远跡ããã¢ããã°ã¬ãŒã倱ææã®èªåããŒã«ããã¯ã®ããã«
--atomicãã©ã°ã䜿çšãã - ãã¬ãŒã³ããã¹ãã®valuesãã¡ã€ã«ã§ã¯ãªããå€éšãããŒãžã£ãŒã«ã·ãŒã¯ã¬ãããä¿åãã
ä»ããç·Žç¿ãå§ããŸãããïŒ
颿¥ã·ãã¥ã¬ãŒã¿ãŒãšæè¡ãã¹ãã§ç¥èããã¹ãããŸãããã
ã¿ã°
å ±æ
é¢é£èšäº

ArgoCD GitOps å®å šã¬ã€ã 2026幎çïŒKubernetes ç¶ç¶çãããã€ã¡ã³ããšæè¡é¢æ¥å¯Ÿç
ArgoCD 3.4 ãš GitOps ã«ãã Kubernetes ç¶ç¶çãããã€ã¡ã³ãã解説ãApplication CRDãSync Waveããã«ãã¯ã©ã¹ã¿ãŒç®¡çãFlux æ¯èŒã颿¥è³ªåãç¶²çŸ ã

Kubernetes颿¥å¯ŸçïŒPodãServiceãDeploymentã®ä»çµã¿ãšå®è·µçãªè³ªå解説
Kubernetesã®3å€§æ§æèŠçŽ ã§ããPodãServiceãDeploymentãæ¬çªã¬ãã«ã®YAMLãããã§ã¹ããšãšãã«è§£èª¬ããããã¯ãŒãã³ã°ã®å éšåäœãã¹ã±ãŒãªã³ã°æŠç¥ã颿¥é »åºã®è³ªåãšåçãç¶²çŸ ããŸãã

Kubernetes: æåã®ã¢ããªã±ãŒã·ã§ã³ããããã€ãã
Kubernetesäžã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããããã®å®è·µçãªã¬ã€ãã§ããminikubeã®ã€ã³ã¹ããŒã«ãããDeploymentãServiceãConfigMapãŸã§å ·äœäŸãšãšãã«è§£èª¬ããŸãã