Step to Helm in Prod

k8sエコシステム自習。 ソフトウェアの実行環境をコンテナに閉じ込めて連携をk8sマニフェストで記述するようになった。 そうなると連携設定でのミスというか整合性が問題になる。 それを可変部分を切り出してパッケージのように扱えるように Helm が助けてくれた。 前も書いたけど v3 では Tiller の支援なしでパッケージインストールのような世界が実現されている。 目的を達成するために寄り道がないというわけでとても嬉しい。

本番導入でしたを確認した。

  • 対象の抽象化レイヤをバージョン管理されたテキストコードとして扱えるか?
  • CDパイプラインに載せるのは簡単か?
  • 安全にアップデート可能か?

ぜんぶ解決されている。

1つめは自作で問題ないけど Helmfile がある。 2つめもビルド用のコンテナイメージを作ればいいけど、やはりGCPにコミュニティ提供のビルダーがある。 3つめは helm update サブコマンドを確認できたので、レプリカ数に気をつければ適切に運用できる。というわけで Helm はとても嬉しいツールと結論づけた。

2つめについてはメモすることは何もない。

3. Update

メモだけ。 upgrade サブコマンドを使って対象リリースをアップデートできる。 ここではバージョンのダウングレードを指定したが –set,–set-file,–reuse-values,–reset-values と設定変更のオプションが役に立ちそう。 –reuse-values,–reset-values が過去の設定値の使い回し、廃棄を指定するオプション。 使い回す場合は、コマンドで指定した値にマージされるとのこと。

1
$ helm upgrade argo-1594791701 --version 0.9.7

1. Helmfile

Brewfile的な感じでHelmfileというツールがある。 設定ファイルはyamlを生成するGoテンプレートとして書く。 helmfile sync で関連リソースを全て同期する。 –file で指定しないと helmfile.d/*.yml が対象となるらしい。

書き方はREADME.mdの具体例でだいたい理解できる。 freeeの記事も参考にした。 適当にしたみたいにして実行してみた。 values.yaml を参照してるのでそこにファイルが必要。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
environments:
  develop:
    values:
    - environment/develop/values.yaml

releases:
  - name: helmfile-envoy-{{ .Values.stage }}
    namespace: helmfile-envoy-{{ .Environment.Name }}
    chart: stable/envoy
    values:
      - values.yaml
属性 用途
releases リリース対象の定義を列挙する
environments 環境毎に定義する項目を辞書として記述する
repositories Helmリポジトリの定義を記載する
helmDefaults valuesのデフォルト値
helmfiles releaseの適用前に実施されるhelmfileを記載する
base 書いたhelmfileの継承元helmfileでマージされる
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ helmfile -e develop --file helmfile.yml sync
Affected releases are:
  helmfile-envoy-develop (stable/envoy) UPDATED

Upgrading release=helmfile-envoy-develop, chart=stable/envoy
Release "helmfile-envoy-develop" does not exist. Installing it now.
NAME: helmfile-envoy-develop
LAST DEPLOYED: Tue Jul 21 11:46:50 2020
NAMESPACE: helmfile-envoy-develop
STATUS: deployed
REVISION: 1
TEST SUITE: None

Listing releases matching ^helmfile-envoy-develop$
helmfile-envoy-develop  helmfile-envoy-develop  1               2020-07-21 11:46:50.49492 +0900 JST deployed envoy-1.9.0     1.11.2


UPDATED RELEASES:
NAME                     CHART          VERSION
helmfile-envoy-develop   stable/envoy     1.9.0

$ helm ls --namespace helmfile-envoy-develop
NAME                    NAMESPACE               REVISION        UPDATED                             STATUS   CHART           APP VERSION
helmfile-envoy-develop  helmfile-envoy-develop  1               2020-07-21 11:46:50.49492 +0900 JST deployed envoy-1.9.0     1.11.2

めでたしめでたし。

comments powered by Disqus