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

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

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

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

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

Masaya Aoyama (@amsy810)

October 08, 2020
Tweet

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Technology

Transcript

  1. Masaya Aoyama
    CyberAgent
    Ϛωʔδυ Kubernetes ͷڧΈͱ
    ΦϯϓϨͰͷߟྀ఺
    @TECH PLAY Kubernetes meetup
    ΦϯϓϨ / Ϋϥ΢υ / ࣄྫڞ༗ձ
    @amsy810

    View Slide

  2. - Co-chair
    Masaya Aoyama
    + CREATIONLINE / DENSO - 技術アドバイザ
    + SAKURA Internet Research Center – 客員研究員
    + 3-shake 技術顧問
    + PLAID
    - Organizer
    - KaaS Product Owner - Publications
    Twitter: @amsy810

    View Slide

  3. )BSEXBZͰԶࢲ͸ߦ͘ͱ͍͏ͦ͜ͷ͋ͳͨ
    https://github.com/CyberAgentHack/home-kubernetes-2020

    View Slide

  4. Kubernetes ͷߏ੒ཁૉ

    View Slide

  5. ,VCFSOFUFTͷߏ੒ཁૉ
    Kubernetes Core
    Cloud Controller Manager
    Ingress Controller
    CSI Driver
    Authentication Module
    Kubernetes のコアコンポーネント
    クラウド基盤と連携するためのコンポーネント
    L7 Load Balancing を提供するコンポーネント
    ストレージ基盤と連携するためのコンポーネント
    認証機能を提供するコンポーネント
    Others 様々な機能を提供するコンポーネント

    View Slide

  6. Kubernetes Core

    View Slide

  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

    View Slide

  8. ,VCFSOFUFT$PSF

    View Slide

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

    View Slide

  10. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞
    カスタマイズのしやすさ
    インストール
    適切な OS 設定
    適切なセキュリティ設定(e.g. CIS benchmark)
    再現性のあるインストール⽅法
    設定ファイル化(Infrastructure as Code)
    短い起動時間
    詳細なカスタマイズ

    View Slide

  11. ,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞
    障害対応
    バージョンアップ
    運⽤のしやすさ
    ノード障害時の⾃動復旧
    etcd のバックアップ
    クラスタのオートスケール
    新バージョンへの(⾃動)アップデート
    事前検証されたアップデート
    関連コンポーネントのアップデート

    View Slide

  12. Ͱ͸ʁ
    カスタマイズのしやすさ
    インストール
    適切な OS 設定
    新しい Kernel + 設定で OS Image をビルド
    適切なセキュリティ設定(e.g. CIS benchmark)
    適切な設定を⾏い
    再現性のあるインストール⽅法
    VM Image による展開と Git 管理された設定
    設定ファイル化(Infrastructure as Code)
    独⾃ CLI から cluster config を元に作成可能
    短い起動時間
    VM Image 化により⾼速な起動
    詳細なカスタマイズ
    必要に応じてカスタマイズ可

    View Slide

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

    View Slide

  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 です
    各種クラウドプロバイダー向けの実装が⽤意されています

    View Slide

  15. Cloud Controller Manager

    View Slide

  16. ,VCFSOFUFT$PSF

    View Slide

  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

    View Slide

  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)
    Ͱ͸ʁ

    View Slide

  19. Ingress Controller

    View Slide

  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

    View Slide

  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

    View Slide

  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 の管理はクラスタ管理者が⾏う必要がある

    View Slide

  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

    View Slide

  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 ロードバランシングが⾏われる

    View Slide

  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)

    View Slide

  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 メンバー書き換えが遅延しやすいため考慮が必要

    View Slide

  27. CSI Driver

    View Slide

  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

    View Slide

  29. $4*%SJWFSͷར఺
    AWS/GCP などのパブリッククラウド向け、NetApp Trident などのベンダー向けが存在
    パブリッククラウドの多くは CSI はまだベータ
    Volume Snapshot や Ephemeral Inline Volume などの新しい機能は CSI が前提
    Synology CSI Driver もあるので おうちで箱物ストレージでも遊べる

    View Slide

  30. AKE では OpenStack Cinder CSI を利⽤
    GPU 向け Kubernetes では NetApp Trident CSI を利⽤
    その環境で利⽤できるストレージに対応した CSI Driver を利⽤する
    ͳͲͰ͸ʁ
    10/9 GTC で発表予定

    View Slide

  31. Authentication Module

    View Slide

  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 も検討中)を利⽤

    View Slide

  33. Other

    View Slide

  34. ・任意のスキーマで CustomResource を追加する機能がある
    ・Controller を実装するライブラリ・フレームワークが提供されている
    Controllerの中⾝ = API の操作 + ロジック
    元となるリソースの
    データを監視し
    reconcile()
    {

    }
    何かしらの処理をする
    (調整・収束させ続ける)
    ,VCFSOFUFT $POUSPMMFS

    View Slide

  35. リソースの登録・更新・削除時に任意のチェックや変更を⾏いたい
    • 特定の Volume は ReadOnly マウントを強制する
    • ユーザが登録するメタデータのチェック
    • 独⾃の Annotations の変更制限
    • etc
    Kubernetes の Admission Webhook を利⽤する
    .VUBUFBOEWBMJEBUFBUSFTPVSDFPQFSBUJPO
    Webhook
    Request
    Check

    View Slide

  36. ঎༻੡඼ͳͲʹΑͬͯ͸͞ΒͳΔଟػೳ΋
    たとえば、GCP の Anthos では Multi Cluster Ingress が提供されている
    https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-for-anthos?hl=ja

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  41. Conclusion

    View Slide

  42. ,VCFSOFUFTͷߏ੒ཁૉ
    Kubernetes Core
    Cloud Controller Manager
    Ingress Controller
    CSI Driver
    Authentication Module
    Kubernetes のコアコンポーネント
    クラウド基盤と連携するためのコンポーネント
    L7 Load Balancing を提供するコンポーネント
    ストレージ基盤と連携するためのコンポーネント
    認証機能を提供するコンポーネント
    Others 様々な機能を提供するコンポーネント

    View Slide

  43. Thank you for
    your attention
    @amsy810

    View Slide

  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とこれから
    付録

    View Slide

  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とこれから
    付録

    View Slide

  46. What is mastering kubernetes?
    『Kubernetes完全ガイド』 の特徴
    網羅的・体系的
    体系的かつ網羅的にほぼ全機能を解説
    実際に利用している小ネタ・小技
    公式ドキュメントには載っていない小ネタや
    実運用上のハマりポイントなど
    周辺エコシステムも説明
    Helm / Kustomize / Datadog / Prometheus
    Istio / ArgoCD / Telepresence / Skaffold
    OpenPolicyAgent / Fluentd…
    豊富な図画
    合計 285 枚 > 合計 288 枚
    豊富なマニフェスト
    合計 185 YAML > 合計 312 YAML
    豊富なよくある質問
    合計 199 質問 > 合計 257 質問

    View Slide

  47. View Slide

  48. 体感的には 10%削除
    20%更新
    35%追加

    View Slide

  49. View Slide

  50. § 一部を除き、Kubernetes 1.18 の時点でAlpha機能としてリリースさ
    れた機能を含めました。
    § ダウントレンド気味なエコシステムを外し、
    アップトレンドなエコシステムを入れました
    § 利用頻度が高くなってきたエコシステムの説明を追加しました
    § 色々追加しました
    2年間で頂いた質問をちょこちょこメモしてあったので
    その辺りを追記したり

    View Slide

  51. index.htmlファイルなどをわざわざ配置したりなどしていましたが、
    独自のコンテナイメージを作ったのでわかりやすくなりました。
    その他にもいくつか…

    View Slide

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

    View Slide