More Related Content Similar to [GKE & Spanner 勉強会] GKE 入門 (20) More from Google Cloud Platform - Japan (20) [GKE & Spanner 勉強会] GKE 入門3. 1. コンテナと Kubernetes
2. Kubernetes のアーキテクチャ
3. Kubernetes における基本リソース
4. Google Kubernetes Engine (GKE) vs Kubernetes
GKE 入門のアジェンダ
5. Google では 10 年間に渡り、すべてのサービスをコンテ
ナで動かしてきた
毎週 40 億以上のコンテナを立ち上げている
Images by Connie Zhou
6. © 2018 Google LLC. All rights reserved.
Google はワークロードを
運用チームの 10 倍早く成長さ
せた
Core ops
team
Number of
running
containers
コンテナは運用を楽にする
15. ● コンテナをホストする(コンテナを動かす)
● コンテナのスケジューリング( どこに配置するか決める)
● ( 負荷が増えたら) オートスケーリング
● ( 壊れたら ) オートヒーリング
● (新しいアプリに置き換えたい) ローリングアップデート
Kubernetes は拡張性が高いのも特徴の1 つ
Custom Resource Definition (CRD) を使うことで比較的容易に独自機能を
追加することが出来る
Kubernetes が主に出来ること
例えば...
19. Master
API server / Scheduler / Controller manager
Node
1つまたは複数の Pod を実行するワーカーマシン (VM インスタンスや物理
サーバ)
Kubernetes の主要なコンポーネント
20. Master のコンポーネント
API Server
→ kubectl は API Server を REST API で叩くコマンドツール
Scheduler
→ Pod を Node にスケジュールするコンポーネント
Controller
→ クラスタの状態を常に監視するバックグラウンドプロセス
→ 定義された状態と異なると、それを修正するコンポーネント
etcd
→ 分散 KVS
→ クラスタの全データを格納するデータストア
21. Node のコンポーネント
kubelet
→ Node のエージェント
→ Pod の YAML ファイルに基づいて、定義されたコンテナを実行し、ストレージなどをマウント
し、正常に起動していることを担保
kube-proxy
→ 各 Node で実行するネットワークプロキシ
→ Service の IP アドレスを管理、コネクションフォワーディング
→ userspace, iptables, IPVS を使う 3 つのモードを選択可能
28. Deployment
● YAML ファイルに設定された Pod の数
が常に起動しているかを保証する
→ Pod のシャットダウン/起動
● Deployment を replicas: 1 で作成する
と、1 つの Pod が常に起動していること
を保証する
● デプロイするコンテナイメージと公開する
ポートを指定する
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
name: web
app: demo
spec:
replicas: 1
template:
metadata:
labels:
app: demo
spec:
containers:
- name: web
image:
gcr.io/sample-google/hello-app:v1
ports:
- containerPort: 5000
name: http
protocol: TCP
29. あるべき状態 : Pod A: 2 Pod, Pod B: 1 Pod
現在の状態 : Pod A: 2 Pod, Pod B: 1 Pod
Pod A
Pod B
Pod A
Deployment
30. あるべき状態 : Pod A: 2 Pod, Pod B: 1 Pod
現在の状態 : Pod A: 2 Pod, Pod B: 1 Pod
Pod A
Pod B
Pod A
Deployment
31. あるべき状態 : Pod A: 2 Pod, Pod B: 1 Pod
現在の状態 : Pod A: 1 Pod, Pod B: 0 Pod
Pod A
Pod B
Pod A
Deployment
32. あるべき状態 : Pod A: 2 Pod, Pod B: 1 Pod
現在の状態 : Pod A: 1 Pod, Pod B: 0 Pod
Pod A
Pod B
Pod A Pod A
Pod B
Deployment
33. あるべき状態 : Pod A: 2 Pod, Pod B: 1 Pod
現在の状態 : Pod A: 2 Pod, Pod B: 1 Pod
Pod A Pod A
Pod B
Deployment
35. Service
アプリケーションのエンドポイントを提供する
● TCP / UDP をサポート
● kube-proxy 経由で iptables を操作
Types
● ClusterIP (クラスタ内のみでアクセスできるVIP)
● NodePort (クラスタ外からアクセス可能なサービス)
● LoadBalancer (L4 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
37. cluster
Service / Ingress をデプロイ
Node Node
cluster
Node Node
L4 LB
cluster
Node Node
Service:
Type:NodePort
Service:
Type:LoadBalancer
Service:
Type:ClusterIP
Client
Client
cluster
Node Node
L7 LB
Ingress
Client
Pod A Pod B Pod A Pod A Pod A Pod A
Pod A Pod B
/app-a/* /app-b/*
41. Google Kubernetes Engine (A.K.A. GKE)
Google が提供する Kubernetes のマネージドサービス
● コマンド一発で k8s のクラスタを作成、利用開始可能
● マスターの管理は全てGoogle が行い、お客様はノードの費
用のみ負担頂く
GCP の各種サービスとのインテグレーションも便利
● Network services (HTTP(S) LB, NW LB, VPC)
● CI / CD (Cloud Build)
● Logging / Monitoring (Stackdriver)
42. コマンド一発で k8s のクラスタを作成
Kubernetes クラスタを手動で作る必要はない
自前では、全てを手動でインストールする必要がある
● ネットワーク:クラスタ間で Pod はどのように通信するのか? flannel や
weave を使う?
● インストールが必要なバイナリー:
○ マスタ:etcd, kube-apiserver, kube-controller-manager,
kube-scheduler
○ 各 Node:Container Engine, kubelet, kube-proxy
● API Server を HTTPS で設定するなら、証明書が必要
● Addonのインストール: DNS, Logging, Dashboard などなど
GKE が全部やってくれます!
43. Master の管理は Google が提供
● Master は Google により管理されており、自動的に更新される
→ Node はユーザによってコントロール
→ Node のマイナー バージョン(x.X.x)がマスターのバージョンより 3 つ以上
古くなると、その Node は正しく動作しない場合がある
例: マスタが1.3 になると 1.0 が実行している Node は動作しない場合がある
● クラスタの設定を持つ etcd の自動バックアップ
● Google の SRE が面倒見てくれます!
45. GKE チームは Kubernetes 本体へのコントリビューションの内
40% 以上を占める!
→ Kubernetes は Google が論文で出した Borg (社内コンテナオーケストレー
ションシステム) からインスパイアされている
Kubernetes は Google の Borg からインスパイア
Source: CNCF, https://gke.page.link/KubernetesCompanyContributions
46. GCP の各種サービスとのインテグレーション
● Cloud IAM / Workload Identity
→ クラスタのアクセス制御、クラスタ内は 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 インテグレーション
47. Container-Optimized OS (COS)
● 高速なブート
→ スケールアウトが早い
● セキュリティ
→ コンテナに必要なコンポーネントだけを持つOS
→ Verified boot
● Open Source
→ https://cloud.google.com/container-optimized-os/