Slide 1

Slide 1 text

アーキテクチャから学ぶ 
 Kubernetesの全体像 Developers Summit 2 0 2 4 ( 2 0 2 4 / 2 / 1 5 ) @bells 1 7

Slide 2

Slide 2 text

▶ @bells 1 7 ▶ Software Engineer@ 3 -shake inc. ▶ kubernetes & kubernetes-csi member ▶ Kubernetes Internal Organizer ▶ Kubernetes Novice Tokyo Organizer ← New! ▶ #kubenews ▶ X(Twitter): @bells 1 7 _ ▶ GitHub: @bells 1 7

Slide 3

Slide 3 text

突然ですが みなさん本番環境でコンテナ使ってますか?

Slide 4

Slide 4 text

よく名前を⽿にする コンテナオーケストレーションツール ▶ AWS Lambda ▶ Amazon ECS ▶ Cloud Run(Google Cloud) ▶ App Engine(Google Cloud) ▶ Heroku ▶ Nomad(Hashicorp) ▶ Kubernetes

Slide 5

Slide 5 text

よく名前を⽿にする コンテナオーケストレーションツール ▶ AWS Lambda ▶ Amazon ECS ▶ Cloud Run(Google Cloud) ▶ App Engine(Google Cloud) ▶ Heroku ▶ Nomad(Hashicorp) ▶ Kubernetes ← 今回はこれについてお話します

Slide 6

Slide 6 text

Kubernetes とは? ▶ コンテナオーケストレーションツールの1つ ▶ Googleが内部で運⽤していたコンテナ基盤であるBorgをベースとしてる ▶ Cloud Native Computing Foundation(CNCF)に寄贈済み 
 (成熟度レベル: GRADUATED)

Slide 7

Slide 7 text

CNCFプロジェクトの成熟度レベル

Slide 8

Slide 8 text

Kubernetesの特徴 ▶ サービスディスカバリとロードバランシング ▶ ストレージオーケストレーション ▶ ⾃動化されたロールアウトとロールバック ▶ ⾃動ビンパッキング ▶ セルフヒーリング ▶ 秘密情報と設定の管理 ▶ バッチ実⾏ ▶ ⽔平スケーリング ▶ IPv 4 /IPv 6 デュアルスタック ▶ 拡張性を考慮した設計 https://kubernetes.io/docs/concepts/overview/ より

Slide 9

Slide 9 text

Kubernetes Controllerという仕組みが これら全てを⽀えている と言っても過言じゃない

Slide 10

Slide 10 text

ということで今⽇のお話 ▶ Kubernetesの基盤となる”Controller”について ▶ Kubernetesはどのように”Controller”を使⽤しているのか?

Slide 11

Slide 11 text

ということでControllerのお話

Slide 12

Slide 12 text

https://github.com/kubernetes/website/blob/fb 6 3 6 4 da 0 afd 1 9 e 8 a 9 5 1 5 aaae 2 de 9 bc 7 4 a 0 a 6 abd/static/images/docs/components-of-kubernetes.png Kubernetesの全体像

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Kubernetes Controller ▶ Kubernetes Controller: 監視対象リソース変更や⼀定時間経過などのイベントを 
 トリガーとして、調整ループを実⾏するアプリケーション ▶ 調整ループ: 宣⾔されたあるべき状態と現在の状態との⽐較を⾏い、現在の状態を 
 あるべき状態に変更する制御ループ ※ 調整ループという表現はKubernetesの公式ドキュメント内には
 登場しないが、よく使われるのでここでは上記のように説明してる

Slide 15

Slide 15 text

https://github.com/kubernetes/sample-controller/blob/master/docs/images/client-go-controller-interaction.jpeg

Slide 16

Slide 16 text

https://github.com/kubernetes/website/blob/fb 6 3 6 4 da 0 afd 1 9 e 8 a 9 5 1 5 aaae 2 de 9 bc 7 4 a 0 a 6 abd/static/images/docs/components-of-kubernetes.png kube-api-server以外のConponentはControllerを中⼼として多くの機能を実現している

Slide 17

Slide 17 text

Kubernetesの宣⾔的APIという仕組みは 
 Controllerによって成り⽴っている

Slide 18

Slide 18 text

Controllerの⾃作によってKubernetesそのものを拡張可能 ▶ Controllerはユーザーが⾃分で開発~デプロイすることでKubernetesそのものの 
 機能を拡張することが可能 ▶ Custom Resource(CR)を利⽤することで独⾃のリソースをKubernetes内に作成できる ▶ 上記を組み合わせたものを”Kubernetes Operator”と呼んだりする ▶ e.g. + cert-manager: CRを利⽤してロードバランサーなどで使⽤する証明書の発⾏‧管理など を⾏える + HNC: Kubernetesの名前空間(Namespace)を階層化して使⽤できる + Argo CD: GitOptsによるデプロイを実現 + etc … ▶ Controllerを⾃作するためのフレームワークも有り(controller-runtime/kubebuilder)

Slide 19

Slide 19 text

Kubernetesのコアとなる 
 Kubernetes Controllerの仕組みを解説しました

Slide 20

Slide 20 text

https://github.com/kubernetes/website/blob/fb 6 3 6 4 da 0 afd 1 9 e 8 a 9 5 1 5 aaae 2 de 9 bc 7 4 a 0 a 6 abd/static/images/docs/components-of-kubernetes.png 次はKubrernetesがどのようにControllerを使⽤しているのか⾒てみましょう

