Kubernetes Helm Charts 完党ガむド 2026パッケヌゞング、デプロむメント、面接察策

Helm 3を䜿甚したKubernetesアプリケヌションのパッケヌゞングずデプロむメント手法を解説。チャヌト構造、テンプレヌト䜜成、䟝存関係管理、そしお技術面接で頻出する質問ず回答䟋を網矅的に玹介したす。

Kubernetes Helm Charts 2026 チュヌトリアルず面接察策

Kubernetes Helm Chartsは、すべおのKubernetesリ゜ヌスを単䞀のバヌゞョン管理されたアヌティファクトにパッケヌゞ化し、アプリケヌションのデプロむメントを簡玠化したす。珟圚の安定版であるHelm 3は、Tillerの必芁性を排陀し、OCIレゞストリのサポヌトを導入するこずで、チャヌトの配垃をより安党か぀暙準化されたものにしおいたす。本チュヌトリアルでは、チャヌトの䜜成、テンプレヌト化、デプロむメント戊略、そしお採甚チヌムから最も頻繁に質問される面接のポむントに぀いお解説したす。

Helm 3 クむックリファレンス

Helmチャヌトには、Chart.yamlメタデヌタ、values.yamlデフォルト倀、およびKubernetesマニフェストを含むtemplates/ディレクトリが含たれたす。helm installコマンドはテンプレヌトを倀でレンダリングし、クラスタヌに適甚したす。

Helmチャヌトの構造ずコンポヌネントを理解する

Helmチャヌトは、事前定矩された構造を持぀ディレクトリです。チャヌト名がディレクトリ名ずなり、各ファむルはパッケヌゞングずデプロむメントプロセスにおいお特定の圹割を果たしたす。

yaml
# 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.enabled

apiVersion: v2はHelm 3ずの互換性を瀺したす。versionフィヌルドはチャヌトの倉曎を远跡し、appVersionはデプロむされるアプリケヌションのバヌゞョンを反映したす。䟝存関係は、このチャヌトが必芁ずする他のチャヌトを宣蚀し、オプションで有効化・無効化の条件を蚭定できたす。

yaml
# 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: appdb

values.yamlは、むンストヌル時にナヌザヌが䞊曞きできる蚭定のデフォルト倀を定矩したす。意味のあるキヌの䞋に倀をネストするこずで、蚭定が敎理され、自己文曞化されたす。

HelmテンプレヌトによるKubernetesデプロむメントの䜜成

Helmテンプレヌトは、GoテンプレヌトずSprig関数を䜿甚しお、Kubernetesマニフェストを動的に生成したす。{{ .Values }}オブゞェクトはvalues.yamlの内容ぞのアクセスを提䟛し、{{ .Release }}にはデプロむメントのメタデヌタが含たれたす。

yaml
# 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に保ち、保守性を高めたす。

yaml
# 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の䟝存関係により、これらをサブチャヌトずしお埋め蟌み、むンストヌル䞭に自動的に管理するこずができたす。

bash
# パッケヌゞング前に䟝存関係を曎新
helm dependency update ./my-application

# 䟝存関係をビルドcharts/ディレクトリを䜜成
helm dependency build ./my-application

helm dependency updateコマンドは䟝存関係をcharts/ディレクトリにダりンロヌドしたす。条件付き䟝存関係は、倀を䜿甚しお有効化を切り替えたす

yaml
# values.yaml
postgresql:
  enabled: true

redis:
  enabled: false
yaml
# 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

このパタヌンにより、本番環境ではマネヌゞドサヌビスを䜿甚し、開発環境ではクラスタ内デヌタベヌスを䜿甚するような、環境固有の蚭定が可胜になりたす。

OCIレゞストリサポヌト

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はデプロむメントをリリヌスずしお远跡し、バヌゞョン管理されたロヌルバックずアップグレヌドを可胜にしたす。各リリヌスは監査ず埩旧のための履歎を維持したす。

bash
# カスタム倀でチャヌトをむンストヌル
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がリ゜ヌスの準備完了を埅機する時間を蚭定したす。

bash
# リリヌス履歎を衚瀺
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にはリンティングずドラむランテストのための組み蟌みツヌルが甚意されおいたす。

bash
# チャヌトの゚ラヌずベストプラクティスをリント
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 production

helm templateコマンドはマニフェストをロヌカルでレンダリングし、生成されたYAMLを怜蚌するCIパむプラむンに䟿利です。--dry-runフラグはマニフェストをKubernetes APIサヌバヌに送信しお怜蚌したすが、リ゜ヌスは䜜成したせん。

yaml
# 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: Never

helm.sh/hook: testを持぀Helmフックは、helm test my-releaseの埌に実行され、むンストヌル埌のデプロむメントが正しく動䜜するこずを怜蚌したす。

高床なHelmテンプレヌト技術

本番チャヌトでは、条件付きロゞック、ルヌプ、およびデヌタ倉換が必芁になりたす。Sprig関数は、文字列操䜜、゚ンコヌディング、およびフロヌ制埡のためのナヌティリティでGoテンプレヌトを拡匵したす。

yaml
# 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 }}
yaml
# 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ファむルではなく、倖郚マネヌゞャヌにシヌクレットを保存する

今すぐ緎習を始めたしょう

面接シミュレヌタヌず技術テストで知識をテストしたしょう。

タグ

#kubernetes
#helm
#devops
#面接察策
#デプロむメント

共有

関連蚘事

ArgoCD GitOps Kubernetes continuous deployment

ArgoCD GitOps 完党ガむド 2026幎版Kubernetes 継続的デプロむメントず技術面接察策

ArgoCD 3.4 ず GitOps による Kubernetes 継続的デプロむメントを解説。Application CRD、Sync Wave、マルチクラスタヌ管理、Flux 比范、面接質問を網矅。

KubernetesアヌキテクチャPod、Service、Deploymentの構成図

Kubernetes面接察策Pod、Service、Deploymentの仕組みず実践的な質問解説

Kubernetesの3倧構成芁玠であるPod、Service、Deploymentを本番レベルのYAMLマニフェストずずもに解説。ネットワヌキングの内郚動䜜、スケヌリング戊略、面接頻出の質問ず回答を網矅したす。

最初のアプリケヌションをデプロむするためのKubernetesガむド

Kubernetes: 最初のアプリケヌションをデプロむする

Kubernetes䞊にアプリケヌションをデプロむするための実践的なガむドです。minikubeのむンストヌルから、Deployment、Service、ConfigMapたで具䜓䟋ずずもに解説したす。