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 化する必要があるのか Istio の構成

    • Istio とは・Istio の構成 — istiod • Istio Operator とは Helm 化する手順 • Helm によるリソースの管理について • Istio Operator 管理のものを Helm 管理にするには この共有会で何を話すか
  2. なぜ 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 でのインストールが非推奨になったから
  3. 出典: 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 の構成
  4. Istio の構成 Workloads • Deployment 権限周り • ClusterRole • SericeAccount

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

    • etc… ほかにもいっぱい Istio を動かすにはさまざまなリソースのデプロイが必要 簡単に管理したい
  6. Istio のインストール方法 Istio のインストール方法(再掲) • istioctl — Istio 公式の CLI

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

    • IaC で管理できない • Istio Operator — istio-operator という pod が IstioOperator という CRD に基づ いて Istio のリソースを管理する — Istio を terraform で管理するために使っている • Istioの構成管理の話 - Gunosy Tech Blog • Helm — Kubernetes manifests 向けのパッケージマネージャー リソースを管理するためにいくつかのインストール方法が提供されている
  8. 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 のリソースを管理する方法のひとつ
  9. Istio Operator Istio Operator が管理しているリソースももとはHelm Chartのもの → Helm 管理におこうとした時に競合する →

    競合を解決できればそのままそのリソースを Helm で管理できる Helm のマニフェストを持っているということは
  10. 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
  11. Istio Operator 方法2. istio-operator(Controller)を止めてから消す IstioOperator の定義に基づいて実際にリソースを扱うのはistio-operator → istio-operator の Pod

    がいなければ、istio のリソースは変更されない • IstioOperator のラベルをいじる必要がない • 既存のリソースで Helm 管理にならないものも残しておける
  12. 前提 istio-base • istio 全体で共通のリソース(CRDなど) • Istio Base Helm Chart

    istiod • Istio の Control Plane • Istiod Helm Chart 必ず istio-base を先にインストールしておく必要がある Gateway を使っているなら istio-gateway も必要(うちは使ってない) 2つの Helm Chart をインストールする必要がある(参考)
  13. Helm 化する手順 1. 手順書の作成 2. Helm 化する PR を用意 3.

    istio-operator の Pod 数を0にする 4. 既存のリソースに Helm のラベルとアノテーションをつける 5. PR のマージ
  14. Helm 化する手順 istio-operator という namespace に Deployment がある • replicas:

    0 に指定 この後、istio-operator の Pod がなくなり IstioOperator に基づいた Reconcile が行われなくなる 3. istio-operator の Pod 数を0にする
  15. Helm 化する手順 ラベル • app.kubernetes.io/managed-by=Helm アノテーション • meta.helm.sh/release-name=<release_name> • meta.helm.sh/release-namespace=<release_namespace>

    この後、PR で diff が確認できるようになるはず 4. 既存のリソースに Helm のラベルとアノテーションをつける
  16. Helm 化する手順 helmfile apply が成功すれば OK • すべてにラベルがついていれば成功するはず PR に

    Terraform からの Istio Operator の削除を含めていた場合、Istio Operator の削除も実行される 5. PR のマージ