Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Google Container Engine (GKE) &
Kubernetes のアーキテクチャ解説
九州インフラ交流勉強会 (Kixs) Vol.005
Proprietary + Confidential
Samir Hammoudi...
自己紹介
Samir Hammoudi(本イベントではサミえもんw)
クラウドカスタマエンジニア(セールスエンジニアね)
Twitter: @ksimir
LinkedIn: https://www.linkedin.com/in/hammou...
Copyright 2015 Google Inc
Googleでは10年間に渡り、すべてのサービスをコンテナ
で動かしてきた
毎週20億以上のコンテナを立ち上げている
Images by Connie Zhou
コンテナとは?
コンテナはアプリケーションコードとその依存性を一
つのユニットとしてまとめる
これにより、アプリケーションとインフラを疎結合にする
ことができる
• コンテナはアプリケーションとその依存性がまとまっているので、例え
ば、開発環境...
VM vs Container
VM
Container
なぜコンテナ?
軽量
仮想マシンに比べて
軽量でシンプル。数十ミリ秒
で起動
ポータブル
様々な実行環境に対応し、
デプロイメントが容易
効率性
リソース使用量が少なく、コ
ンピュートリソースを細分化
して効率的に利用可能
コンテナ管理の課題
Node Node
Cluster
Node
???
● 複数のノードに対するコンテナのデプロイは?
● ノード障害が発生した場合は?
● コンテナ障害が発生した場合は?
● アプリケーションのアップグレードはどうやって管理...
Kubernetes
κυβερνήτης: Greek for “pilot” or “helmsman of a ship”
the open source cluster manager from Google
Kubernetes (k8s) とは
● “コンテナオーケストレーション”
○ コンテナ中心のインフラ
● Googleの内部システムとコンテナの運用経験に
インスパイアされている
● Runs Anywhere
● 2014年にオープンソー...
Kubernetes のアーキテクチャ
Kubernetes のアーキテクチャ
API
UI
CLI
Master
Node 1
Node 2
Node 3
Node 4
Kubernetes Master
API
UI
CLI
API
Server
Scheduler Controller
etcd
Master ノードのコンポーネント
API Server
→ kubectl は API Server を REST API で叩くコマンドツール
Scheduler
→ Pod をノードにスケジュールするコンポーネント
Controller...
Kubernetes Node
Master
Docker Engine kubelet
kube proxy
supervisord
fluentd
Pod
Pod Pod
Pod
Pod
Pod
AddonsDNS UI
Pod
Pod
Worker ノードのコンポーネント
kubelet
→ ノードのエージェント
→ Pod の YAML ファイルに基づいて、定義されたコンテナを実行し、ストレージな
どをマウントし、正常に起動していることを担保
kube-proxy
→ 各ノ...
Addons
DNS
→ クラスタ内のDNSサービス
→ Kubernetes 1.3 からビルトインのサービス
→ Service や Pod は自動的にDNSに登録される
Web UI
→ Kubernetes Dashboard
コンテナを使用するサンプルアプリ
Client
Python
Web App
Redis
Database
Kubernetes Pod
1つか複数のコンテナをデプロイする単位
● 関連するコンテナ
● 同じコンテキストで実行するコンテナ
同じ Pod のコンテナは同じホスト名を持つ
各ポッドの隔離は:
● Namespace (process is...
Pod はデプロイ単位
Log Roller
Web Server
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machine
Ho...
Labels & Selectors
● 各 Kubernetes のオブジェクトに紐付けられ
るキーバリューペア
● オブジェクトのフィルタリングに使用
● オブジェクトの作成の際に設定され、いつで
も変更可能
● ラベルは API オブジェ...
多数のポッドを識別するには?
FE
FE
FE
FE
FE
FE
BE
BE
BE BEBE
BE
BE
BE
BE
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machine
Hos...
オブジェクトの識別
labels:
role: frontend
FE
FE
FE
FE
FE
FE
BE
BE
BE BEBE
BE
BE
BE
BE
Machine
Host
Machine
Host
Machine
Host
Machin...
オブジェクトの識別
labels:
role: frontend
stage: production
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machine
Host
Machin...
Pod をデプロイ
Master
Node
Docker kubelet
kube proxy
supervisord
fluentd
Web
Pod
DB
Pod
Registry
python
web
app
redis
db
Pod de...
Deployment
● YAML ファイルに設定されたポッドの数が
常に起動しているかを保証する
→ Pod をシャットダウンや起動する
● Deployment を replicas: 1 で作成すると、1
つの Pod が常に起動している...
Deployment で Pods をスケールする
Master
Docker kubelet
kube proxy
supervisord
fluentd
Web
Pod
1
DB
Pod
Registry
replicas
3
Deploy...
Services
アプリケーションのエンドポイント
● TCP / UDP をサポート
● kube-proxy 経由で Iptables を操作
Types
● ClusterIP (クラスタ内のみでアクセスできる VIP)
● NodePo...
Service をデプロイ
Client
Node
Web
Pod 1
DB
Pod
Web
Pod 2
Web
Pod 3
LB
Cluster
IP
Port
6379
Port
80
エンドポイントを抽象化
id: frontend-service
port: 8080
labels:
role: frontend
stage: production
Type: LoadBalancer
Frontend Service
F...
エンドポイントを抽象化
id: backend-service
port: 9000
labels:
role: backend
stage: production
Type: ClusterIP
Backend Service
BE BE B...
k8s node
今までのまとめ
Service
port : 80
name : web
Deployment
replicas=1
Pod
name : web
作成
公開
API Server
Pod に
アクセス
管理者
開発者
ユーザー
Service Discovery
Kuberenetes は2つのモードをビルトインでサポート
環境変数
→ Pod が実行すると、kubelet は自動的にクラスタ上で実行している各サービス
の環境変数を追加します
DNS
→ 新しいサービ...
Service Discovery - 環境変数(例)
サービス名: ”redis-master”
ポート: TCP 6379
クラスタ内のIP: 10.0.0.11
REDIS_MASTER_SERVICE_HOST=10.0.0.11
RE...
Dev と Prod の差異は環境変数で解決
Dev 環境のクラスタ
サービス名:Web
サービス名:Redis Redis
Web
redis_host = os.environ.get('REDIS_SERVICE_HOST', '')
r...
ConfigMap/Secret
コンテナイメージからアプリケーションの設定・パスワードを切り離してデプロイ可能とするリソース
ConfigMap → プレインテキスト
Secret → 暗号化可能(Alpha、k8s 1.7 以降)
2つの使...
ConfigMap のファイルマウント(例)
コンテナイメージ コンテナイメージ
nginx nginx
nginx.conf
ConfigMap
nginx.conf
マウント
⭕ ❌
メリット:ConfigMapのような外部リソースをマウ
...
Secret の環境変数(例)
$ kubectl get secret mysecret -o yaml
apiVersion: v1
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
k...
Kubernetes での役割のサマリー
Kubernetes Master の役割は以下となる
→ API Server / Scheduler / Replication Controller
各 Node は Pod を実行する役割
Po...
Minikube - ローカル環境
サポートされているKubernetes の機能
● DNS
● NodePorts
● ConfigMaps and Secrets
● Dashboards
● Container Runtime: Doc...
Google Container Engine (GKE)
vs Kubernetes
Kubernetes は Google の Borg からインスパイア
Google は Kubernetes の複数の SIG をリードしたり、積極的に開発にも参加して
います。
→ Kubernetes は Google が論文で出した B...
One click で k8s クラスタを作成
Kubernetes クラスタを手動で作る必要はない
普通だと、全てを手動でインストールする必要がある
● 例えば、ネットワーク:クラスタ間で Pod はどのように通信するのか? flannel ...
Master はマネージドサービス
● Master は Google により管理されており、自動的に更新される
→ Node はユーザによってコントロール
→ ノードのマイナー バージョン(x.X.x)がマスターのバージョンより 3 つ以上
...
Node もマネージドモデルにオプトイン可能
● Node の自動アップグレード
→ Node を1by1:unschedulable → drain → 古いバージョンのNodeを削除
→ 新しいバージョンのNodeを作成 → schedul...
GCP とのネイティブ連携
● Cloud IAM
→ クラスタのアクセス制御、クラスタ内は RBAC で
● Stackdriver Monitoring & Logging
→ One click で Monitoring と Loggin...
GCP の Preemptible VM との連携
● Preempitble VM って何者?
→ 超安いVM!普通の VM の7割以上安い!
● おいしすぎる話なんすけど、デメリットはなに??
→ VM は Max 24 時間起動する。その...
Container-Optimized OS (COS)
● 高速なブート
→ スケールアウトが早い
● セキュリティ
→ コンテナに必要なコンポーネントだけを持つOS
→ Verified boot
● Open Source
→ https...
Thank you!
Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説
Próximo SlideShare
Cargando en…5
×

de

Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 1 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 2 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 3 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 4 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 5 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 6 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 7 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 8 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 9 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 10 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 11 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 12 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 13 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 14 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 15 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 16 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 17 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 18 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 19 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 20 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 21 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 22 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 23 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 24 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 25 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 26 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 27 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 28 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 29 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 30 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 31 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 32 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 33 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 34 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 35 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 36 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 37 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 38 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 39 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 40 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 41 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 42 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 43 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 44 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 45 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 46 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 47 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 48 Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 Slide 49
Próximo SlideShare
福岡クラウドUG-BigQuery
Siguiente
Descargar para leer sin conexión y ver en pantalla completa.

53 recomendaciones

Compartir

Descargar para leer sin conexión

Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説

Descargar para leer sin conexión

Google Container Engine (GKE) のすごいところやメリットを理解するには、まずコンテナのオーケストレーションシステムである
Kubernetes をちゃんと理解する必要があります。
本資料では Kubernetes のアーキテクチャやコンポーネント及びリソースを1つずつ解説し、その後、GKE を使うとどれだけ Kubernetes が便利で実際に使えるかを説明します。

Libros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo

Audiolibros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo

Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説

  1. 1. Google Container Engine (GKE) & Kubernetes のアーキテクチャ解説 九州インフラ交流勉強会 (Kixs) Vol.005 Proprietary + Confidential Samir Hammoudi aka サミール クラウドカスタマエンジニア SEPTEMBER 2, 2017
  2. 2. 自己紹介 Samir Hammoudi(本イベントではサミえもんw) クラウドカスタマエンジニア(セールスエンジニアね) Twitter: @ksimir LinkedIn: https://www.linkedin.com/in/hammoudi/ → スイスで7年間コンスタントとしてプライベートクラウド系のプロジェクトを担当 → 3年半前に日本に移住、外資系大手IT ベンダーに入社 → 2017年11月にセールスエンジニアとしてGoogle に入社 → ゲーム会社を担当(ゲームが大好きなのでラッキー) → Cloud Spanner が大好き!
  3. 3. Copyright 2015 Google Inc Googleでは10年間に渡り、すべてのサービスをコンテナ で動かしてきた 毎週20億以上のコンテナを立ち上げている Images by Connie Zhou
  4. 4. コンテナとは? コンテナはアプリケーションコードとその依存性を一 つのユニットとしてまとめる これにより、アプリケーションとインフラを疎結合にする ことができる • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな る • オンプレミス、プライベートクラウド、パブリッククラウド等ことなる実行 環境間の移動が容易になる コンテナ イメージ 依存性 アプリケーションコード
  5. 5. VM vs Container VM Container
  6. 6. なぜコンテナ? 軽量 仮想マシンに比べて 軽量でシンプル。数十ミリ秒 で起動 ポータブル 様々な実行環境に対応し、 デプロイメントが容易 効率性 リソース使用量が少なく、コ ンピュートリソースを細分化 して効率的に利用可能
  7. 7. コンテナ管理の課題 Node Node Cluster Node ??? ● 複数のノードに対するコンテナのデプロイは? ● ノード障害が発生した場合は? ● コンテナ障害が発生した場合は? ● アプリケーションのアップグレードはどうやって管理する?
  8. 8. Kubernetes κυβερνήτης: Greek for “pilot” or “helmsman of a ship” the open source cluster manager from Google
  9. 9. Kubernetes (k8s) とは ● “コンテナオーケストレーション” ○ コンテナ中心のインフラ ● Googleの内部システムとコンテナの運用経験に インスパイアされている ● Runs Anywhere ● 2014年にオープンソース化 ● Kubernetes やクラウドネイティブエコシステムを 管理する CNCF に寄贈
  10. 10. Kubernetes のアーキテクチャ
  11. 11. Kubernetes のアーキテクチャ API UI CLI Master Node 1 Node 2 Node 3 Node 4
  12. 12. Kubernetes Master API UI CLI API Server Scheduler Controller etcd
  13. 13. Master ノードのコンポーネント API Server → kubectl は API Server を REST API で叩くコマンドツール Scheduler → Pod をノードにスケジュールするコンポーネント Controller → クラスタの状態を常に監視しするバックグラウンドプロセス → 定義された状態と異なると、それを修正するコンポーネント etcd → 分散 KVS → クラスタの全データを格納するデータストア
  14. 14. Kubernetes Node Master Docker Engine kubelet kube proxy supervisord fluentd Pod Pod Pod Pod Pod Pod AddonsDNS UI Pod Pod
  15. 15. Worker ノードのコンポーネント kubelet → ノードのエージェント → Pod の YAML ファイルに基づいて、定義されたコンテナを実行し、ストレージな どをマウントし、正常に起動していることを担保 kube-proxy → 各ノードで実行するネットワークプロキシ → サービスのIPアドレスを管理、コネクションフォワーディング → iptables を操作
  16. 16. Addons DNS → クラスタ内のDNSサービス → Kubernetes 1.3 からビルトインのサービス → Service や Pod は自動的にDNSに登録される Web UI → Kubernetes Dashboard
  17. 17. コンテナを使用するサンプルアプリ Client Python Web App Redis Database
  18. 18. Kubernetes Pod 1つか複数のコンテナをデプロイする単位 ● 関連するコンテナ ● 同じコンテキストで実行するコンテナ 同じ Pod のコンテナは同じホスト名を持つ 各ポッドの隔離は: ● Namespace (process isolation) ● Cgroups (リソース制御) 複数のプロセスを実行する VM の代替
  19. 19. Pod はデプロイ単位 Log Roller Web Server Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Kubernetes Master/Scheduler コンテナ コンテナ ポッド
  20. 20. Labels & Selectors ● 各 Kubernetes のオブジェクトに紐付けられ るキーバリューペア ● オブジェクトのフィルタリングに使用 ● オブジェクトの作成の際に設定され、いつで も変更可能 ● ラベルは API オブジェクトを繋ぐ重要なのり ○ Deployment → Pods ○ Service → Deployment apiVersion: v1 kind: Service metadata: name: web-svc labels: name: web app: demo spec: selector: name: web type: LoadBalancer ports: - port: 80 targetPort: 5000 protocol: TCP
  21. 21. 多数のポッドを識別するには? FE FE FE FE FE FE BE BE BE BEBE BE BE BE BE Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Kubernetes - Master/Scheduler
  22. 22. オブジェクトの識別 labels: role: frontend FE FE FE FE FE FE BE BE BE BEBE BE BE BE BE Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Kubernetes - Master/Scheduler
  23. 23. オブジェクトの識別 labels: role: frontend stage: production Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent Kubernetes - Master/Scheduler FE FE FE FE FE FE BE BE BE BEBE BE BE BE BE
  24. 24. Pod をデプロイ Master Node Docker kubelet kube proxy supervisord fluentd Web Pod DB Pod Registry python web app redis db Pod definitions (yaml)
  25. 25. Deployment ● YAML ファイルに設定されたポッドの数が 常に起動しているかを保証する → Pod をシャットダウンや起動する ● Deployment を replicas: 1 で作成すると、1 つの Pod が常に起動していることを保証す る ● デプロイするコンテナイメージと公開する ポートを指定する apiVersion: extensions/v1beta1 kind: Deployment metadata: name: web-deployment labels: name: web app: demo spec: replicas: 1 template: metadata: labels: app: demo spec: containers: - name: web image: asia.gcr.io/<projectid>/web-python:v1 ports: - containerPort: 5000 name: http protocol: TCP
  26. 26. Deployment で Pods をスケールする Master Docker kubelet kube proxy supervisord fluentd Web Pod 1 DB Pod Registry replicas 3 Deployment definitions (yaml) Web Pod 2 Web Pod 3 replicas 1 編集
  27. 27. Services アプリケーションのエンドポイント ● TCP / UDP をサポート ● kube-proxy 経由で Iptables を操作 Types ● ClusterIP (クラスタ内のみでアクセスできる VIP) ● NodePort (クラスタ外からアクセス可能なサービス) ● LoadBalancer (LB 経由でアクセス可能なサービス) ● ExternalName (クラスタ外のサービスを指定可能) apiVersion: v1 kind: Service metadata: name: web labels: name: web app: demo spec: selector: name: web type: LoadBalancer ports: - port: 80 targetPort: 5000 protocol: TCP
  28. 28. Service をデプロイ Client Node Web Pod 1 DB Pod Web Pod 2 Web Pod 3 LB Cluster IP Port 6379 Port 80
  29. 29. エンドポイントを抽象化 id: frontend-service port: 8080 labels: role: frontend stage: production Type: LoadBalancer Frontend Service FE FE FE FE Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent port: 8080 Load-Balancing Internet
  30. 30. エンドポイントを抽象化 id: backend-service port: 9000 labels: role: backend stage: production Type: ClusterIP Backend Service BE BE BE BE Machine Host Machine Host Machine Host Machine Host Machine Host Machine Host Container Agent Container Agent Container Agent Container Agent Container Agent Container Agent FE port: 9000 Load-Balancing でも、FEはどうやってBEにアクセスするの?
  31. 31. k8s node 今までのまとめ Service port : 80 name : web Deployment replicas=1 Pod name : web 作成 公開 API Server Pod に アクセス 管理者 開発者 ユーザー
  32. 32. Service Discovery Kuberenetes は2つのモードをビルトインでサポート 環境変数 → Pod が実行すると、kubelet は自動的にクラスタ上で実行している各サービス の環境変数を追加します DNS → 新しいサービスが作成されると、自動的に Service の DNS レコードが作成され る
  33. 33. Service Discovery - 環境変数(例) サービス名: ”redis-master” ポート: TCP 6379 クラスタ内のIP: 10.0.0.11 REDIS_MASTER_SERVICE_HOST=10.0.0.11 REDIS_MASTER_SERVICE_PORT=6379 REDIS_MASTER_PORT=tcp://10.0.0.11:6379 REDIS_MASTER_PORT_6379_TCP=tcp://10.0.0.11:6379 REDIS_MASTER_PORT_6379_TCP_PROTO=tcp REDIS_MASTER_PORT_6379_TCP_PORT=6379 REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11
  34. 34. Dev と Prod の差異は環境変数で解決 Dev 環境のクラスタ サービス名:Web サービス名:Redis Redis Web redis_host = os.environ.get('REDIS_SERVICE_HOST', '') redis_port = os.environ.get('REDIS_SERVICE_PORT', 6379) Prod 環境のクラスタ Redis Web redis_host = os.environ.get('REDIS_SERVICE_HOST', '') redis_port = os.environ.get('REDIS_SERVICE_PORT', 6379) 環境変数 (自動生成) REDIS_SERVICE_HOST=10.0.0.11 REDIS_SERVICE_PORT=6379 REDIS_PORT=tcp://10.0.0.11:6379 REDIS_PORT_6379_TCP=tcp://10.0.0.11:6379 REDIS_PORT_6379_TCP_PROTO=tcp REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_ADDR=10.0.0.11 REDIS_SERVICE_HOST=10.0.1.11 REDIS_SERVICE_PORT=6379 REDIS_PORT=tcp://10.0.1.22:6379 REDIS_PORT_6379_TCP=tcp://10.0.1.11:6379 REDIS_PORT_6379_TCP_PROTO=tcp REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_ADDR=10.0.1.11 コード変更不要
  35. 35. ConfigMap/Secret コンテナイメージからアプリケーションの設定・パスワードを切り離してデプロイ可能とするリソース ConfigMap → プレインテキスト Secret → 暗号化可能(Alpha、k8s 1.7 以降) 2つの使い方: 1. Volume としてマウント ○ ConfigMap/Secret のキーがファイル名で、値がファイルの内容 ○ nginx の設定ファイルを読み込む場合、この方法がオススメ 2. 環境変数に設定 ○ Pod の定義に環境変数を指定することが可能
  36. 36. ConfigMap のファイルマウント(例) コンテナイメージ コンテナイメージ nginx nginx nginx.conf ConfigMap nginx.conf マウント ⭕ ❌ メリット:ConfigMapのような外部リソースをマウ ントすると、設定を変更する際にイメージ自体を 変更する必要がなくなる
  37. 37. Secret の環境変数(例) $ kubectl get secret mysecret -o yaml apiVersion: v1 data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm kind: Secret ... type: Opaque apiVersion: v1 kind: Pod metadata: name: secret-env-pod spec: containers: - name: mycontainer image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never $ echo -n "admin" > ./username.txt $ echo -n "1f2d1e2e67df" > ./password.txt $ kubectl create secret generic mysecret --from-file=./username.txt --from-file=./password.txt secret "mysecret" created Secret の作成 Secret の確認 環境変数経由でSecret の利用
  38. 38. Kubernetes での役割のサマリー Kubernetes Master の役割は以下となる → API Server / Scheduler / Replication Controller 各 Node は Pod を実行する役割 Pod は Kubernetes のデプロイ単位で、1か複数のコンテナを含む Label は Kubernetes のオブジェクト間を紐付ける役割 Selector は Kubernetes のオブジェクトをフィルターする役割 Deployment は Pod の可用性を担保する役割 Service は Pod を内部、又は外部に公開する役割 Service Discovery はサービスを環境変数やDNSで解決する役割 ConfigMap/Secret は設定やパスワードをイメージから切り離す機能
  39. 39. Minikube - ローカル環境 サポートされているKubernetes の機能 ● DNS ● NodePorts ● ConfigMaps and Secrets ● Dashboards ● Container Runtime: Docker, and rkt ● Enabling CNI (Container Network Interface) ● Ingress サポートされているVM Drivers ● virtualbox ● vmwarefusion ● kvm (driver installation) ● xhyve (driver installation)
  40. 40. Google Container Engine (GKE) vs Kubernetes
  41. 41. Kubernetes は Google の Borg からインスパイア Google は Kubernetes の複数の SIG をリードしたり、積極的に開発にも参加して います。 → Kubernetes は Google が論文で出した Borg (社内コンテナオーケストレーショ ンシステム) からインスパイアーされている GKE は Kubernetes の新しいバージョンや機能をより早くかつ自動的に対応 Private Container Registry → Google Container Registry (GCR)
  42. 42. One click で k8s クラスタを作成 Kubernetes クラスタを手動で作る必要はない 普通だと、全てを手動でインストールする必要がある ● 例えば、ネットワーク:クラスタ間で Pod はどのように通信するのか? flannel や weave を使う? → GKE ではフルマネージド ● インストールが必要のバイナリー: ○ マスタ:etcd, kube-apiserver, kube-controller-manager, kube-scheduler ○ 各ノード:docker, kubelet, kube-proxy ● API Server を HTTPS で設定するなら、証明書が必要 ● Addonのインストール:DNS, Logging, Dashboard などなど GKE が全部やってくれます!
  43. 43. Master はマネージドサービス ● Master は Google により管理されており、自動的に更新される → Node はユーザによってコントロール → ノードのマイナー バージョン(x.X.x)がマスターのバージョンより 3 つ以上 古くなると、そのノードは正しく動作しない場合がある 例: マスタが1.3 になると 1.0 が実行しているノードは動作しない場合がある ● クラスタの設定を持つ etcd の自動バックアップ ● Google の SRE が面倒見てくれます!
  44. 44. Node もマネージドモデルにオプトイン可能 ● Node の自動アップグレード → Node を1by1:unschedulable → drain → 古いバージョンのNodeを削除 → 新しいバージョンのNodeを作成 → schedulable ● Node の自動修復 → Node が10分ほど応答しない場合、新しいNodeを作成する ● Node の自動スケール → Scheduler が Pod を既存の Node にスケジュールできない場合、新しい Node を作成し、Pod をその Node にスケジュールする(リソース不足の場合) ● 1 クラスタは 5,000 以上の Node をサポート
  45. 45. GCP とのネイティブ連携 ● Cloud IAM → クラスタのアクセス制御、クラスタ内は RBAC で ● Stackdriver Monitoring & Logging → One click で Monitoring と Logging を設定 ● Network Route , FW & Load Balancers (ingress) → HTTP LB, TCP/UDP LB, Route & FW ルールを自動的に作成 ● Persistent Disk (PDHDD & PDSSD) → Stateful アプリケーションも PDHDD & PDSSD でサポート → ReplicaSet でも自動 PD のプロビジョニング ● GCP コンソールに Dashboard インテグレーション
  46. 46. GCP の Preemptible VM との連携 ● Preempitble VM って何者? → 超安いVM!普通の VM の7割以上安い! ● おいしすぎる話なんすけど、デメリットはなに?? → VM は Max 24 時間起動する。その後、シャットダウンされる。 ● GKE と Preemptible VM との相性はなぜ? → GKE の自動修復機能で Preemptible VM のシャットダウンを修復する ● 使い分けが重要
  47. 47. Container-Optimized OS (COS) ● 高速なブート → スケールアウトが早い ● セキュリティ → コンテナに必要なコンポーネントだけを持つOS → Verified boot ● Open Source → https://cloud.google.com/container-optimized-os/
  48. 48. Thank you!
  • NobuakiSakuragi

    Apr. 8, 2020
  • yutakuroki

    Feb. 10, 2020
  • ssuser2be1de1

    Nov. 15, 2019
  • kunihirooda3

    Apr. 30, 2019
  • NeoXrea

    Feb. 21, 2019
  • s-okumura

    Aug. 1, 2018
  • morika-t

    Jun. 14, 2018
  • RyojiHasegawa1

    Jun. 2, 2018
  • MasafumiKokui

    May. 25, 2018
  • hashikiikuwow

    May. 19, 2018
  • maemichiyuya

    Apr. 26, 2018
  • windseahaiphong

    Apr. 25, 2018
  • YangXiao7

    Apr. 24, 2018
  • kouseimotoyosi

    Apr. 10, 2018
  • taroshun

    Mar. 27, 2018
  • ryosukeyamamoto988

    Feb. 11, 2018
  • shin5ok

    Jan. 28, 2018
  • yokawasa

    Jan. 10, 2018
  • saicologic

    Dec. 20, 2017
  • KeisukeKishida

    Dec. 18, 2017

Google Container Engine (GKE) のすごいところやメリットを理解するには、まずコンテナのオーケストレーションシステムである Kubernetes をちゃんと理解する必要があります。 本資料では Kubernetes のアーキテクチャやコンポーネント及びリソースを1つずつ解説し、その後、GKE を使うとどれだけ Kubernetes が便利で実際に使えるかを説明します。

Vistas

Total de vistas

15.642

En Slideshare

0

De embebidos

0

Número de embebidos

1.456

Acciones

Descargas

143

Compartidos

0

Comentarios

0

Me gusta

53

×