Weitere ähnliche Inhalte Ähnlich wie 20221105_GCPUG 女子会 Kubernets 編.pdf (20) Mehr von Google Cloud Platform - Japan (20) 20221105_GCPUG 女子会 Kubernets 編.pdf6. Qwiklabs が新しくなりました!
● Google Cloud Platform を実際に使って演習(ハン
ズオン)する環境を提供するプラットフォーム
● 自分のレベルに合わせた演習問題を選択し、
GCP を
ご自分のペースで学習可能
● ハンズオンラボ:一つ一つ独立した演習
○ 1 つのラボは、早いものだと10 分程度から30
分程度で完了
● クエスト
○ 学習目標に合わせたハンズオンラボのセット
● 演習で利用するGCP アカウントは演習実行中、貸出
しされます(演習終了後は利用不可)
● 今回、無料でハンズオンラボを楽しんでいただけます
Google Cloud Skills Boost (旧 Qwiklabs)とは
8. Google Cloud Skills Boost ページをブラウザ(Chrome) の
Incognito モード(Ctrl+Shift+N)で開く
通常のブラウザでGoogle Console を開くと、一時的に発行されるアカウントがブラウザに記憶されたり、
ご自身のGCP アカウントがGoogle Cloud Skills Boost 演習時に紐づいてしまう恐れがあるため、
必ず Incognito (シークレット) モードで開きましょう
17. ● 「Google Console を開く」をクリックする。
● サインインの画面では、 ご自身のアカウントではなく
「Google Console を開く」の下に表示されている
ユーザ名、パスワード でサインインしてください。
ラボの始め方
20. Terms of Service /Email Updates にチェックをお入れください。( Email Updates は任意)
[Accept] をクリックします。
ラボの始め方
24. 1. Google Cloud Console で言語を変更したい場合、右上のドットをクリックします。
2. 一番上の [Preference] をクリックします。
Console の言語変更
32. Google では 10 年間に渡り、すべてのサービスをコンテ
ナで動かしてきた
毎週 40 億以上のコンテナを立ち上げている
Images by Connie Zhou
34. Proprietary + Confidential
15 年を超えるコンテナ オーケストレーションの経験
34
July 15
K8s 1.0
Jun 14
Kubernetes が
Github 上で初めて
コミットされる
Solaris コンテナの
Public Beta 開始
クラスタ管理の自動化
に携わる 3−4 名の
Google エンジニアに
よって Borg が誕生
2018
2009 2015
2012
Google の Borg を
Kubernetes としてオー
プンソース化する取り組
みがスタート
現在では cgroups
として Linux カーネル
に統合されたプロセス
のコンテナ化が
Google によって誕生
LXC がローンチされ、
Linux 上のコンテナ管
理の仕組みが完成す
る
2013
Docker
誕生
GKE on Prem
発表
Gvisor
Knative
Istio 1.0
Istio 0.1
Envoy 1.0
Aug 15
GKE 正式提供
Nov 14
GKE Alpha
提供開始
2019
Anthos
2003 2006 2009 2012 2015 2018 2019
35. Proprietary + Confidential
成長のボトルネックにならない Google の運用チーム
35
Google の コンテナ基盤 Borg による運用の自動化
はオペレーションチームのサイズの成長よりも
10 倍速くクラスタを成長させることに成功。
* The internal system that inspired Kubernetes
実行コンテナ数
運用チームサイズ
—
—
—
—
—
—
—
—
—
—
—
0X
1 —
—
—
—
—
—
—
—
—
—
—
—
—
40. ● GKE (Google Kubernetes Engine) クラスタを作成する (所要時間: 3 分~ 4 分)
● Pod, Deployment, Service のコンセプトを理解しマニフェストファイル (yaml) を利用して宣言的
に各リソースを作成する
● ラベルとセレクタを利用して Pod, Deployment リソースを Service に関連付けてアプリケーショ
ンを公開する
● ConfiMap, Secret を利用して設定情報 (config) や機密情報 (認証情報, TLS 証明書など) を
Pod, Deployment から利用する
● 基本的な kubectl コマンドを利用する (get, describe, create, expose, logs, label)
本日のラボの内容
Kubernetes を使った Cloud のオーケストレーション
42. 仮想マシン
● ハードウェアレベルで仮想化
● ホストマシンとは独立した OS
コンテナ
● OS レベルでの仮想化
● ホスト OS のカーネルを利用
VM vs コンテナ
仮想マシン コンテナ
ゲスト OS
ホスト OS
ハードウェア ハードウェア
ハイパーバイザー
コンテナランタイム
依存ファイル群
アプリケーションコード
プログラミング言語ランタイ
ム
依存ファイル群
アプリケーションコード
プログラミング言語ランタイ
ム
45. Kubernetes の主な機能
● コンテナをホストする(コンテナを動かす)
● コンテナのスケジューリング(どこに配置するか決める)
● (負荷が増えたら)オートスケーリング
● (壊れたら)オートヒーリング
● (新しいアプリに置き換えたい)ローリングアップデート
Kubernetes は拡張性が高く、Custom Resource Definition(CRD)を
使うことで、独自機能を追加することが出来る
開発者はアプリケーションの開発に集中できる
46. ● YAML による設定(マニフェスト)
● 「手続き」ではなく、何を達成したいか「結果」だけを宣言す
る
● Kubernetes はマニフェストの宣言を常に維持しようとする
ため、自動でシステムのあるべき状態を維持できる(e.g.
オートヒーリング)
宣言型 モデル による設定
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:1.16
ports:
- ContainerPort: 80
48. Google Kubernetes Engine(GKE)
Google が提供するマネージドな Kubernetes サービス
● ワンクリックで Kubernetes を構築
● 運用の手間を軽減するオートヒーリング
オートアップグレード、リリースチャネル
● ロギング、モニタリングなどGoogle Cloud の
各種サービスとのネイティブな連携
● エンタープライズでの利用を前提
とした SLA の設定、
HIPAA、PCI-DSS といったセキュリティ基準への準拠
49. GKE のハイレベル アーキテクチャ
API Server
kubectl
User
Storage
Scheduler
Resource
Controllers
User Pod
Containers
User Pod
Containers
User Pod
Containers
Nodes
User Pod
Containers
Google Cloud
サービス
Virtual
Private Cloud
Persistent
Disk
Cloud Load
Balancing
Operations
Control plane
GKE cluster
Google 管理
GKE が構築、
Google、お客様で管理
Google Cloud サービス
50. GKE の 2 つの運用モード
セキュリティと
ネットワークの設
定作業
ワーカーノードの
プロビジョニングと管
理
Standard mode
設定の自由度を備えた
マネージド Kubernetes
Autopilot mode
GKE のベストプラクティスと
推奨事項で最適化された
マネージド Kubernetes
Modern
application
platform
Autopilot
Standard
1. 負荷試験
2. 必要ポッド数の見積もり
3. 必要 Node の見積もり
4. K8s 設定の作成
5. Node のスケーリング設定
6. デプロイ
1. 負荷試験
2. 必要ポッド数の見積もり
3. K8s 設定の作成
4. デプロイ
52. Kubernetes の主要なリソース
• Pod
– 1つ、または複数のコンテナをデプロイする単位
• Deployment と ReplicaSet
– ReplicaSet:正常に動作していないPod を自動で
復旧し、指定したPod 数を維持する
– Deployment:ローリング アップデートなど、
ReplicaSet を更新、管理する
• Service
– Pod に対するクラスタ内外の
アクセスルーティングを制御する
ReplicaSet
Deployment
Service
Pod
コンテナ
53. Pod
● 関連するコンテナ / 同じコンテキストで実行するコンテナを
ひとまとまりにする
● k8s は IP アドレスを Pod ごとに払い出し、Pod 内のコンテナ
は localhost で通信できる
1 つ、または複数のコンテナをデプロイする単位
ノード2 ノード3
ノード1
Pod
コンテナ
53
apiVersion: v1
kind: Pod
metadata:
name: monolith
labels:
app: monolith
spec:
containers:
- name: monolith
image:
kelseyhightower/monolith:1.0.0
args:
- "-http=0.0.0.0:80"
- "-health=0.0.0.0:81"
- "-secret=secret"
ports:
- name: http
containerPort: 80
- name: health
containerPort: 81
resources:
limits:
cpu: 0.2
memory: "10Mi"
54. ● YAMLファイルを指定してリソースを作成する
kubectl create -f pods/monolith.yaml
● 直接リソースを指定して作成も可能
kubectl create pods nginx
Pod の作成方法
kube-apiserver
kubec
tl
User
etcd
kube-scheduler
kube-controller-
manager Pod
Containers
Pod
Containers
Pod
Containers
ノード
コントロール
プレーン
Kubernetes クラスタ
kubectl
kubectl create と kubectl apply
ラボでは「kubectl create」でオブジェクトを作成しています。
しかし、オブジェクトを作成する際に「
kubectl apply」を利用している手順をみ
かけるかと思います。
「kubectl create」はすでに同じ名前のオブジェクトがある場合はエラーとなり
ます。一方、「kubectl apply」の場合はすでに同じ名前のオブジェクトがある
場合もエラーになりません。
これは、「kubectl apply」が指定した状態と現在の状態を比較して差分を反
映するコマンドのためです。
ラボでは「kubectl create」を用いていますが、上記の理由から、通常は
「kubectl apply」を用います。
55. ● Pod の一覧を取得
kubectl get pods
● 特定の Pod の詳細情報を取得
kubectl describe pods pod_name
● Pod のログを確認
kubectl logs pod_name
● Pod 内部で対話型シェルを実行
kubectl exec pod_name –stdin –tty -c pod_name /bin/sh
Pod の操作イメージ
56. ReplicaSet
● 指定した Pod 数を維持するリソース
○ ReplicaSet に管理されている Pod の特定には
ラベルを用いる
Pod 数(レプリカ数)を維持、管理する
ReplicaSet
spec.replicas: 3
PodはReplicaSetの定義内の
Pod テンプレートをもとに作成される
Pod テンプレート
app:nginx
Podが落ちた場合でも
個数が3になるように管理する
app:nginx
app:nginx app:nginx
Label
56
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: auth
spec:
selector:
matchlabels:
app: auth
replicas: 3
template:
metadata:
labels:
app: auth
track: stable
spec:
containers:
- name: auth
image:
"kelseyhightower/auth:2.0.0"
Pod の数を指定
Pod テンプレート
ラベルセレクター
57. Label / Label Selector
リソースにラベルをつけ、識別、グループ分けをし管
理する仕組み
● Label
○ リソースに定義する Key-Value のペアセット
○ 任意のラベルを定義可能
● Label Selector
○ Label の値からリソース検索やフィルタリング可能
○ リソース同士の関連付け
app:monolith app:monolith app:auth
secure:enable
apiVersion: v1
kind: Pod
metadata:
name: auth
labels:
app: auth
・・・
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: auth
spec:
selector:
matchlabels:
app: auth
replicas: 1
・・・
セレクターで
管理する Pod を指定
58. Deployment
● ReplicaSet を管理
● アプリケーションの更新を行う場合、ReplicaSet を更新
することで、ローリングアップデートが可能
※ Deployment は ReplicaSet を管理する上位概念のため、
通常は、ReplicaSet を直接使わずにDeployment を用いる
ReplicaSet
spec.replicas: 3
Deployment
ReplicaSet
spec.replicas: 3
auth:2.0.0 auth:2.0.0 auth:2.0.0 auth:2.0.1 auth:2.0.1 auth:2.0.1
旧ReplicaSetのPodは順次削除される
新しいReplicaSetが作られ
Podも順次作成される
アプリを更新
58
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth
spec:
selector:
matchlabels:
app: auth
replicas: 3
template:
metadata:
labels:
app: auth
track: stable
spec:
containers:
- name: auth
image:
"kelseyhightower/auth:2.0.1"
ports:
- name: http
containerPort: 80
- name: health
containerPort: 81
...
アプリを更新
Pod の数を指定
Pod テンプレートの定義
セレクターで
管理する Pod を指定
59. アプリケーションのエンドポイントを提供する
● 複数の Pod を1つのアプリケーションとしてまとめ、
IP アドレスを付与してエンドポイントを提供する
● Pod が追加、削除されたり、Pod のもつ IP アドレスが変わって
もサービスにアクセスできる
Types
● ClusterIP (デフォルト)
○ クラスタ内のみでアクセスできるVIP でサービスを公開
● NodePort
○ ノードのIPを用いて、クラスタ外からアクセス可能なサービスを公開
● LoadBalancer
○ クラウドプロバイダーのロードバランサーを用いて
サービスを公開
Service
kind: Service
apiVersion: v1
metadata:
name: "monolith"
spec:
selector:
app: "monolith"
secure: "enabled"
ports:
- protocol: "TCP"
port: 443
targetPort: 443
nodePort: 31000
type: NodePort
Service
60. ラボにでてくる k8s リソース
Namespace (名前空間)
同一の物理クラスター上の仮想クラスター
複数のチームやプロジェクトで利用する場合に用
いる
ConfigMap
コンテナの環境設定などをKey-Value 型で保存
するリソース。設定や環境変数をコンテナイメージ
と分離して管理するときに用いられる。
Secret
ConfigMap と同様にデータをKey-Value 型で保
存するリソースで、認証情報などの機密性の高い
データを管理するときに用いられる。
Volume
Volume には復数の種類があり、一時的な
Volume は、Pod が削除されると消えるデータ格
納領域で、永続的なVolume (PersistentVolume
など) は Pod が削除されてもデータが残る
<参考>
PersistentVolume (PV) と
PersistentVolumeClaim (PVC)
● PV は Pod とは独立した永続的なデータ
格納領域で、Pod が削除されてもデータ
が残る
● PVC は Pod から PV を利用するためのリ
ソースで、Pod が要求した条件を満たす
PV を Pod に割り当てる役割を担う
Pod
コンテナ Volume
Pod
コンテナ
PersistentVolume
PersistentVolumeClaim
Pod に
PersistentVolume を割
り当てる
一時的な Volume は
Pod と同じライフサイク
ルで
PersistentVolume は
Pod と独立していて
永続的
63. Proprietary + Confidential
ハンズオン
Kubernetes を使った Cloud のオーケストレーション
https://www.cloudskillsboost.google/catalog_lab/486?locale=ja
このハンズオンで学ぶ内容
● GKE (Google Kubernetes Engine) クラスタを作成する (所要時間: 3 分~ 4 分)
● Pod, Deployment, Service のコンセプトを理解しマニフェストファイル (yaml) を利用して宣言的に各
リソースを作成する
● ラベルとセレクタを利用して Pod, Deployment リソースを Service に関連付けてアプリケーションを公
開する
● ConfiMap, Secret を利用して設定情報 (config) や機密情報 (認証情報, TLS 証明書など) を Pod,
Deployment から利用する
● 基本的な kubectl コマンドを利用する (get, describe, create, expose, logs, label)
65. Proprietary + Confidential
ハンズオンの概要 ステップ 2
このステップで学ぶ内容
● Deployment ではなく Pod を作成する
● Pod の状態を確認する
● Service がない状態で Pod にアクセスする
● Pod のログを確認する
Cloud Shell
monolith
monolith
Pod
② Pod にアクセス
66. Proprietary + Confidential
ハンズオンの概要 ステップ 3
このステップで学ぶ内容
● ConfiMap, Secret で設定情報や機密情報を定義する
● 外部に公開するための Service を定義する
● ラベルとセレクタを理解する
End Users
monolith
secure-
monolith
Pod
monolith
Service
③ ラベルとセレクタ
67. Proprietary + Confidential
hello
Deployment
ハンズオンの概要 ステップ 4
このステップで学ぶ内容
● Pod を管理するための Deployment を定義する
● 外部に公開するための Service を定義する
● マイクロサービスアーキテクチャーを感じる
End Users
microservice
hello
Deployment
frontend
Service
auth
Deployment
auth
Service
hello
Deployment
hello
Service
frontend
Deployment
④ マニフェストファイルで宣言的に定義
68. Proprietary + Confidential
ハンズオンの注意点
Kubernetes を使った Cloud のオーケストレーション
https://www.cloudskillsboost.google/focuses/1747?locale=ja
● GKE クラスタの作成に 3 分~ 4 分の時間がかかります。
● 本ラボでは Kubernetes がコンテナをどのようにホスト、スケ
ジューリングし、公開するのかを理解する のが目的です。
● アプリケーションについて コードレベルで理解する必要はあ
りません。
● [参考] kubectl コマンド リファレンス
○ kubectl COMMAND --help
○ https://kubernetes.io/docs/reference/generated/kub
ectl/kubectl-commands
69. Proprietary + Confidential
ハンズオン おまけ
Cloud Shell エディタでマニフェストファイルを確認してみよう
Cloud Shell エディタ
Google フルマネージドなオンライン開発環境
● Eclipse Theia ベースのオンラインエディタ
● Go、Java、Python、NodeJS などの言語サポー
ト
● Cloud Code の統合