Slide 1

Slide 1 text

Kubernetes Hands-on Koda 2019-09-07 クラウド時代のモダンな開発・運用

Slide 2

Slide 2 text

hello! ● 「Web」とか「Cloud」とか「DevOps」な技術者 ● 某メーカーの中でアプリなどを開発中 ● チームビルディングも(SCRUM.inc 認定スクラムマスター & IPA プロジェクトマネージャー) ● プログラミングと温泉、家族を愛するナイス・ガイ ● Google系を中心にクラウド系の技術コミュニティに参加 2 KODA (@koda3t)

Slide 3

Slide 3 text

“ 3 本日のゴール ▷ クラウド時代に必要な技術の説明を聞く ▷ はじめにデモでイメージをつける ▷ ハンズオンでデモと同じ技術を試してみる ▷ クラウド時代におけるモダンな開発・運用について、ふんわり理解し、 担当する各自が調査&試行できる知識を習得する あぁ、、あれね。 試したことあるよ(ドヤッ)

Slide 4

Slide 4 text

4 CloudNative

Slide 5

Slide 5 text

5 ✔ ご存知の通り「クラウド」という言葉はあたり前になった ✔ 疎結合された小型で独立したサービスの集合を組み合わせ、ユーザーか らのフィードバックを継続的改善に速やかに取り入れる、クラウドを前 提とした「クラウドネイティブ」という考え方も台頭してきている ✔ キーワードは「アジリティ」と「スケーラビリティ」

Slide 6

Slide 6 text

“ 6 アジリティ もともと機敏さ、素早さ、敏しょう性といった意味ですが、ビジネス用語としては、目 まぐるしい環境変化に即応するために欠かせない、経営や組織運営のあり方における機 敏性を表します。 スケーラビリティ 利用者や処理負荷の増大に適応できる特性。急なスパイクなどでも、透過的にシステム のリソースが大規模なものへと規模拡張できる能力。

Slide 7

Slide 7 text

7 Agenda 1. デモ 2. Kubernetesとは ○ ミニハンズオン(ローカルで使ってみる) 3. モダンな開発・運用のための周辺技術紹介 ○ Skaffold, Istio, Spinnaker, Helm, Prometheus, Grafana 4. ハンズオン 5. まとめ

Slide 8

Slide 8 text

8 1. デモ

Slide 9

Slide 9 text

“ 9 デモ ✔ モダナイズされたアプリケーションの開発、運用

Slide 10

Slide 10 text

10 Code Code コードを編集 自動ビルド 自動デプロイ ローカルPC Cloud Source Repositories Push(Tag) Cloud Build Container Registry 自動ビルド イメージ登録 動作確認 Skaffold Kubernetes Kubernetes Engine Canary Production Canaryで確認 Productionにデプロイ承認 一般ユーザ アーリーアダプタ トラフィック制御 自動デプロイ モニタリング Istio Prometheus Grafana - 構成 - 動作確認 Spinnaker

Slide 11

Slide 11 text

11 2. Kubernetesとは

Slide 12

Slide 12 text

12 Docker ▷ コンテナ型の仮想ツール ▷ 「Immutable Infrastructure(※次のページで説明) 」な運用をするために、 デファクトになっている ▷ 開発に使っても超便利 https://speakerdeck.com/koda/docker-hands-on - 前回のハンズオン -

Slide 13

Slide 13 text

13 Immutable Infrastructure ▷ 一度Deployをしたインスタンスやコンテナには二度と手を加えず、新 たにDeployを行う場合はインスタンスやコンテナを作り直すという考 え方(環境は使い捨て) ▷ ハイパーバイザ型のVMだと、構築するのが大変(時間がかかる)ので そのVMに対しいろいろ手動でメンテナンスしていき、「秘伝のタレ」 な運用になってしまい技術的負債に繋がる事が多い ▷ コンテナは常に作り直すので、常にどの環境でも同じように動く

Slide 14

Slide 14 text

14 Docker-Compose ▷ 複数のコンテナを組み合わせたアプリケーションを管理するツール

Slide 15

Slide 15 text

k8s(kubernetes) コンテナ化したアプリケーションのデプロイ、スケーリング などを行うコンテナオーケストレーションツール 15 本日のメイン

