Using Kubernetes on Google Container Engine

23
Using Kubernetes on Google Container Engine Etsuji Nakai Cloud Solutions Architect at Google November 11, 2016 ver1.1

Transcript of Using Kubernetes on Google Container Engine

Page 1: Using Kubernetes on Google Container Engine

Using Kuberneteson Google Container Engine

Etsuji NakaiCloud Solutions Architect at GoogleNovember 11, 2016 ver1.1

Page 2: Using Kubernetes on Google Container Engine

Docker and Container Technology

Page 3: Using Kubernetes on Google Container Engine

Docker の基本機能

Dockerfile

① コンテナイメージを自動作成

OS ファイル

アプリケーションライブラリー

アプリケーションバイナリー

イメージの作成手順を記載

コンテナイメージ

アプリケーション実行に必要な最低限のファイルを提供

② コンテナイメージを保存・公開

③ ホストサーバーに イメージを配布・実行

Page 4: Using Kubernetes on Google Container Engine

Linux コンテナの概要

コンテナ

物理サーバー/仮想マシン

アプ

リケ

ーシ

ョン

アプ

リケ

ーシ

ョン

・・・

物理サーバー/仮想マシン

Linux カーネル

・・・

コンテナ

通常の Linux 環境 コンテナで分割した環境

コンテナごとに見える環境が異なる

すべてのアプリケーションから同じ環境が見える

▪「 Linux コンテナ」は、プロセスグループごとに独立した OS 環境を見せる技術● ローカルディスクの内容(ディレクトリー内のファイル)● ネットワーク環境( NIC 、 IP アドレス)● CPU 、メモリー割り当てなど

Linux カーネル

アプ

リケ

ーシ

ョン

アプ

リケ

ーシ

ョン

Page 5: Using Kubernetes on Google Container Engine

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 コンテナはこれらの機能を組み合わせて実現されるものであり、「コンテナ」という単一の技術があるわけではありません。

Page 6: Using Kubernetes on Google Container Engine

コンテナイメージの管理機能

▪ 「コンテナイメージ」の実体は、コンテナに割り当てるディスクイメージに、ネットワーク設定などの環境情報を付与したものにすぎません。

▪ Docker の特徴は、次のような「イメージ管理機能」にあります。

▪ Dockerfile :コンテナイメージを自動作成する仕組み

▪ Image Registry :コンテナイメージを共有・配布する仕組み

コンテナー

アプ

リケ

ーシ

ョン

ディレクトリツリー

ホスト OS にマウント

ルートディレクトリとして割り当て

コンテナイメージ

Page 7: Using Kubernetes on Google Container Engine

Docker Quick Tour

Page 8: Using Kubernetes on Google Container Engine

コンテナとイメージのライフサイクル

参考: Docker におけるコンテナのライフサイクルhttp://d.hatena.ne.jp/enakai00/20140628/1403933390

保存イメージスナップショット

コンテナ起動時にスナップショットを作成×run

commit

rm

プロセス

スナップショット

stop

start

保存イメージ

コンテナを停止するとプロセスが停止(ディスクイメージは残っている)

コンテナを削除するとディスクイメージを破棄

ディスクイメージを複製して保存イメージとして登録

Page 9: Using Kubernetes on Google Container Engine

コンテナとのネットワーク通信

コンテナ

ホスト LinuxvethXX

eth0

docker0

eth0

外部ネットワーク

172.17.42.1# docker run -d -p 8000:80 ...

ホスト Linux のIP アドレスに接続

TCP 8000

TCP 80

ポートフォワーディング

▪ 外部ネットワークとの通信は、ホスト Linux で NAT が行われます。● コンテナから外部へは、デフォルトで IP マスカレードが行われます。● 外部からコンテナへは、コンテナ起動時のオプションでポートフォワーディングを設定します。

Page 10: Using Kubernetes on Google Container Engine

Docker の基本操作▪ Apache HTTP サーバーを起動して index.html を用意する例です。

$ docker search httpdNAME DESCRIPTION STARS OFFICIAL AUTOMATEDhttpd The Apache HTTP Server Project 780 [OK] centos/httpd 9 [OK]...

$ docker pull httpd

$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEhttpd latest 3076aa23a73c 9 days ago 193.3 MB

$ docker run -d --name webserver -p 8080:80 httpd:latesta101d9d6fbf78a5c1b0fcf1339f1ee1a4f94eb7c9a74e51ea769d2050f84712c

$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa101d9d6fbf7 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

