web-dev-qa-db-ja.com

Kubernetesで、ポッドを新しい構成値で置き換える方法を説明します

ヘルムチャートを使用して、構成を管理する「ConfigMap」でポッドをデプロイしています。

ConfigMapを直接編集して構成ファイルを変更し、kubectl deleteを使用してポッドを削除して、新しい構成を有効にします。

kubectl delete "コマンドを実行せずに、実行中のポッドを新しい構成で置き換えるhelmを使用する簡単な方法はありますか

6
user227321

--recreate-podsは、そのデプロイで実行中のすべてのポッドを即座に終了します。つまり、サービスのダウンタイムが発生します。つまり、ポッドのローリング更新はありません。

Helmでこれに対処するための問題は未解決のままです: https://github.com/kubernetes/helm/issues/1702

代わりに、helmは構成ファイルのチェックサムを注釈にデプロイメントに追加することを提案します。これにより、デプロイメントは異なるハッシュを持ち、本質的に「新しい」ように見え、正しく更新されます。

Sha256sum関数を使用して、別のファイルが変更された場合にデプロイメントの注釈セクションが更新されるようにすることができます。

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]

ここのドキュメントから: https://helm.sh/docs/charts_tips_and_tricks/#automatically-roll-deployments-when-configmaps-or-secrets-change

あなたは走ることができます

helmアップグレード--recreate-pods

これをする。

4
Oliver

ポッドをすぐに終了する代わりにローリング更新が必要な場合は、

date: "{{ .Release.Time.Seconds }}"

spec/template/metadata/labelsに追加します。

その後、リリースには構成の変更があり、spec/stategy/typeとして設定されている場合はローリング更新がトリガーされます。

ConfigMapまたはシークレットを変更した場合は、 https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change を参照してください。

4
Dagger87

デプロイメントアノテーションを更新してもポッドが再作成されなかったため、@ Oliverソリューションは機能しませんでした。

解決策は、values.yamlファイルに基づいて動的構成マップ名を使用することです。

Values.yamlで:

configVersion: # Change those numbers to force recreating pods
  myApp: 1

設定マップで:

metadata:
  name: {{ .Release.Name }}-my-config-v{{ .Values.configVersion.myApp}}

デプロイメントでは:

- configMapRef:
  name: {{ .Release.Name }}-my-config-v{{ .Values.configVersion.myApp}}
0
Eduardo