Slide 16

Slide 16 text

Kubernetes ✘ k8s = kubernetes ✘ Dockerコンテナをいい感じで運用できるようにしてくれるツール ✘ コンテナのオーケストレーションツール ✘ 日本語読みだと「クーバネティス」と発音することが多い ○ いろいろな読み方の人がいたけど統一されてきた感じ ✘ Google発で、現在は Cloud Native Computing Foundation(CNCF) 16

Slide 17

Slide 17 text

なにがうれしいの? ✘ (オート)スケール ✘ ロードバランス ✘ 自動修復 17 コンテナを「いい感じ」に使える

Slide 18

Slide 18 text

“ Kubernetesの構成要素 18

Slide 19

Slide 19 text

Node k8s 構成をざっくりと Master : : Node いい感じに 管理してく れるところ

Slide 20

Slide 20 text

構成 ● Master ○ k8sクラスタを管理するマスターサービス ○ クラスタ内のコンテナを操作・制御する ■ いい感じにしているナイスなやつ ○ Kubectlコマンドを受け付けて処理を行う

Slide 21

Slide 21 text

構成 ● Node ○ Dockerコンテナを動作させる ○ 複数のNodeでK8sクラスタを構成する ○ Nodeの中にPodというサービスを構成する最小単位のコ ンテナ郡をまとめたものがあって、その単位で動く もう少し詳細な構成を見てみる

Slide 22

Slide 22 text

Node kubelet container-ru ntime Pod Master k8s構成 Client (kubectl) api server etcd controller-m anager scheduler Node : : kubelet container-ru ntime Pod k8sへの操作 環境の構成情報を永続化 操作を受付て処理を実行 各種コントローラー PodのNode割当 Podを管理するエージェント Deployment Controller ReplicaSet Controller Pod Pod

Slide 23

Slide 23 text

急に複雑になったので、各構成要素の理解を進 めます

Slide 24

Slide 24 text

k8sの利用の流れ – クラスタ準備 ✘ Kubernetesクラスタを用意する ○ Masterと1つ以上のNodeで構成する ○ Docker Desktopだと Single-node clusterは自動でセッ トアップ ○ GoogleのCloudだとGKEでクラスタを用意

Slide 25

Slide 25 text

k8sの利用の流れ - アプリケーションをデプロイする ✘ kubectlを使い、k8sクラスタにAppをデプロイする ✘ Masterに「Deployment」が作られて、実行するNodeが決まりPod を作って起動するという流れ ○ Deployment Controllerが処理する ○ コンテナイメージを指定すると、そのコンテナがPodの上で起 動する

Slide 26

Slide 26 text

Podとは ✘ 複数のコンテナを1つのアトミックな単位にまとめるためのもの ✘ Pod単位に以下がある ○ 実行環境上で動くコンテナ(複数可能) ○ 共有ストレージ(ボリューム) ○ ネットワーキング(クラスタに固有のIPアドレス) ✘ といっても、1つのPodにいろいろ入れない方がわかりやすいと思 う ✘ 「このコンテナは、それぞれ違うマシンに配置されても正常に動 作するかどうか」と考えてみて ○ 「動作しない」なら同一Podで良い場合が多い ○ 「動作する」なら、Podを分ける方が良い場合が多い

Slide 27

Slide 27 text

出展: https://kubernetes.io/

Slide 28

Slide 28 text

k8sの利用の流れ - サービスを外部に公開する ✘ 外部からアクセスできるように、Serviceを定義する ○ Serviceをセットすることで、外部からアクセスする再のIPア ドレスが生成される ✘ 公開するタイプを「LoadBalancer」にすれば、複数のPodを起動 してロードバランシングもできる ○ Podの数/動いているNodeは変化する ○ IPアドレスは変化していくがうまいこと処理してくれる

Slide 29

Slide 29 text

出展: https://kubernetes.io/

Slide 30

Slide 30 text

