Slide 1

Slide 1 text

2023/12/21 Kubernetes Novice Tokyo #29 株式会社スリーシェイク 長谷川広樹 @Hiroki_IT github.com/hiroki-it hiroki-hasegawa.hatenablog.jp はてな Kubernetes のマルチテナントパターン と ArgoCD の実践テナント設計

Slide 2

Slide 2 text

マイクロサービスアーキのインフラ領域が仕事 ・マイクロサービスアーキを支えるインフラ技術 ・ドメイン駆動設計 俺です 社内で色々ふざけ過ぎてるので、そろそろ怒られるかもー ・サービスメッシュ (Istio ←推し❤) ・IaC (Kubernetes, Helm, Terraform) ・CICD (GitLab CI, ArgoCD) ・監視 (Prometheus, Fluentd, Kiali, OpenTelemetry入門中) ・クラウドインフラ (AWS, ちょいGoogle Cloud) マイクロサービスアーキ関連の技術が好き 虫捕りついでに 虫食ってた話 する?

Slide 3

Slide 3 text

発表の元記事 解説できなかったArgoCDのマニフェストの実装例 については元記事を見てね 🔎 (本発表の参考リンクも記事中にあるよ) https://hiroki-hasegawa.hatenablog.jp/entry/2023/05/02/145115

Slide 4

Slide 4 text

スライドで使っている図の凡例です

Slide 5

Slide 5 text

なぜ ArgoCDでマルチテナントが必要なのか

Slide 6

Slide 6 text

なんか間違えてる気がするけど ( ΦωΦ)σ ヨシ! 利用者は 全プロダクトApplicationを 操作できる 誤ったプロダクトに マニフェストを デプロイできちゃう ( ΦωΦ)σ

Slide 7

Slide 7 text

󰘐 デプロイさせないマン 利用者は 正しいテナントのみに リクエストできる 誤ったプロダクトに マニフェストを デプロイさせない󰘐

Slide 8

Slide 8 text

Kubernetesのマルチテナントパターン

Slide 9

Slide 9 text

Kubernetesでは適切なテナントパターンを採用しよう Clusters as-a-Service Control Planes as-a-Service Namespaces as-a-Service カスタムリソース テナント テナント 単位 実際のCluster 仮想Cluster Namespace ツール固有の論理空間 説明 テナントごとに 独立した Cluster テナントごとに 独立した コントロールプレーン (仮想Cluster) テナントごとに 独立した Namespace テナントごとに 独立した ツール固有の論理空間 ツール  ⚫ AWS EKS  ⚫ GCP GKE  ⚫ Azure AKE  ⚫ Kubeadm    ・Kcp    ・tensile-kube    ・vcluster    ・VirtualCluster -  ⚫ ArgoCD (AppProject)  ⚫ Capsule (Tenant)  ⚫ Kiosk (Account)  ⚫ KubeZoo (Tenant)

Slide 10

Slide 10 text

ArgoCDの実践テナント設計

Slide 11

Slide 11 text

KubernetesのテナントパターンをArgoCDで “実践” する 実Cluster テナント 仮想Cluster テナント Namespace テナント AppProject テナント CLモード AppProject テナント NSモード 対応する テナントパターン Clusters as-a-Service Control Planes as-a-Service Namespaces as-a-Service カスタムリソーステナント ArgoCDが テナント間で 占有 / 共有 占有 占有 占有 共有 占有 おすすめ ★ ★★ 今回 紹介する実践 ✅ ✅

Slide 12

Slide 12 text

AppProjectテナントは ”Namespace” と ”AppProject” の二重テナント まずNamespace、次にAppProjectによるテナント

Slide 13

Slide 13 text

スコープモードが異なると、テナント間でArgoCDを 共有 / 占有 が異なる Clusterスコープモード (ArgoCD共有) Namespacedスコープモード (ArgoCD占有)

Slide 14

Slide 14 text

比べるとNamespacedスコープモードの方がおすすめ Namespacedスコープモードは テナント間でArgoCDを占有できる 各テナントのArgoCDは ⚫ テナントごと設定値を変更できる ⚫ 他ArgoCDの障害に影響されない 一方でClusterスコープモードだと ⚫ テナントごと設定値を変更できず ⚫ ArgoCDが単一障害点になる

Slide 15

Slide 15 text

AppProjectテナント & Namespacedスコープモード で最強のテナントを作る Namespacedスコープモード AppProjectテナント ⚫ Namespace = プロダクト ⚫ AppProject = サブチーム 誤ったプロダクトや 誤ったサブチーム管理下に マニフェストを デプロイさせない󰘐 &

Slide 16

Slide 16 text

最強のテナントは どのような誤った操作を 防いでくれるのか

Slide 17

Slide 17 text

正しいテナントを選べば マニフェストをデプロイできる 文字が見えない箇所は 拡大してね🔍 fooプロダクトinfraチーム󰱢が NamespaceかつAppProject内の Applicationを操作する テナントが正しければ エラーなく マニフェストをデプロイできる

Slide 18

Slide 18 text

🚫 デプロイ制限-1 文字が見えない箇所は拡大してね🔍 fooプロダクトinfraチーム󰱢が barプロダクトNamespace内の Applicationを操作する Namespaceが誤っているため 操作時にエラーを返し デプロイさせない󰘐

Slide 19

Slide 19 text

🚫 デプロイ制限-2 fooプロダクトinfraチーム󰱢が app AppProject内の Applicationを操作する 文字が見えない箇所は 拡大してね🔍 AppProjectが誤っているため 操作時にエラーを返し デプロイさせない󰘐

Slide 20

Slide 20 text

🚫 デプロイ制限-3 fooプロダクトinfraチーム󰱢が fooテナント内のApplicationから barプロダクトClusterを デプロイ先に指定する 文字が見えない箇所は 拡大してね🔍 デプロイ先が誤っているため 指定時にエラーを返し デプロイさせない󰘐

Slide 21

Slide 21 text

🚫 デプロイ制限-4 文字が見えない箇所は 拡大してね🔍 fooプロダクトinfraチーム󰱢が infra AppProject内から app Namespaceを デプロイ先に指定する デプロイ先が誤っているため 指定時にエラーを返し デプロイさせない󰘐

Slide 22

Slide 22 text

fooプロダクトのArgoCDが fooテナント内に Reconciliation テナントが正しいため エラーなく Reconciliationできる 正しいテナントならReconciliationできる

Slide 23

Slide 23 text

fooプロダクトのArgoCDが barプロダクトNamespace内に Reconciliation Namespaceが誤っているため エラーを返し Reconciliationさせない󰘐 🚫 Reconciliation制限

Slide 24

Slide 24 text

次回 Kubernetes Kanzen Ni Rikaishita Tokyo 登壇します