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

Istio Helm化

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Istio Helm化

Avatar for johnmanjiro

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 のマージ