k8sの利用の流れ - 負荷に応じてスケールする ✘ kubectlを使い「Deployment」を作る際に、実行するレプリカの 数を指定する(=ActiveなPodの数) ✘ 指定した数のPodが起動している事を保証してくれる ○ ReplicaSet Controllerが処理する ○ 何らかの原因で停まってしまった場合も、どこかのNodeで規 定数のPodが起動するように自動復旧 ■ 例えば物理的なNodeがクラッシュしても、別のNodeで起動 して、ネットワーク関連もうまいこと処理してくれる ✘ レプリカの数は変更可能で、トラフィックが増加した際にスケー リングが可能

Slide 31

Slide 31 text

ミニハンズオン 実際にK8sを試してPodや Serviceがどう動くか理解する

Slide 32

Slide 32 text

GitLab.comに Sign up

Slide 33

Slide 33 text

ハンズオン用のプロジェクトをFork https://gitlab.com/koda3t/devops-test

Slide 34

Slide 34 text

doc/01.use-k8s-on-local.md ハンズオン第一章の動作確認を試してみる

Slide 35

Slide 35 text

k8s有効化 https://kubernetes.io/ja/docs/setup/minikube/ ★ Docker Desktop(Windows,Mac)なら、GUIでポチッと(超簡単) ★ Linuxだったら、Minikubeが簡単 どちらもシングルノードのk8sクラスタを起動する

Slide 36

Slide 36 text

kubectlが動くことを確認 k8s:~$ kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:38:32Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:25:46Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

Slide 37

Slide 37 text

一般的な操作 ✘ kubectl get - リソースの一覧を表示 ✘ kubectl describe - 単一リソースに関する詳細情報を表示 ✘ kubectl logs - 単一Pod上の単一コンテナ内のログを表示 ✘ kubectl exec - 単一Pod上の単一コンテナ内でコマンドを実行

Slide 38

Slide 38 text

初期状態の確認 k8s:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 21m v1.10.11 k8s:~$ kubectl get pods No resources found. k8s:~$ kubectl get replicasets No resources found. k8s:~$ kubectl get deployments No resources found. k8s:~$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 24m → 何も動いていない(Pod無し)

Slide 39

Slide 39 text

使ってみる ✘ 小さい単位を試す(deployment.yml/service.yml無し) k8s:~$ kubectl run nginx --image=nginx deployment.apps "nginx" created k8s:~$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-65899c769f-7hv7g 1/1 Running 0 52s k8s:~$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 1 1 1 1 3m k8s:~$ kubectl get replicasets NAME DESIRED CURRENT READY AGE nginx-65899c769f 1 1 1 5m → Nginxが動くPodが作られる。それに合わせて、 replicasetsやdeploymentsも用意される

Slide 40

Slide 40 text

使ってみる k8s:~$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 37m → Serviceを定義してアクセスできるようにしてみる → Nginxが動くPodはServiceの定義が無いのでアクセスできない k8s:~$ kubectl expose deployment nginx --port=8080 --target-port=80 --type=LoadBalancer service "nginx" exposed k8s:~$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 41m nginx LoadBalancer 10.102.163.88 localhost 8080:31003/TCP 1m

Slide 41

Slide 41 text

使ってみる ✘ アクセスできる

Slide 42

Slide 42 text

試してみる ✘ 試しにPodを削除してみる(自動で復旧される) k8s:~$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-65899c769f-7hv7g 1/1 Running 0 16m k8s:~$ kubectl delete pod nginx-65899c769f-7hv7g pod "nginx-65899c769f-7hv7g" deleted koda:~$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-65899c769f-9hx9x 1/1 Running 0 37s → 新しいPod ができて起動している

Slide 43

Slide 43 text

試してみる 不慮の事故でPodが停止してもアプリは自動復旧してアクセスできる

Slide 44

Slide 44 text

クリーンアップ k8s:~$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 50m nginx LoadBalancer 10.102.163.88 localhost 8080:31003/TCP 10m k8s:~$ kubectl delete services nginx service "nginx" deleted k8s:~$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 51m k8s:~$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 1 1 1 1 23m k8s:~$ kubectl delete deployments nginx deployment.extensions "nginx" deleted k8s:~$ kubectl get deployments No resources found. k8s:~$ kubectl get replicasets No resources found. k8s:~$ kubectl get pods No resources found. deploymentsを削除すると、replicasetsやpodsも消える

Slide 45

Slide 45 text

