Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Helm/Helmfileについて

 Helm/Helmfileについて

933291444e456bfb511a66a2fa9c6929?s=128

かとじゅん

June 24, 2020
Tweet

Transcript

  1. Helm/Helmfile について かとじゅん (@j5ik2o) 1 / 26

  2. kubernetes へのデプロイ どうやってます か? Pod を⼀つ⽴てるぐらいならkubectl run $ kubectl run

    nginx --image nginx $ kubectl expose deployments nginx --port 80 --type=LoadBalancer もう少しちゃんとするなら kubectl + yaml $ kubectl apply -f dir/* --record 複数のコマンドを実⾏するので煩雑になりがち。ロールバックも可能だが⾯倒(kubectl rollout undo でロールバックでき るが、deployments/daemonsets/statefulsets を意識する必要がある) Helm/Helmfile について 2 / 26
  3. 事故らないように Helm を使いましょう Helm/Helmfile について 3 / 26

  4. Helm とは https://helm.sh/ kubernetes のパッケージマネージャ マニフェストの管理 マニフェストファイルを束ねてパッケージ化できる(Chart) アニフェストファイルはテンプレート機能が使える アップデートとロールバックが簡単(kubectl より簡単)

    Chart を簡単に共有できる Chart 間の依存関係も定義できる kubeapps https://kubeapps.com/ Helm/Helmfile について 4 / 26
  5. $ helm search repo wordpress NAME CHART VERSION APP VERSION

    DESCRIPTION bitnami/wordpress 9.3.14 5.4.2 Web publishing platform for building blogs and ... $ helm install bitnami/wordpress --generate-name LAST DEPLOYED: Tue Jun 23 22:27:18 2020 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ... $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHA wordpress-1592918836 default 1 2020-06-23 22:27:18.885762 +0900 JST deployed wor $ helm delete wordpress-1592918836 release "wordpress-1592918836" uninstalled $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION Helm/Helmfile について 5 / 26
  6. ⾃前アプリケーションの Helm 化 Helm/Helmfile について 6 / 26

  7. Chart を作る $ helm create example Creating example example $

    ls -al drwxr-xr-x 7 j5ik2o staff 224 6 23 22:32 . drwxr-xr-x 7 j5ik2o staff 224 6 23 22:32 .. -rw-r--r-- 1 j5ik2o staff 349 6 23 22:32 .helmignore -rw-r--r-- 1 j5ik2o staff 1098 6 23 22:32 Chart.yaml drwxr-xr-x 2 j5ik2o staff 64 6 23 22:32 charts drwxr-xr-x 10 j5ik2o staff 320 6 23 22:32 templates -rw-r--r-- 1 j5ik2o staff 1797 6 23 22:32 values.yaml Helm/Helmfile について 7 / 26
  8. Chart.yaml apiVersion: v2 name: example description: A Helm chart for

    Kubernetes type: application version: 0.1.0 appVersion: 1.16.0 Helm/Helmfile について 8 / 26
  9. values.yaml デフォルトの設定を記述する # Default values for example. # This is

    a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: nginx pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart version. tag: "" # ... 環境毎に設定値を上書きしたい場合は-f を使う必要がある。 $ helm install [RELEASE] [CHART] -f prod-values.yaml -f common-values.yaml Helm/Helmfile について 9 / 26
  10. templates templates $ ls -al drwxr-xr-x 10 j5ik2o staff 320

    6 23 22:32 . drwxr-xr-x 7 j5ik2o staff 224 6 23 22:32 .. -rw-r--r-- 1 j5ik2o staff 1581 6 23 22:32 NOTES.txt -rw-r--r-- 1 j5ik2o staff 1820 6 23 22:32 _helpers.tpl -rw-r--r-- 1 j5ik2o staff 1828 6 23 22:32 deployment.yaml -rw-r--r-- 1 j5ik2o staff 908 6 23 22:32 hpa.yaml -rw-r--r-- 1 j5ik2o staff 1052 6 23 22:32 ingress.yaml -rw-r--r-- 1 j5ik2o staff 361 6 23 22:32 service.yaml -rw-r--r-- 1 j5ik2o staff 320 6 23 22:32 serviceaccount.yaml drwxr-xr-x 3 j5ik2o staff 96 6 23 22:32 tests deployment.yaml service.yaml 詳しくはこちら参照 → Chart Template Guide - Getting Started Helm/Helmfile について 10 / 26
  11. helm package パッケージングせずに、Chart ディレクトリを指定して、install できる $ helm install wordpress-1592921428 .

    $ helm package . Successfully packaged chart and saved it to: /Users/j5ik2o/Sources/slides/helm-and-helmfile/example/exam Helm/Helmfile について 11 / 26
  12. CD でよく使うコマンド Chart のInstall or Upgrade $ helm upgrade [RELEASE]

    [CHART] -i -f values.yaml デプロイのロールバック。直前のリビジョンに戻る $ helm rollback [RELEASE] 便利だけど、これらのコマンドを駆使するシェルスクリプト( ある意味でhelm ラッパー) が作れて秘伝の タレになってしまう。 Helm/Helmfile について 12 / 26
  13. ⾃前 Helm ラッパーの問題 実際にはシェルスクリプトでラップしCD などがから実⾏する。シェルスクリプトの秘伝のタレ化が問題 $ helm upgrade --install podinfo

    sp/podinfo -f prod-values.yaml Helm/Helmfile について 13 / 26
  14. Helmfile を使いましょう Helm/Helmfile について 14 / 26

  15. Helmfile Helm/Helmfile について 15 / 26

  16. Helmfile とは Helm ベースの宣⾔的デプロイツール https://github.com/roboll/helmfile 2020 年5 ⽉現在 2.1K Github

    スター Helm/Helmfile について 16 / 26
  17. helmfile で冪等性を担保する helmfile releases: - name: podinfo chart: sp/podinfo values:

    - values.yaml $ helmfile apply Helm/Helmfile について 17 / 26
  18. その他のコマンド # 差分を確認 $ helmfile -e prod diff --context 3

    # diff を使うには以下が必要 # helm plugin install https://github.com/databus23/helm-diff --version # デプロイの特定 $ helmfile -e prod -l name=write-api apply # k8s マニフェストを⽣成させてkubectl でデプロイも可能 $ helmfile -e prod template | kubectl apply -f - Helm/Helmfile について 18 / 26
  19. その他の機能 バージョンロック Secret 管理 Values Provider(AWS SecretsManager などと連携) インストール・アンインストール順番を決めるDAG 機能(needs

    を使う) デバッグ⽀援 Helm/Helmfile について 19 / 26
  20. helmfile を分割す例 (1/6) ディレクトリ構成 ├── helmfile.yaml ├── read-api-server │ ├──

    environments │ │ └── test-values.yaml │ ├── helmfile.yaml │ └── values.yaml.gotmpl └── write-api-server ├── environments │ └── test-values.yaml ├── helmfile.yaml └── values.yaml.gotmpl Helm/Helmfile について 20 / 26
  21. helmfile を分割する例 (2/6) helmfile.yaml environments: {{ .Environment.Name }} helmfiles: -

    path: write-api-server - path: read-api-server Helm/Helmfile について 21 / 26
  22. helmfile を分割する例 (3/6) write-api-server/helmfile.yaml environments: {{ .Environment.Name }}: values: -

    environments/{{ .Environment.Name }}-values.yaml releases: - name: write-api-server namespace: messaging-service chart: ../../charts/write-api-server values: - values.yaml.gotmpl Helm/Helmfile について 22 / 26
  23. helmfile を分割する例 (4/6) write-api-server/values.yaml.gotmpl # Default values for sagrada. #

    This is a YAML-formatted file. # Declare variables to be passed into your templates. prodEnabled: {{ .Values.prodEnabled }} replicaCount: {{ .Values.replicaCount }} image: repository: {{ .Values.image.repository }} tag: latest pullPolicy: Always # ... Helm/Helmfile について 23 / 26
  24. helmfile を分割する例 (5/6) write-api-server/environments/test-values.yaml # Default values for sagrada. #

    This is a YAML-formatted file. # Declare variables to be passed into your templates. prodEnabled: true replicaCount: 3 image: repository: XXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/app/write-api-server tag: latest pullPolicy: Always Helm/Helmfile について 24 / 26
  25. helmfile を分割する例 (6/6) 環境名を指定してデプロイする $ helmfile -e test apply 環境名を指定してデプロイ対象を絞る

    $ helmfile -e test -l name=write-api apply Helm/Helmfile について 25 / 26
  26. おわり Helm/Helmfile について 26 / 26