Kubernetesを知る
by
logica / Takuto Nagami
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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を好きになろう