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

マネージドKubernetesの強みとオンプレでの考慮点 / k8s1008-techplay

マネージドKubernetesの強みとオンプレでの考慮点 / k8s1008-techplay

マネージドKubernetesの強みとオンプレでの考慮点

Kubernetes meetup 〜オンプレ?クラウド?事例共有会〜

De266761b955b2636e454a1bc7a99ed4?s=128

Masaya Aoyama (@amsy810)

October 08, 2020
Tweet

Transcript

  1. Masaya Aoyama CyberAgent Ϛωʔδυ Kubernetes ͷڧΈͱ ΦϯϓϨͰͷߟྀ఺ @TECH PLAY Kubernetes

    meetup ΦϯϓϨ / Ϋϥ΢υ / ࣄྫڞ༗ձ @amsy810
  2. - Co-chair Masaya Aoyama + CREATIONLINE / DENSO - 技術アドバイザ

    + SAKURA Internet Research Center – 客員研究員 + 3-shake 技術顧問 + PLAID - Organizer - KaaS Product Owner - Publications Twitter: @amsy810
  3. )BSEXBZͰԶࢲ͸ߦ͘ͱ͍͏ͦ͜ͷ͋ͳͨ https://github.com/CyberAgentHack/home-kubernetes-2020

  4. Kubernetes ͷߏ੒ཁૉ

  5. ,VCFSOFUFTͷߏ੒ཁૉ Kubernetes Core Cloud Controller Manager Ingress Controller CSI Driver

    Authentication Module Kubernetes のコアコンポーネント クラウド基盤と連携するためのコンポーネント L7 Load Balancing を提供するコンポーネント ストレージ基盤と連携するためのコンポーネント 認証機能を提供するコンポーネント Others 様々な機能を提供するコンポーネント
  6. Kubernetes Core

  7. ,VCFSOFUFT$PSF Kubernetes 本体のソースコード⾃体は基本的には同じ 後で紹介する各コンポーネントによって、コアとプラグインという形が取られているものが多い Cloud Controller Manager CSI Driver A

    Ingress Controller A Ingress Controller B CSI Driver B Runtime A Runtime B StorageClass A SnapshotClass A IngressClass A IngressClass B StorageClass B SnapshotClass B RuntimeClass A RuntimeClass B … … … Authentication module
  8. ,VCFSOFUFT$PSF

  9. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞ カスタマイズのしやすさ インストール 障害対応 バージョンアップ 運⽤のしやすさ

  10. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞ カスタマイズのしやすさ インストール 適切な OS 設定 適切なセキュリティ設定(e.g. CIS benchmark) 再現性のあるインストール⽅法

    設定ファイル化(Infrastructure as Code) 短い起動時間 詳細なカスタマイズ
  11. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞ 障害対応 バージョンアップ 運⽤のしやすさ ノード障害時の⾃動復旧 etcd のバックアップ クラスタのオートスケール 新バージョンへの(⾃動)アップデート 事前検証されたアップデート

    関連コンポーネントのアップデート
  12. Ͱ͸ʁ カスタマイズのしやすさ インストール 適切な OS 設定 新しい Kernel + 設定で

    OS Image をビルド 適切なセキュリティ設定(e.g. CIS benchmark) 適切な設定を⾏い 再現性のあるインストール⽅法 VM Image による展開と Git 管理された設定 設定ファイル化(Infrastructure as Code) 独⾃ CLI から cluster config を元に作成可能 短い起動時間 VM Image 化により⾼速な起動 詳細なカスタマイズ 必要に応じてカスタマイズ可
  13. 障害対応 バージョンアップ 運⽤のしやすさ ノード障害時の⾃動復旧 Node Auto Repair 機能を実装 etcd のバックアップ

    定期的なバックアップを実施 クラスタのオートスケール プライベートクラウド向けに実装 新バージョンへの(⾃動)アップデート パッチバージョンをサポート 事前検証されたアップデート バージョンアップの際は実施 関連コンポーネントのアップデート AKE version up に追従して提供 Ͱ͸ʁ
  14. ノード障害時の⾃動復旧 Node Auto Repair 機能を実装 etcd のバックアップ 定期的なバックアップを実施 クラスタのオートスケール プライベートクラウド向けに実装

    新バージョンへの(⾃動)アップデート パッチバージョンをサポート 事前検証されたアップデート バージョンアップの際は実施 関連コンポーネントのアップデート AKE version up に追従して提供 Ͱ͸ʁ Future Work ⾃動的にノードプールも管理する 「ノード⾃動プロビジョニング」 https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning?hl=ja https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/proposals/node_autoprovisioning.md Requests・Node Affinity・Taints をもとに ノードプールを動的に管理 ※ 便宜上ここで紹介しましたが Cluster Autoscaler は Kubernetes のコア機能ではなく Addon です 各種クラウドプロバイダー向けの実装が⽤意されています
  15. Cloud Controller Manager

  16. ,VCFSOFUFT$PSF

  17. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞ Cloud Controller Manager は「共通のコア部分」と「クラウド固有部分」 から構成 AWS、GCP、OpenStack など多くの cloud-provider が⽤意されている

    “type: LoadBalancer” Service の制御関数やノードの情報の取得など 4 つの Controller Service、Route、Node、NodeLyfeCycle 共通部分 cloud-provider-gcp cloud-provider-aws
  18. cloud-provider-openstack をベースに独⾃実装 “type: LoadBalancer” Service では BIG-IP を制御して HW LB

    を利⽤ 3年前〜実装部分を変えながら利⽤中 https://cyberagent.ai/blog/pr/kubernetes/3127/ ※ 実は Cloud Controller Manager を利⽤せずに “type: LoadBalancer” Service ⾃体は利⽤可能(例︓metallb) Ͱ͸ʁ
  19. Ingress Controller

  20. *OHSFTT$POUSPMMFSͷࠩҟ Ingress は L7 レイヤーのエンドポイントを提供する機能 • パスベースルーティング • SSL 終端

    実装はいくつか⽤意されており、 複数ある場合は IngressClass によって選択可能 1. Pod を利⽤した Ingress 2. 外部の LB を利⽤した Ingress (VM-based) 3. 外部の LB を利⽤した Ingress (Container-native) Ingress Service Pod Pod Pod Service Pod Pod Pod HTTP Requests
  21. 1PEΛར༻ͨ͠ *OHSFTT NIC NIC NIC Pod Network (Internal Network) Node

    Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 NodePort Service NodePort Service Ingress Controller Deployment (/path1: Service A, /path2: Service B) Pod LoadBalancer Service
  22. 1PEΛར༻ͨ͠ *OHSFTT NIC NIC NIC Pod Network (Internal Network) Node

    Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 NodePort Service NodePort Service Ingress Controller Deployment (/path1: Service A, /path2: Service B) Pod LoadBalancer Service メリット︓ ソフトウェア利⽤のため実装が多岐にわたる Annotations や ConfigMap で詳細な設定が⾏える デメリット︓ HPA と組み合わせて負荷対策が必要 LB 相当の Pod の管理はクラスタ管理者が⾏う必要がある
  23. ֎෦ͷ -#Λར༻ͨ͠ *OHSFTTʢ7.CBTFEʣ NIC NIC NIC Pod Pod Network (Internal

    Network) Node Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 Ingress (/path1: Service A, /path2: Service B) NodePort Service A NodePort Service B
  24. ֎෦ͷ -#Λར༻ͨ͠ *OHSFTTʢ7.CBTFEʣ NIC NIC NIC Pod Pod Network (Internal

    Network) Node Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 Ingress (/path1: Service A, /path2: Service B) NodePort Service A NodePort Service B メリット︓ 安定したクラウドやHWのロードバランサが利⽤可能 Kubernetesクラスタのリソースを消費しない デメリット︓ 利⽤可能な機能はクラウドのLBに左右される 2 Hop ロードバランシングが⾏われる
  25. ֎෦ͷ -#Λར༻ͨ͠ *OHSFTTʢ7.CBTFEʣ NIC NIC NIC Pod Pod Network (Internal

    Network) Node Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 Ingress (/path1: Service A, /path2: Service B)
  26. ֎෦ͷ -#Λར༻ͨ͠ *OHSFTTʢ7.CBTFEʣ NIC NIC NIC Pod Pod Network (Internal

    Network) Node Network (External Network) Kubernetes Node Kubernetes Node Kubernetes Node :80 :80 :80 10.240.0.7 10.240.0.9 10.240.0.8 Ingress (/path1: Service A, /path2: Service B) メリット︓ 2-Hop バランシングがないため性能が向上 デメリット︓ 利⽤できる環境が少ない(GCP、AWS、etc) LB メンバー書き換えが遅延しやすいため考慮が必要
  27. CSI Driver

  28. $4*%SJWFSͱ͸ʁ ここ1-2年で In-tree ⽅式から Out-tree ⽅式に変更 Release cycle や Review

    の影響を受けずに開発可能 GCE Persistent Disk In-tree Plugin GCP Container Storage Interface (CSI) In-tree Plugin GCE Persistent Disk CSI Driver GCP AWS Elastic Block Store In-tree Plugin AWS AWS Elastic Block Store CSI Driver AWS
  29. $4*%SJWFSͷར఺ AWS/GCP などのパブリッククラウド向け、NetApp Trident などのベンダー向けが存在 パブリッククラウドの多くは CSI はまだベータ Volume Snapshot

    や Ephemeral Inline Volume などの新しい機能は CSI が前提 Synology CSI Driver もあるので おうちで箱物ストレージでも遊べる
  30. AKE では OpenStack Cinder CSI を利⽤ GPU 向け Kubernetes では

    NetApp Trident CSI を利⽤ その環境で利⽤できるストレージに対応した CSI Driver を利⽤する ͳͲͰ͸ʁ 10/9 GTC で発表予定
  31. Authentication Module

  32. "VUIFOUJDBUJPO.PEVMF Kubernetes には様々な Authentication Module が提供されている X509クライアント証明書、Static Token、SA Token、OIDC Token、etc

    https://kubernetes.io/docs/reference/access-authn-authz/authentication/#authentication-strategies GKE では Google Account(Google Groups)での認証 EKS では AWS IAM での認証 Dex を利⽤することで Google Account などの外部認証プロバイダを利⽤可能 https://dexidp.io/docs/kubernetes/ AKE では OpenStack Keystone 認証を利⽤ GPUaaS では Kubernetes SA Token 認証(Dex も検討中)を利⽤
  33. Other

  34. ・任意のスキーマで CustomResource を追加する機能がある ・Controller を実装するライブラリ・フレームワークが提供されている Controllerの中⾝ = API の操作 +

    ロジック 元となるリソースの データを監視し reconcile() { … } 何かしらの処理をする (調整・収束させ続ける) ,VCFSOFUFT $POUSPMMFS
  35. リソースの登録・更新・削除時に任意のチェックや変更を⾏いたい • 特定の Volume は ReadOnly マウントを強制する • ユーザが登録するメタデータのチェック •

    独⾃の Annotations の変更制限 • etc Kubernetes の Admission Webhook を利⽤する .VUBUFBOEWBMJEBUFBUSFTPVSDFPQFSBUJPO Webhook Request Check
  36. ঎༻੡඼ͳͲʹΑͬͯ͸͞ΒͳΔଟػೳ΋ たとえば、GCP の Anthos では Multi Cluster Ingress が提供されている https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-for-anthos?hl=ja

  37. Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

  38. Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

  39. Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

  40. より詳細は CNDT2020 Rejects で 発表されたこちらを参照してください Ͱ͸ʁ Video: https://www.youtube.com/watch?v=54BI3SyIRDg Slide: https://speakerdeck.com/extendwings/migrating-between-clusters-with-mclb-and-mci?slide=19

  41. Conclusion

  42. ,VCFSOFUFTͷߏ੒ཁૉ Kubernetes Core Cloud Controller Manager Ingress Controller CSI Driver

    Authentication Module Kubernetes のコアコンポーネント クラウド基盤と連携するためのコンポーネント L7 Load Balancing を提供するコンポーネント ストレージ基盤と連携するためのコンポーネント 認証機能を提供するコンポーネント Others 様々な機能を提供するコンポーネント
  43. Thank you for your attention @amsy810

  44. 2018年9⽉21⽇発売 https://bit.ly/k8s-amsy810 Kubernetesの各リソースについて体系的かつ網羅的に説明 Cloud Nativeな開発を促進させる周辺エコシステムについても紹介 ▪⽬次案 第1章 Dockerの復習とHello, Kubernetes 第2章

    なぜKubernetesが必要なのか︖ 第3章 Kubernetes環境の選択肢 第4章 APIリソースとkubectl 第5章 Workloadsリソース 第6章 Discovery & LBリソース 第7章 Config & Storageリソース 第8章 ClusterリソースとMetadataリソース 第9章 リソース管理とオートスケーリング 第10章 ヘルスチェックとコンテナのライフサイクル 第11章 メンテナンスとノードの停⽌ 第12章 ⾼度で柔軟なスケジューリング 第13章 セキュリティ 第14章 マニフェストの汎⽤化を⾏うオープンソースソフトウェア 第15章 モニタリング 第16章 コンテナログの集約 第17章 CI/CD環境 第18章 マイクロサービスとServiceMesh 第19章 Kubernetesのアーキテクチャ 第20章 Kubernetesとこれから 付録
  45. 2020年8⽉7⽇発売 https://bit.ly/k8s-amsy810-2 Kubernetesの各リソースについて体系的かつ網羅的に説明 Cloud Nativeな開発を促進させる周辺エコシステムについても紹介 ▪⽬次案 第1章 Dockerの復習と「Hello, Kubernetes」 第2章

    なぜKubernetesが必要なのか︖ 第3章 Kubernetes環境の選択肢 第4章 APIリソースとkubectl 第5章 Workloads APIsカテゴリ 第6章 Service APIsカテゴリ 第7章 Config&Storage APIsカテゴリ 第8章 Cluster APIsカテゴリとMetadata APIsカテゴリ 第9章 リソース管理とオートスケーリング 第10章 ヘルスチェックとコンテナのライフサイクル 第11章 メンテナンスとノードの停⽌ 第12章 ⾼度で柔軟なスケジューリング 第13章 セキュリティ 第14章 マニフェストの汎⽤化を⾏うオープンソースソフトウェア 第15章 モニタリング 第16章 コンテナログの集約 第17章 Kubernetes環境でのCI/CD 第18章 マイクロサービスアーキテクチャとサービスメッシュ 第19章 Kubernetesのアーキテクチャを知る 第20章 Kubernetesとこれから 付録
  46. What is mastering kubernetes? 『Kubernetes完全ガイド』 の特徴 網羅的・体系的 体系的かつ網羅的にほぼ全機能を解説 実際に利用している小ネタ・小技 公式ドキュメントには載っていない小ネタや

    実運用上のハマりポイントなど 周辺エコシステムも説明 Helm / Kustomize / Datadog / Prometheus Istio / ArgoCD / Telepresence / Skaffold OpenPolicyAgent / Fluentd… 豊富な図画 合計 285 枚 > 合計 288 枚 豊富なマニフェスト 合計 185 YAML > 合計 312 YAML 豊富なよくある質問 合計 199 質問 > 合計 257 質問
  47. None
  48. 体感的には 10%削除 20%更新 35%追加

  49. None
  50. § 一部を除き、Kubernetes 1.18 の時点でAlpha機能としてリリースさ れた機能を含めました。 § ダウントレンド気味なエコシステムを外し、 アップトレンドなエコシステムを入れました § 利用頻度が高くなってきたエコシステムの説明を追加しました

    § 色々追加しました 2年間で頂いた質問をちょこちょこメモしてあったので その辺りを追記したり
  51. index.htmlファイルなどをわざわざ配置したりなどしていましたが、 独自のコンテナイメージを作ったのでわかりやすくなりました。 その他にもいくつか…

  52. 紙面が見やすくなりました コマンドとマニフェストの背景色の差