Slide 1

Slide 1 text

logica X: @logica0419 GitHub: @logica0419 Kubernetesを知る

Slide 2

Slide 2 text

コンテナ仮想化と オーケストレーションシステム

Slide 3

Slide 3 text

サーバー上でアプリを動かす ● Webサーバーを動かすとき、生のコンピュータでは不便 ○ リソースの食い合い、セキュリティ懸念 など

Slide 4

Slide 4 text

計算リソースの仮想化 ● リソースの配分ができるようになる ● OSを変更できる ● セキュリティ向上

Slide 5

Slide 5 text

従来の仮想化 (VM) の欠点 ● 仮想化 = ハードウェアをシミュレーション ○ 非常にリソースを圧迫 ● ハイパーバイザによる効率化は限定的

Slide 6

Slide 6 text

カーネル - OSのコア ● OS: コンピューター全体の動作を管理・制御する ● カーネル: OSの中でも、ハードウェアの制御を担う ○ 一番重要な部品

Slide 7

Slide 7 text

コンテナ型仮想化 ● カーネルまではホストOSを使い回す = 軽い!

Slide 8

Slide 8 text

コンテナ仮想化 ● 実態は「あるプロセスを隔離する」技術 ○ Linuxは1つの親プロセスを起点としたプロセスの木 ● コンテナを支える技術 ○ Namespace - PID / Network / File System など ■ プロセスをグループ化し、隔離空間を作る ○ cgroup - プロセスグループへのリソース制限 ○ Capability - プロセスグループへの権限付与

Slide 9

Slide 9 text

爆発するコンテナ数 ● 同内容のコンテナを増やし、ロードバランシングしたい ● 企業だと数千〜数万は当たり前になってくる ○ 個別に管理するのはとても大変

Slide 10

Slide 10 text

コンテナオーケストレーション ● アプリケーションを大規模に展開するため、コンテナの 管理を自動化する

Slide 11

Slide 11 text

Kubernetes ● コンテナオーケストレーションシステムの一つ ● Google内製のシステム「Borg」を元に作られた汎用的 なインフラ基盤

Slide 12

Slide 12 text

Kubernetesの提供する リソース (モノ) の例

Slide 13

Slide 13 text

Pod ● 便利になったコンテナ、Kubernetesの最小単位 ● 1つのソフトウェアを構成する単位 ○ ≒ 1つのIPアドレスでくくって良い範囲

Slide 14

Slide 14 text

ReplicaSet / Deployment ● Podをまとめて管理するための仕組み ● ReplicaSet: 同じ内容のPodを指定個数立てる ● Deployment: ReplicaSetを使い安全にバージョン移行

Slide 15

Slide 15 text

Service ● 同じ内容のPod群に、均等に通信を振り分ける ● Pod群を1つのIPアドレスでまとめることができる

Slide 16

Slide 16 text

宣言型のオブジェクト管理 ● 「これをして下さい」でなく「この状態にして下さい」 ○ 「マニフェスト」であるべき状態を書く ● 暗黙知のない 安定した稼働

Slide 17

Slide 17 text

とにかく大量のコンテナを 楽に管理するための ノウハウが全て詰まっている 紹介した他にも、権限管理など様々なリソースがあります

Slide 18

Slide 18 text

Kubernetesの実態: リソース定義 と Reconciliation Loop

Slide 19

Slide 19 text

Reconciliation Loop ● リソースを理想の状態に持っていくための操作

Slide 20

Slide 20 text

Reconciliation Loop ● 以下の操作を一定時間ごとに繰り返す ○ 理想の状態 (宣言されたマニフェスト) を取得 ○ 実際の状態を観測 ○ 理想の状態と実際の状態を比較 ○ 2つの差を埋めるように、実際の状態を変更する ● Controllerと呼ばれる部品がこれを担当する ● Self-Healingが簡単に実装できる

Slide 21

Slide 21 text

例: DeploymentがPodになるまで ● 単純なReconciliation Loopの積み重ねで複雑性を実現

Slide 22

Slide 22 text

リソース定義 ● 同じリソースについて「理想の状態」「実際の状態」を 同じ構造で表したい! ● リソース定義で、どんなプロパティを持つのか定義する

Slide 23

Slide 23 text

定義されたリソースに対して Reconciliation Loopを回す ただそれだけのシステム ベースのアイデアは非常に単純

Slide 24

Slide 24 text

無限の拡張性

Slide 25

Slide 25 text

学校に行くバッグの準備を管理する ● これにリソース定義とReconciliation Loopを回すと、 常に毎朝同じバッグの中身を保つことができる 即ち、ありとあらゆるモノは リソース定義とReconciliation Loopで管理できる! (と信じている人たちがKubernetesを作っている)

Slide 26

Slide 26 text

Kubernetesを拡張する ● Custom Resource Definition ○ ユーザー独自のリソース定義 ● Custom Controller ○ ユーザー独自のReconciliation Loopを回す ● この二つの組み合わせがOperator Pattern ○ これを使ってKubernetesを無限に拡張できる

Slide 27

Slide 27 text

Kubernetesエコシステム ● Kubernetesを拡張して便利にするソフトウェア群

Slide 28

Slide 28 text

Kubernetesエコシステム ● 最近はAI方面もアツい ○ GPUを扱えるようにしたり、機械学習特化のジョブ スケジューラーだったり…

Slide 29

Slide 29 text

拡張性が、Kubernetesに どんな環境でも使える 汎用性を与えている これからも発展し続けて欲しい

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

今日話したこと ● コンテナ仮想化という技術 ● 大規模なコンテナ管理を担うKubernetes ● Kubernetesが提供するリソース ● リソース定義とReconciliation Loop ● 無限の拡張性

Slide 32

Slide 32 text

ありがとう ございました Kubernetesを好きになろう