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

Upload: etsuji-nakai

Post on 16-Apr-2017

1.012 views

Category:

Technology


5 download

TRANSCRIPT

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!