KEMBAR78
Using Kubernetes on Google Container Engine | PDF
Using Kubernetes
on Google Container Engine
Etsuji Nakai
Cloud Solutions Architect at Google
November 11, 2016 ver1.1
Docker and
Container Technology
Docker の基本機能
Dockerfile
① コンテナイメージを自動作成
OS ファイル
アプリケーション
ライブラリー
アプリケーション
バイナリー
イメージの
作成手順を記載
コンテナ
イメージ
アプリケーション実行に必要な
最低限のファイルを提供
② コンテナイメージを保存・公開
③ ホストサーバーに
 イメージを配布・実行
Linux コンテナの概要
コンテナ
物理サーバー/仮想マシン
アプリケーション
アプリケーション
・・・
物理サーバー/仮想マシン
Linux カーネル
・・・
コンテナ
通常の Linux 環境 コンテナで分割した環境
コンテナごとに
見える環境が異なる
すべてのアプリケーション
から同じ環境が見える
▪ 「 Linux コンテナ」は、プロセスグループごとに独立した OS 環境を見せる技術
●
ローカルディスクの内容(ディレクトリー内のファイル)
●
ネットワーク環境( NIC 、 IP アドレス)
●
CPU 、メモリー割り当てなど
Linux カーネル
アプリケーション
アプリケーション
Namespace によるリソースの分割
▪ コンテナによって分離されるリソースにはいくつかの種類がありますが、内部的には、
それぞれ異なる技術で実現されています。
●
ファイルシステムの分離  → Mount namespace (kernel 2.4.19)
●
ホストネームの分離 → UTS namespace (kernel 2.6.19)
●
IPC の分離 → IPC namespece (kernel 2.6.19)
●
ユーザ( UID/GID )の分離 → User namespace (kernel 2.6.23 〜 kernel 3.8)
●
プロセステーブルの分離  → PID namespace (kernel 2.6.24)  
●
ネットワーク設定の分離  → Network Namepsace (kernel 2.6.24)
●
リソース配分の制御 → Control groups
※ 参考資料「 Namespaces in operation, part 1: namespaces overview 」 http://lwn.net/Articles/531114/
▪ Linux コンテナはこれらの機能を組み合わせて実現されるものであり、「コンテナ」という単一の技
術があるわけではありません。
コンテナイメージの管理機能
▪ 「コンテナイメージ」の実体は、コンテナ
に割り当てるディスクイメージに、ネット
ワーク設定などの環境情報を付与したもの
にすぎません。
▪ Docker の特徴は、次のような「イメージ
管理機能」にあります。
▪ Dockerfile :
コンテナイメージを自動作成する仕組み
▪ Image Registry :
コンテナイメージを共有・配布する仕組み
コンテナー
アプリケーション
ディレクトリツリー
ホスト OS にマウント
ルートディレクトリ
として割り当て
コンテナイメージ
Docker
Quick Tour
コンテナとイメージのライフサイクル
参考: Docker におけるコンテナのライフサイクル
http://d.hatena.ne.jp/enakai00/20140628/1403933390
保存イメージ
スナップ
ショット
コンテナ起動時に
スナップショットを作成
×
run
commit
rm
プロセス
スナップ
ショット
stop
start
保存イメージ
コンテナを停止するとプロセスが停止
(ディスクイメージは残っている)
コンテナを削除すると
ディスクイメージを破棄
ディスクイメージを複製して
保存イメージとして登録
コンテナとのネットワーク通信
コンテナ
ホスト Linux
vethXX
eth0
docker0
eth0
外部ネットワーク
172.17.42.1
# docker run -d -p 8000:80 ...
ホスト Linux の
IP アドレスに接続
TCP 8000
TCP 80
ポート
フォワー
ディング
▪ 外部ネットワークとの通信は、ホスト Linux で NAT が行われます。
●
コンテナから外部へは、デフォルトで IP マスカレードが行われます。
●
外部からコンテナへは、コンテナ起動時のオプションでポートフォワーディングを設定します。
Docker の基本操作
▪ Apache HTTP サーバーを起動して index.html を用意する例です。
$ docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 780 [OK]
centos/httpd 9 [OK]
...
$ docker pull httpd
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
httpd latest 3076aa23a73c 9 days ago 193.3 MB
$ docker run -d --name webserver -p 8080:80 httpd:latest
a101d9d6fbf78a5c1b0fcf1339f1ee1a4f94eb7c9a74e51ea769d2050f84712c
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a101d9d6fbf7 httpd:latest "httpd-foreground" 2 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp webserver
$ echo '<h1>Hello, World!</h1>' > /tmp/index.html
$ docker cp /tmp/index.html webserver:/usr/local/apache2/htdocs/index.html
Docker の基本操作
▪ コンテナ内部で bash を起動して、コンテナ内の様子を確認する例です。
$ docker exec -it webserver bash
root@a101d9d6fbf7:/usr/local/apache2# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 23:20 ? 00:00:00 httpd -DFOREGROUND
daemon 8 1 0 23:20 ? 00:00:00 httpd -DFOREGROUND
daemon 9 1 0 23:20 ? 00:00:00 httpd -DFOREGROUND
daemon 10 1 0 23:20 ? 00:00:00 httpd -DFOREGROUND
root 118 0 2 23:38 ? 00:00:00 bash
root 124 118 0 23:38 ? 00:00:00 ps -ef
root@a101d9d6fbf7:/usr/local/apache2# ip a
...
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe12:2/64 scope link
valid_lft forever preferred_lft forever
root@a101d9d6fbf7:/usr/local/apache2# df
Filesystem 1K-blocks Used Available Use% Mounted on
none 10188088 5695284 3952236 60% /
tmpfs 304344 0 304344 0% /dev
tmpfs 304344 0 304344 0% /sys/fs/cgroup
/dev/sda1 10188088 5695284 3952236 60% /etc/hosts
shm 65536 0 65536 0% /dev/shm
root@a101d9d6fbf7:/usr/local/apache2# exit
From Borg to Kubernetes
Google におけるコンテナの活用
▪ Large-scale cluster management at Google with Borg
●
http://research.google.com/pubs/pub43438.html
▪ Borg, Omega, and Kubernetes
●
http://research.google.com/pubs/pub44843.html
プラネットスケールのサービスを実現するポイント
▪ 全世界のすべてのデータセンターで共通化されたインフラの提供
▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中
▪ リソーススケジューラーによるアプリケーションデプロイの最適化
▪ アプリケーションのオートスケールとサービスの抽象化
▪ データストアとアプリケーションの分離
分散ソフトウェア技術で実現した
Datacenter as a Computer
Borg/Omega
Borg / Omega の特徴
▪ コンテナを用いたアプリケーション実行基盤
▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中
▪ リソーススケジューラーによるアプリケーションデプロイの最適化
http://www.hpts.ws/papers/2015/wilkes.pdf
Kubernetes
▪ オープンソースコミュニティで開発されているコンテナオーケストレーションツール
▪ Google におけるコンテナ管理の経験を踏まえて、 Google のエンジニアが設計を主導
▪ ベアメタルサーバー上のコンテナと仮想マシン上のコンテナを管理可能
▪ マイクロサービスを効率的にデプロイ、アップデートする機能として、コンテナ (Pod)
のオートスケール、 Blue Green Deployment 、 Rolling Update などを提供
Deployment と Service によるマイクロサービス管理
▪ Deployment :同一の Pod を複数起動してスケールする仕組みを提供
▪ Service :同一の Pod に代表 IP アドレスを割り当てて抽象化する仕組みを提供
ReplicaSet
- replicas: 3
- selector:
- app: MyApp
- version: v1
Deployment
- name: MyApp
Virtual IP
Service
- name: MyService
Blue Green Deployment
▪ 別バージョンの Pod 群を並列稼働して、 Service 定義の変更でアクセス先を切り替え
ReplicaSet
- replicas: 3
- selector:
- app: MyApp
- version: v1
ReplicaSet
- replicas: 3
- selector:
- app: MyApp
- version: v2
Virtual IP
Rolling Update
▪ 同一の Deployment 配下の Pod を段階的に新バージョンに入れ替えることでサービスの
ライブアップデートを実施
ReplicaSet
- replicas: 3
- selector:
- app: MyApp
- version: v1
ReplicaSet
- replicas: 3
- selector:
- app: MyApp
- version: v2
v2 を追加v1 を削除
GKE :
Google Container Engine
GKE : Google Container Engine
▪ Google Cloud Platform で提供される Kubernetes のマネージドサービス環境
▪ GUI/CUI 操作、 API リクエストにより Kubernetes のクラスタ環境を自動構築
▪ Cloud SQL 、 Cloud Datastore などのデータストアサービスと連携可能
▪ Service によるネットワーク管理と Cloud Load Balancing のグローバル・ロードバラン
サーを自動連携
デモンストレーションをお楽しみください
http://enakai00.hatenablog.com/entry/2016/08/10/152334
Thank You!

Using Kubernetes on Google Container Engine