Advertisement
Advertisement

More Related Content

Slideshows for you(20)

Viewers also liked(20)

Advertisement

Similar to Using Kubernetes on Google Container Engine(20)

More from Etsuji Nakai(20)

Advertisement

Recently uploaded(20)

Using Kubernetes on Google Container Engine

  1. Using Kubernetes on Google Container Engine Etsuji Nakai Cloud Solutions Architect at Google November 11, 2016 ver1.1
  2. Docker and Container Technology
  3. Docker の基本機能 Dockerfile ① コンテナイメージを自動作成 OS ファイル アプリケーション ライブラリー アプリケーション バイナリー イメージの 作成手順を記載 コンテナ イメージ アプリケーション実行に必要な 最低限のファイルを提供 ② コンテナイメージを保存・公開 ③ ホストサーバーに  イメージを配布・実行
  4. Linux コンテナの概要 コンテナ 物理サーバー/仮想マシン アプリケーション アプリケーション ・・・ 物理サーバー/仮想マシン Linux カーネル ・・・ コンテナ 通常の Linux 環境 コンテナで分割した環境 コンテナごとに 見える環境が異なる すべてのアプリケーション から同じ環境が見える ▪ 「 Linux コンテナ」は、プロセスグループごとに独立した OS 環境を見せる技術 ● ローカルディスクの内容(ディレクトリー内のファイル) ● ネットワーク環境( NIC 、 IP アドレス) ● CPU 、メモリー割り当てなど Linux カーネル アプリケーション アプリケーション
  5. 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 コンテナはこれらの機能を組み合わせて実現されるものであり、「コンテナ」という単一の技 術があるわけではありません。
  6. コンテナイメージの管理機能 ▪ 「コンテナイメージ」の実体は、コンテナ に割り当てるディスクイメージに、ネット ワーク設定などの環境情報を付与したもの にすぎません。 ▪ Docker の特徴は、次のような「イメージ 管理機能」にあります。 ▪ Dockerfile : コンテナイメージを自動作成する仕組み ▪ Image Registry : コンテナイメージを共有・配布する仕組み コンテナー アプリケーション ディレクトリツリー ホスト OS にマウント ルートディレクトリ として割り当て コンテナイメージ
  7. Docker Quick Tour
  8. コンテナとイメージのライフサイクル 参考: Docker におけるコンテナのライフサイクル http://d.hatena.ne.jp/enakai00/20140628/1403933390 保存イメージ スナップ ショット コンテナ起動時に スナップショットを作成 × run commit rm プロセス スナップ ショット stop start 保存イメージ コンテナを停止するとプロセスが停止 (ディスクイメージは残っている) コンテナを削除すると ディスクイメージを破棄 ディスクイメージを複製して 保存イメージとして登録
  9. コンテナとのネットワーク通信 コンテナ ホスト Linux vethXX eth0 docker0 eth0 外部ネットワーク 172.17.42.1 # docker run -d -p 8000:80 ... ホスト Linux の IP アドレスに接続 TCP 8000 TCP 80 ポート フォワー ディング ▪ 外部ネットワークとの通信は、ホスト Linux で NAT が行われます。 ● コンテナから外部へは、デフォルトで IP マスカレードが行われます。 ● 外部からコンテナへは、コンテナ起動時のオプションでポートフォワーディングを設定します。
  10. 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
  11. 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
  12. From Borg to Kubernetes
  13. 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
  14. プラネットスケールのサービスを実現するポイント ▪ 全世界のすべてのデータセンターで共通化されたインフラの提供 ▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中 ▪ リソーススケジューラーによるアプリケーションデプロイの最適化 ▪ アプリケーションのオートスケールとサービスの抽象化 ▪ データストアとアプリケーションの分離 分散ソフトウェア技術で実現した Datacenter as a Computer Borg/Omega
  15. Borg / Omega の特徴 ▪ コンテナを用いたアプリケーション実行基盤 ▪ OS レイヤーを隠蔽して、アプリケーションレベルでの管理に集中 ▪ リソーススケジューラーによるアプリケーションデプロイの最適化 http://www.hpts.ws/papers/2015/wilkes.pdf
  16. Kubernetes ▪ オープンソースコミュニティで開発されているコンテナオーケストレーションツール ▪ Google におけるコンテナ管理の経験を踏まえて、 Google のエンジニアが設計を主導 ▪ ベアメタルサーバー上のコンテナと仮想マシン上のコンテナを管理可能 ▪ マイクロサービスを効率的にデプロイ、アップデートする機能として、コンテナ (Pod) のオートスケール、 Blue Green Deployment 、 Rolling Update などを提供
  17. Deployment と Service によるマイクロサービス管理 ▪ Deployment :同一の Pod を複数起動してスケールする仕組みを提供 ▪ Service :同一の Pod に代表 IP アドレスを割り当てて抽象化する仕組みを提供 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v1 Deployment - name: MyApp Virtual IP Service - name: MyService
  18. Blue Green Deployment ▪ 別バージョンの Pod 群を並列稼働して、 Service 定義の変更でアクセス先を切り替え ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v1 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v2 Virtual IP
  19. Rolling Update ▪ 同一の Deployment 配下の Pod を段階的に新バージョンに入れ替えることでサービスの ライブアップデートを実施 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v1 ReplicaSet - replicas: 3 - selector: - app: MyApp - version: v2 v2 を追加v1 を削除
  20. GKE : Google Container Engine
  21. GKE : Google Container Engine ▪ Google Cloud Platform で提供される Kubernetes のマネージドサービス環境 ▪ GUI/CUI 操作、 API リクエストにより Kubernetes のクラスタ環境を自動構築 ▪ Cloud SQL 、 Cloud Datastore などのデータストアサービスと連携可能 ▪ Service によるネットワーク管理と Cloud Load Balancing のグローバル・ロードバラン サーを自動連携
  22. デモンストレーションをお楽しみください http://enakai00.hatenablog.com/entry/2016/08/10/152334
  23. Thank You!
Advertisement