Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Kubernetes ͷߏ੒ཁૉ

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Kubernetes Core

Slide 7

Slide 7 text

,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

Slide 8

Slide 8 text

,VCFSOFUFT$PSF

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Cloud Controller Manager

Slide 16

Slide 16 text

,VCFSOFUFT$PSF

Slide 17

Slide 17 text

,VCFSOFUFTߏஙɾӡ༻ͷ͠΍͢͞ Cloud Controller Manager は「共通のコア部分」と「クラウド固有部分」 から構成 AWS、GCP、OpenStack など多くの cloud-provider が⽤意されている “type: LoadBalancer” Service の制御関数やノードの情報の取得など 4 つの Controller Service、Route、Node、NodeLyfeCycle 共通部分 cloud-provider-gcp cloud-provider-aws

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Ingress Controller

Slide 20

Slide 20 text

*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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

֎෦ͷ -#Λར༻ͨ͠ *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

Slide 24

Slide 24 text

֎෦ͷ -#Λར༻ͨ͠ *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 ロードバランシングが⾏われる

Slide 25

Slide 25 text

֎෦ͷ -#Λར༻ͨ͠ *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)

Slide 26

Slide 26 text

֎෦ͷ -#Λར༻ͨ͠ *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 メンバー書き換えが遅延しやすいため考慮が必要

Slide 27

Slide 27 text

CSI Driver

Slide 28

Slide 28 text

$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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Authentication Module

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Other

Slide 34

Slide 34 text

・任意のスキーマで CustomResource を追加する機能がある ・Controller を実装するライブラリ・フレームワークが提供されている Controllerの中⾝ = API の操作 + ロジック 元となるリソースの データを監視し reconcile() { … } 何かしらの処理をする (調整・収束させ続ける) ,VCFSOFUFT $POUSPMMFS

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

Slide 38

Slide 38 text

Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

Slide 39

Slide 39 text

Multi Cluster Service / Ingress を提供 Ͱ͸ʁ

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Conclusion

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Thank you for your attention @amsy810

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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