Using Kubernetes on Google Container Engine
-
Upload
etsuji-nakai -
Category
Technology
-
view
1.012 -
download
5
Transcript of Using Kubernetes on Google Container Engine
Using Kuberneteson Google Container Engine
Etsuji NakaiCloud Solutions Architect at GoogleNovember 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
保存イメージ
コンテナを停止するとプロセスが停止(ディスクイメージは残っている)
コンテナを削除するとディスクイメージを破棄
ディスクイメージを複製して保存イメージとして登録
コンテナとのネットワーク通信
コンテナ
ホスト LinuxvethXX
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 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
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
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!