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

Istio Helm化

Istio Helm化

johnmanjiro

May 01, 2023
Tweet

More Decks by johnmanjiro

Other Decks in Programming

Transcript

  1. Istio Helm化 共有
    johnmanjiro

    View Slide

  2. アジェンダ
    このタスクの目標
    ● なぜ Istio を Helm 化する必要があるのか
    Istio の構成
    ● Istio とは・Istio の構成
    — istiod
    ● Istio Operator とは
    Helm 化する手順
    ● Helm によるリソースの管理について
    ● Istio Operator 管理のものを Helm 管理にするには
    この共有会で何を話すか

    View Slide

  3. このタスクの目標

    View Slide

  4. このタスクの目標
    を で管理したい!

    View Slide

  5. なぜ Helm で管理する必要があるのか
    サポートはされるが、新しい機能の追加などは行われない
    Istio のインストール方法
    ● istioctl
    — Istio 公式の CLI
    ● IaC で管理できない
    ● Istio Operator
    — istio-operator という pod が IstioOperator という CRD に基づ
    いて Istio のリソースを管理する
    — Istio を terraform で管理するために使っている
    ● Istioの構成管理の話 - Gunosy Tech Blog
    ● Helm
    — Kubernetes manifests 向けのパッケージマネージャー
    今使っている Istio Operator でのインストールが非推奨になったから

    View Slide

  6. Istioの構成

    View Slide

  7. Istio の構成
    そもそも ってなんだ?

    View Slide

  8. Istio とは
    サービスメッシュ
    ● アプリケーションレベルの通信をインフラストラクチャ側で制御できる
    ようにする技術
    ● 社内のマイクロサービスが通信する際に使っている
    わかりやすい資料
    AWS App Mesh - AWS Black Belt Online Seminor
    Kubernetes 向けのサービスメッシュ

    View Slide

  9. 出典: https://istio.io/latest/about/service-mesh/
    ■ Control Plane(istiod)
    – Istio 全体を管理する
    ● Pod に対して Istio Proxy を注入したり
    – istiod という単一のバイナリ
    ● 中に Pilot などのコンポーネントを持つ
    ■ Istio Proxy
    – Pod に注入される Proxy
    ● Envoy を拡張したもの
    ● Sidecar として注入される
    ● サービス間すべてのトラフィックを管理する
    Control Plane と Istio Proxy で構成される
    Istio の構成

    View Slide

  10. Istio の構成
    Workloads
    ● Deployment
    権限周り
    ● ClusterRole
    ● SericeAccount
    ● etc…
    ほかにもいっぱい
    Istio を動かすにはさまざまなリソースのデプロイが必要

    View Slide

  11. Istio の構成
    Workloads
    ● Deployment
    権限周り
    ● ClusterRole
    ● SericeAccount
    ● etc…
    ほかにもいっぱい
    Istio を動かすにはさまざまなリソースのデプロイが必要
    簡単に管理したい

    View Slide

  12. Istio のインストール方法
    Istio のインストール方法(再掲)
    ● istioctl
    — Istio 公式の CLI
    ● IaC で管理できない
    ● Istio Operator
    — istio-operator という pod が IstioOperator という CRD に基づ
    いて Istio のリソースを管理する
    — Istio を terraform で管理するために使っている
    ● Istioの構成管理の話 - Gunosy Tech Blog
    ● Helm
    — Kubernetes manifests 向けのパッケージマネージャー
    リソースを管理するためにいくつかのインストール方法が提供されている

    View Slide

  13. Istio のインストール方法
    Istio のインストール方法(再掲)
    ● istioctl
    — Istio 公式の CLI
    ● IaC で管理できない
    ● Istio Operator
    — istio-operator という pod が IstioOperator という CRD に基づ
    いて Istio のリソースを管理する
    — Istio を terraform で管理するために使っている
    ● Istioの構成管理の話 - Gunosy Tech Blog
    ● Helm
    — Kubernetes manifests 向けのパッケージマネージャー
    リソースを管理するためにいくつかのインストール方法が提供されている

    View Slide

  14. Istio Operator
    デプロイされると Istio 関連のリソースを管理する
    ● Istiod の Deployment
    ● Service
    ● stats 系の Envoy Filter
    istio-operator という pod が Controller として動いている
    IstioOperator (CR) の設定に合わせて Istio のリソースを管理する
    内部で Helm のマニフェストを持っており、Render 後 Apply している
    ● Istio Operator の manifest で定義しているものも Helm の Value
    Istio のリソースを管理する方法のひとつ

    View Slide

  15. Istio Operator
    Istio Operator が管理しているリソースももとはHelm Chartのもの
    → Helm 管理におこうとした時に競合する
    → 競合を解決できればそのままそのリソースを Helm で管理できる
    Helm のマニフェストを持っているということは

    View Slide

  16. Istio Operator
    Istio Operator を削除すると……
    管理していたリソースも消える
    ● Kubernetes クラスターから Control Plane とかが消え去る
    ● やばい
    どうやって管理対象か判断しているのか
    ● リソースについているラベルを見ている(code1, code2)
    — install.operator.istio.io/owning-resource
    — install.operator.istio.io/owning-resource-namespace
    — operator.istio.io/managed
    — operator.istio.io/component
    — operator.istio.io/version

    View Slide

  17. Istio Operator
    リソースを消さずに Istio Operator を消すには
    方法1. 既存のリソースからラベルを剥がしてから消す
    方法2. istio-operator(Controller)を止めてから消す

    View Slide

  18. Istio Operator
    方法1. 既存のリソースからラベルを剥がしてから消す
    リソースについている Istio Operator 関連のラベルをすべて剥がす
    ● ラベルがなくなっていれば管理対象でなくなる
    ● 剥がし忘れがあるとそのリソースが消えてしまう

    View Slide

  19. Istio Operator
    方法2. istio-operator(Controller)を止めてから消す
    IstioOperator の定義に基づいて実際にリソースを扱うのはistio-operator
    → istio-operator の Pod がいなければ、istio のリソースは変更されない
    ● IstioOperator のラベルをいじる必要がない
    ● 既存のリソースで Helm 管理にならないものも残しておける

    View Slide

  20. Istio Operator
    リソースを消さずに Istio Operator を消すには
    方法1. 既存のリソースからラベルを剥がしてから消す
    方法2. istio-operator(Controller)を止めてから消す こっちでやる

    View Slide

  21. Helm化する手順

    View Slide

  22. 前提
    istio-base
    ● istio 全体で共通のリソース(CRDなど)
    ● Istio Base Helm Chart
    istiod
    ● Istio の Control Plane
    ● Istiod Helm Chart
    必ず istio-base を先にインストールしておく必要がある
    Gateway を使っているなら istio-gateway も必要(うちは使ってない)
    2つの Helm Chart をインストールする必要がある(参考)

    View Slide

  23. Helm 化する手順
    1. 手順書の作成
    2. Helm 化する PR を用意
    3. istio-operator の Pod 数を0にする
    4. 既存のリソースに Helm のラベルとアノテーションをつける
    5. PR のマージ

    View Slide

  24. Helm 化する手順
    一連の流れ、コマンド、スクリプトを記載する
    1. 手順書の作成

    View Slide

  25. Helm 化する手順
    対象のリソースにラベルをつけない限り helmfile diff が失敗する
    Istio Operator の terraform のコードを削除するのも含めてもいい
    2. Helm 化する PR を用意

    View Slide

  26. Helm 化する手順
    istio-operator という namespace に Deployment がある
    ● replicas: 0 に指定
    この後、istio-operator の Pod がなくなり IstioOperator に基づいた
    Reconcile が行われなくなる
    3. istio-operator の Pod 数を0にする

    View Slide

  27. Helm 化する手順
    ラベル
    ● app.kubernetes.io/managed-by=Helm
    アノテーション
    ● meta.helm.sh/release-name=
    ● meta.helm.sh/release-namespace=
    この後、PR で diff が確認できるようになるはず
    4. 既存のリソースに Helm のラベルとアノテーションをつける

    View Slide

  28. Helm 化する手順
    helmfile apply が成功すれば OK
    ● すべてにラベルがついていれば成功するはず
    PR に Terraform からの Istio Operator の削除を含めていた場合、Istio
    Operator の削除も実行される
    5. PR のマージ

    View Slide

  29. これから何をするか

    View Slide

  30. 手順書の作成からやっていく
    続いて下記を実施する
    ● Helm 導入の PR
    ● Helm の対象になるリソースのラベル・アノテーションを変えるスクリプ

    これから何をするか
    Istio Helm化やっていき

    View Slide