設定ファイルを使ったデプロイ ✘ GitHubに公式サンプルがあるので、それをデプロイしてみる ○ https://github.com/kubernetes/examples/tree/master/guestbook ✘ 実行手順 ○ https://kubernetes.io/docs/tutorials/stateless-application/guestbook/

Slide 46

Slide 46 text

設定ファイルの簡単な説明 ✘ xxxx-deployment.yaml ○ deploymentを作る設定 ○ どのコンテナで構成されたPodをいくつ起動するか ✘ xxxx-service.yaml ○ serviceを作る設定

Slide 47

Slide 47 text

k8s:guestbook$ kubectl apply -f redis-master-deployment.yaml deployment.apps "redis-master" created k8s:guestbook$ kubectl get pods NAME READY STATUS RESTARTS AGE redis-master-55db5f7567-n5xhx 0/1 ContainerCreating 0 5s k8s:guestbook$ kubectl apply -f redis-master-service.yaml service "redis-master" created k8s:guestbook$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 1h redis-master ClusterIP 10.97.14.102 6379/TCP 10s k8s:guestbook$ kubectl apply -f redis-slave-deployment.yaml deployment.apps "redis-slave" created k8s:guestbook$ kubectl apply -f redis-slave-service.yaml service "redis-slave" created k8s:guestbook$ kubectl apply -f frontend-deployment.yaml deployment.apps "frontend" created k8s:guestbook$ kubectl apply -f frontend-service.yaml service "frontend" created

Slide 48

Slide 48 text

koda:guestbook$ kubectl get pods NAME READY STATUS RESTARTS AGE frontend-5c548f4769-2gbs5 1/1 Running 0 1m frontend-5c548f4769-2np2g 1/1 Running 0 1m frontend-5c548f4769-4z9kg 1/1 Running 0 1m redis-master-55db5f7567-n5xhx 1/1 Running 0 11m redis-slave-584c66c5b5-9qz74 1/1 Running 0 2m redis-slave-584c66c5b5-rznxx 1/1 Running 0 2m koda:guestbook$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend NodePort 10.97.42.26 80:31228/TCP 1m kubernetes ClusterIP 10.96.0.1 443/TCP 1h redis-master ClusterIP 10.97.14.102 6379/TCP 3m redis-slave ClusterIP 10.111.169.19 6379/TCP 2m

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

クリーンアップ k8s:guestbook$ kubectl delete deployment frontend deployment.extensions "frontend" deleted k8s:guestbook$ kubectl delete deployment redis-master deployment.extensions "redis-master" deleted k8s:guestbook$ kubectl delete deployment redis-slave deployment.extensions "redis-slave" deleted k8s:guestbook$ kubectl delete service -l app=redis service "redis-master" deleted service "redis-slave" deleted k8s:guestbook$ kubectl delete service -l app=guestbook service "frontend" deleted k8s:guestbook$ kubectl get pods No resources found. k8s:guestbook$ kubectl get deployments No resources found. k8s:guestbook$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 1h

Slide 51

Slide 51 text

51 3. モダンな開発・運用のための周辺技術紹介

Slide 52

Slide 52 text

52 Kubernetes Engine(GKE) ▷ Docker コンテナを実行するための強力なクラスタ管理およびオーケストレー ション システム ▷ Google Container Engine が名前が変わった ○ Google Container Engine の時も略称は GKE だった ▷ Amazon AWS / Microsoft Azure にも類似の Dockerコンテナをホストするサー ビスがある ○ ベンダロックインにならないので、積極的に使っていける! ○ 各ベンダーの共通のプラットフォームがDockerやKubernetesになってき ている ▷ 現状、コンテナ系のサービスでは一番クセが無く「お安い」と思う

Slide 53

Slide 53 text

53 Skaffold ▷ k8sを使った環境の開発を便利にするツール ▷ コンテナ化したアプリでは、変更のたびに、ビルドしてimageを作り、deploymentを更 新してデプロイしなければならない ▷ localの開発ではdocker-composeを使うと、VolumeMountできるので、開発中のコードを毎回マウントすれば良いけど K8sだとそうもいかないので自動化する ▷ このへんが、開発ではdocker-composeの方が楽では?という気持ちになる原因であるが、、、、 ▷ それでも、本番環境がk8sであれば、ローカルの開発でもk8sを使った方が良い(両方の コンフィグをメンテするのは大変)ので、その場合にSkaffoldで自動化して開発を行う

