Kubernetesを知る
by
Takuto Nagami
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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を好きになろう