Slide 21

Slide 21 text

(kube|cloud)-controller-manager

Slide 22

Slide 22 text

kube-controller-manager ▶ (主に)cloud-controller-managerが実⾏する以外の各種Controllerを 
 まとめて実⾏~管理するやつ ▶ 実際にはその他のComponentでもいくつもControllerを持ってはいる ▶ 設定によって起動するController数は前後するが、 
 ⼤体30-40種類のControllerを実⾏ ▶ 環境によってはcloud-controller-managerのControllerを実⾏を⾏う

Slide 23

Slide 23 text

cloud-controller-manager ▶ 実⾏基盤(クラウド)と連携して動作するコントローラーを動かす ▶ Cloud Providerという実⾏基盤との連携⽤コンポーネントを組み込む 
 ことで連携を⾏う

Slide 24

Slide 24 text

Pod関連Controller

Slide 25

Slide 25 text

Endponts & EndpointSlice関連Controller Overview

Slide 26

Slide 26 text

kube-proxyによるiptables設定

Slide 27

Slide 27 text

kube-proxy とは? ▶ Worker Nodeで動作するCore Componentの1つ ▶ 主にServiceリソースとEndpointSliceリソースを元にネットワーク設定を 
 ⾏い、Serviceのエンドポイント(e.g. foo.bar.svc.cluster.local)にアクセス 
 した際にPodにリクエストが届くようにしてくれるコンポーネント ▶ 動作モードには下記の3つがある(userspaceというモードもあったが削除された) ▶ iptables(デフォルト) ▶ ipvs ▶ kernelspace(Windows⽤) ▶ IPv 4 とIPv 6 のデュアルスタックのサポートも有り

Slide 28

Slide 28 text

iptablesが設定するNAT設定によるパケット処理フローの例

Slide 29

Slide 29 text

Service/EndpointSliceリソースを元にControllerによってiptablesの設定を⾏う

Slide 30

Slide 30 text

kubeletがコンテナを起動するまでの流れ

Slide 31

Slide 31 text

Kubelet ▶ Kubernetesクラスターの各ノードで動作するコンポーネント ▶ コンテナランタイムと連携しWorker Nodeで動かすコンテナとその関連 
 リソースを管理する

Slide 32

Slide 32 text

コンテナ起動を⾏うKubeletのメインループはControllerライクな 
 イベント駆動型になっている

Slide 33

Slide 33 text

CSI DriverʹΑΔKubernetesͷϘϦϡʔϜར༻

Slide 34

Slide 34 text

αΠυΧʔΞϓϦέʔγϣϯʹΑΔ࿈ܞ https://github.com/kubernetes/community/blob/d83cd53979d08ac0e0e33704c6aec6b1c3cb7c8d/contributors/design-proposals/storage/container-storage-interface_diagram1.png

Slide 35

Slide 35 text

ϘϦϡʔϜ࡞੒࣌ͷॲཧϑϩʔ

Slide 36

Slide 36 text

Pod࡞੒࣌ͷϘϦϡʔϜϚ΢ϯτ·Ͱͷϑϩʔ

Slide 37

Slide 37 text

まとめ

Slide 38

Slide 38 text

Kubernetesは 
 Controllerの組み合わせでできている Controllerと
 それに類する
 アプリケーション

Slide 39

Slide 39 text

今⽇のセッションの個別部分に関する詳しい内容は 
 このあたりの書籍‧資料をご確認ください! ▶ kube-proxy⼊⾨ ▶ kube-controller-manager⼊⾨ ▶ Kube API Server ▶ KubernetesとCoreDNSについて理解する ▶ CSI⼊⾨ ▶ Cloud Controller Manager Deep Dive ▶ kubeadmに学 ぶ クラスター構築 ▶ Kubeletから読み解くKubernetesの 
 コンテナ管理の裏側 ▶ CRIの仕様とdockershimの実装について 
 調 べ てみた ▶ controller-runtime Deep Dive

Slide 40

Slide 40 text

最後に宣伝

Slide 41

Slide 41 text

スリーシェイクではエンジニアを募集してます

Slide 42

Slide 42 text

Sreake SREの⽀援概要 SREの考え⽅に従って、AWSやGoogle Cloudを利⽤しているサービスの 技術戦略、設計、構築、運⽤までワンストップで対応 伴⾛型の⽀援で最終的にクライアントの内製化‧⾃⾛がゴール

Slide 43

Slide 43 text

参考資料 ▶ https://github.com/kubernetes/kubernetes/tree/v 1 . 2 8 . 4 ▶ https://kubernetes-csi.github.io/docs/ ▶ https://github.com/kubernetes/community/blob/master/contributors/design-proposals/ storage/container-storage-interface.md

Slide 44

Slide 44 text

画像引⽤元 ▶ https://github.com/kubernetes/community/tree/master/icons ▶ https://github.com/kubernetes/kubernetes/tree/master/logo ▶ https://github.com/cncf/artwork/tree/master/projects/kubernetes ▶ https://github.com/kubernetes/kubeadm/tree/main/logos

Slide 45

Slide 45 text

Thanks / Question? ▶ @bells 1 7 ▶ Slide: https://speakerdeck.com/bells 1 7 ▶ @bells 1 7 _