Slide 54

Slide 54 text

54 Istio ▷ サービスメッシュ(※次ページで説明) のツール ▷ Kubernetes同様CNCFが管理 ▷ k8sにもサービスメッシュの基本的な機能があるが、Istioではより高度な ルーティング機能を提供し、さらにクラスタ外からのトラフィックの管理やトラ フィック監視など、より高度な機能が提供されているのが特徴 ▷ Blue/Greenやカナリアで、20%のアクセスをベータバージョンのアプリに割り 当てるといった事が簡単にできる

Slide 55

Slide 55 text

55 サービスメッシュ ▷ コンテナベースの運用を手に入れた組織では、開発の柔軟性を向上するためマイク ロサービス化(※次ページで説明)が進む ▷ k8sを使った運用の場合、実行するコンテナのIPなどは事前に知ることはできない制 約があり、実行後にネットワーク制御が必要になる ▷ さらに、負荷分散を行うためのロードバランシングや、外部からのリクエストのルー ティングといった処理が必要にもなる ▷ その上、Blue/Green デプロイや カナリヤデプロイなどといった形で、高度にマイクロ サービスの通信を制御する必要もでてきている ▷ これらを管理するソフトウェアレイヤーがサービスメッシュと呼ばれる

Slide 56

Slide 56 text

56 マイクロサービス・アーキテクチャ ▷ マイクロサービスとは、ソフトウェア開発の技法の1つであり、1つのアプリケーション を、ビジネス機能に沿った複数の小さいサービスの疎に結合された集合体として構 成するサービス指向アーキテクチャである ▷ アプリケーションを異なる小さなサービスに分割することの利点は、モジュラリティが 高くなることであり、これによって、アプリケーションの理解、 開発、テストがより簡単に行えるようになる ▷ 疎結合になっているため、各マイクロサービス単位に、柔軟にアプリケーションの構 成変更/リファクタリングが実行できる ▷ マイクロサービスベースのアーキテクチャでは、継続的デリバリーと継続的 デプロイが可能になる

Slide 57

Slide 57 text

57 Blue/Green デプロイ ▷ ブルーグリーンデプロイメントは、既存のシステム(ブルー)を稼働させながら、次のバージョンとなる「新しい システム」(グリーン)を準備して、短時間(もしくは無停止)で切り替える手法 ▷ ビジネスインパクトの大きいシステムは「停止できない」ためにバージョンアップが出来ないというジレンマに 陥り、システムの継続的な改善が困難になり、結果的に製品価値を下げてしまう カナリヤデプロイ ▷ プロダクトやサービスの新機能を一部ユーザーのみが利用できるようにリリースし、新機能に問題がないこ とを確認しながら段階的に全体に向けて展開していくデプロイ手法のこと(カナリアリリースとも書かれること も多い) ▷ 本番環境の全体に展開するのではなく、並行して一部ユーザー向けに小規模にリリースし、負荷などの問 題が発生したら現行のバージョンに戻すことができる利点がある(ロールバック可能)

Slide 58

Slide 58 text

58 Spinnaker ▷ マルチクラウドに対応した継続デリバリのプラットフォーム ▷ Blue/Greenデプロイや、カナリアデプロイにも対応 サービスメッシュ(Istio)は、 Blue/Greenでデプロイされたコンテナへの通信トラフィックを制御 ▷ Spinnakerは、コンテナのデプロイそのもの管理 ▷ Netflix によってOSS化 ▷ クラウド各社(GCP、Azure)が対応している ▷ 自前でCDを制御する事もできるけど、 Spinnakerに対応しておけば、モビリティが向上する

Slide 59

Slide 59 text

59 Helm ▷ The package manager for Kubernetes ▷ k8s用のnpm, Maven(Gradle), Gem, apt, brewのようなもの ▷ 1つのアプリケーション(業務システム)としての動作を行う為に必要な Kubernetesの様々な種類のリソース(Deployment, Service, Ingress, Secret, ConfigMap, PersistentVolume, … など) ▷ ひとまとめにして管理する仕組みと、そのためのツールセットを提供する ▷ SpinnakerやIstioもHelmを通してインストールできる