Page 11: Using Kubernetes on Google Container Engine

Docker の基本操作▪ コンテナ内部で bash を起動して、コンテナ内の様子を確認する例です。

$ docker exec -it webserver bash

root@a101d9d6fbf7:/usr/local/apache2# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 23:20 ? 00:00:00 httpd -DFOREGROUNDdaemon 8 1 0 23:20 ? 00:00:00 httpd -DFOREGROUNDdaemon 9 1 0 23:20 ? 00:00:00 httpd -DFOREGROUNDdaemon 10 1 0 23:20 ? 00:00:00 httpd -DFOREGROUNDroot 118 0 2 23:38 ? 00:00:00 bashroot 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# dfFilesystem 1K-blocks Used Available Use% Mounted onnone 10188088 5695284 3952236 60% /tmpfs 304344 0 304344 0% /devtmpfs 304344 0 304344 0% /sys/fs/cgroup/dev/sda1 10188088 5695284 3952236 60% /etc/hostsshm 65536 0 65536 0% /dev/shm

root@a101d9d6fbf7:/usr/local/apache2# exit

Page 12: Using Kubernetes on Google Container Engine

From Borg to Kubernetes

Page 13: Using Kubernetes on Google Container Engine

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

Page 14: Using Kubernetes on Google Container Engine

プラネットスケールのサービスを実現するポイント▪ 全世界のすべてのデータセンターで共通化されたインフラの提供▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中▪ リソーススケジューラーによるアプリケーションデプロイの最適化▪ アプリケーションのオートスケールとサービスの抽象化▪ データストアとアプリケーションの分離

分散ソフトウェア技術で実現したDatacenter as a Computer

Borg/Omega

Page 15: Using Kubernetes on Google Container Engine

Borg / Omega の特徴▪ コンテナを用いたアプリケーション実行基盤▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中▪ リソーススケジューラーによるアプリケーションデプロイの最適化

http://www.hpts.ws/papers/2015/wilkes.pdf

Page 16: Using Kubernetes on Google Container Engine

Kubernetes

▪ オープンソースコミュニティで開発されているコンテナオーケストレーションツール▪ Google におけるコンテナ管理の経験を踏まえて、 Google のエンジニアが設計を主導▪ ベアメタルサーバー上のコンテナと仮想マシン上のコンテナを管理可能▪ マイクロサービスを効率的にデプロイ、アップデートする機能として、コンテナ (Pod)

のオートスケール、 Blue Green Deployment 、 Rolling Update などを提供

Page 17: Using Kubernetes on Google Container Engine

Deployment と Service によるマイクロサービス管理

▪ Deployment :同一の Pod を複数起動してスケールする仕組みを提供▪ Service :同一の Pod に代表 IP アドレスを割り当てて抽象化する仕組みを提供

ReplicaSet- replicas: 3- selector:

- app: MyApp- version: v1

Deployment- name: MyApp

Virtual IP

Service- name: MyService

Page 18: Using Kubernetes on Google Container Engine

Blue Green Deployment

▪ 別バージョンの Pod群を並列稼働して、 Service 定義の変更でアクセス先を切り替え

ReplicaSet- replicas: 3- selector:

- app: MyApp- version: v1

ReplicaSet- replicas: 3- selector:

- app: MyApp- version: v2

Virtual IP

Page 19: Using Kubernetes on Google Container Engine

Rolling Update

▪ 同一の Deployment 配下の Pod を段階的に新バージョンに入れ替えることでサービスのライブアップデートを実施

ReplicaSet- replicas: 3- selector:

- app: MyApp- version: v1

ReplicaSet- replicas: 3- selector:

- app: MyApp- version: v2

v2 を追加v1 を削除

Page 20: Using Kubernetes on Google Container Engine

GKE :Google Container Engine

Page 21: Using Kubernetes on Google Container Engine

GKE : Google Container Engine

▪ Google Cloud Platform で提供される Kubernetes のマネージドサービス環境▪ GUI/CUI操作、 API リクエストにより Kubernetes のクラスタ環境を自動構築▪ Cloud SQL 、 Cloud Datastore などのデータストアサービスと連携可能▪ Service によるネットワーク管理と Cloud Load Balancing のグローバル・ロードバラン

サーを自動連携

Page 22: Using Kubernetes on Google Container Engine

デモンストレーションをお楽しみください

http://enakai00.hatenablog.com/entry/2016/08/10/152334

Page 23: Using Kubernetes on Google Container Engine

Thank You!