Slide 60

Slide 60 text

60 Prometheus ▷ モニタリングツール ✔ アラート、デバッグ、トレンド調査など ▷ 動的な環境での監視が得意 ✔ コンテナ、クラウドに最適 ✔ Zabbixなんかは、オートスケールなどでインスタンスが増減するような環境は不得意らしい ▷ Istioをセットアップすると自動的についてくる ▷ Cloud Native Computing Foundation(CNCF) 支援の元で開発

Slide 61

Slide 61 text

61 Grafana ▷ ログ・データ可視化のためのツール ▷ Prometheusはモニタリングツールとしては優秀だが、可視化の部分は弱い ので、Grafanaを使って可視化する ✔ kibanaのようなもの ✔ Elasticsearch + kibana という鉄板構成が、ネットワークのモニタリングでは、 Prometheus + Grafanaになる(kibanaはデータソースがElasticsearchのみ)

Slide 62

Slide 62 text

62 4. ハンズオン

Slide 63

Slide 63 text

doc/02.local-development.md ハンズオン第二章 ★ ローカルで開発を効率的に行えるようにSkaffoldを使ってみる ★ スケールアップ・スケールダウン・ローリングアップデートを試してみる ローリングアップデートとは、同じ機能を持った複数のコンピュータで構成している場合のシステムをアップデートする 手法の一つです。 システムの稼動状態を維持しながら、1台ずつ順番にアップデートを行っていきます。

Slide 64

Slide 64 text

doc/03.signup-to-GCP.md ハンズオン第三章 ★ 3章以降はGCPで実施するのでGCPを使えるようにする

Slide 65

Slide 65 text

! 今回のハンズオンはクラウドを 使うので、費用がかかります。 数百円程度です。 費用のかからない、無料枠の小さな クラスタで試したところ、Istioとか Spinnakerとかのデプロイができませんでし た。(リソース不足) このため多少費用がかかってしまいますが、 ちゃんと動かしてみます。 このハンズオンの資料を作るためにGCPをそれなりに 使っていて来た請求

Slide 66

Slide 66 text

Google Cloud にサインアップして支払いを有効にする 有効にしないと、GKEが使えないので有効化する(ク レジットカード登録します) 「予算とアラート」を設定しておくと安心

Slide 67

Slide 67 text

Google Cloud の表示言語を日本語にする

Slide 68

Slide 68 text

Cloud Shellを有効にする クラウドのシェル環境。ハンズオンの各種コマンドはCloud Shellで実行していきます。

Slide 69

Slide 69 text

doc/04.deploy-to-GKE.md ハンズオン第四章 ★ GKEにアプリをデプロイしてみる

Slide 70

Slide 70 text

doc/05.service-mesh-by-Istio.md ハンズオン第五章 ★ Istioを使いトラフィックを制御してみる ★ Prometheus と Grafanaでネットワークをモニタリングする

Slide 71

Slide 71 text

doc/06.CD-by-Spinnaker.md ハンズオン第六章 ★ Spinnaker を使った継続的デリバリ (CD) ★ CDでデプロイしたカナリア環境でアプリをチェックし本番に反映する流れを試す

Slide 72

Slide 72 text

72 5. まとめ

Slide 73

Slide 73 text

73 「きこりのジレンマ」 になっていないか確認しよう

Slide 74

Slide 74 text

74 同じ1日の作業でも・・・ 12時間/日 6時間/日 余った時間でさらなる効率化

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

これまでのハンズオンで青い丸の部分の知識をゲット

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

83 使ってみよう! ✔ 使ってみると、意外と大した事ない 逆に「これがないとつらい」になる(例: Git & GitLab / GitHub)

Slide 84

Slide 84 text

84 簡単にするために新しい技術を使う ☞ 新しい技術を試す時間を確保する(リーダ/マネージャ)

Slide 85

Slide 85 text

Have Fun k8sを使ってみよう! 85

Slide 86

Slide 86 text

thanks! Any questions? You can find me at @koda3t 86