Successfully reported this slideshow.
Your SlideShare is downloading. ×

20221105_GCPUG 女子会 Kubernets 編.pdf

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 69 Ad
Advertisement

More Related Content

More from Google Cloud Platform - Japan (20)

Recently uploaded (20)

Advertisement

20221105_GCPUG 女子会 Kubernets 編.pdf

  1. 1. ハンズオン イベントは、10:00 開始です ミュートなし ミュート中 ミュートにしてお待ちください (カメラは任意です) セッション中のご質問は Google Meet の チャットでご質問ください。 会議から退出される場合は 受話器のマークをクリックして ご退出ください
  2. 2. GCPUG 女子会 Kubernetes 入門
  3. 3. 本日の アジェンダ ご挨拶 (3min) Google Cloud Skills Boost の説明 (10min) セッション (40min) -- (必要に応じ)休憩 −− (5min) 実習:ラボ (45min) クローズ
  4. 4. 本日の講師 Maki Ishikawa Customer Engineer ハンズオン担当 Koto Shigeru Customer Engineer セッション担当 Miki Katsuragi AI Consultant GCPUG女子会 運営
  5. 5. Google Cloud Skills Boost とは
  6. 6. Qwiklabs が新しくなりました! ● Google Cloud Platform を実際に使って演習(ハン ズオン)する環境を提供するプラットフォーム ● 自分のレベルに合わせた演習問題を選択し、 GCP を ご自分のペースで学習可能 ● ハンズオンラボ:一つ一つ独立した演習 ○ 1 つのラボは、早いものだと10 分程度から30 分程度で完了 ● クエスト ○ 学習目標に合わせたハンズオンラボのセット ● 演習で利用するGCP アカウントは演習実行中、貸出 しされます(演習終了後は利用不可) ● 今回、無料でハンズオンラボを楽しんでいただけます Google Cloud Skills Boost (旧 Qwiklabs)とは
  7. 7. キャンペーン参加方法 bit.ly/3gOwlea * 登録後しばらくすると メールでキャンペーンコード が送られてきます
  8. 8. Google Cloud Skills Boost ページをブラウザ(Chrome) の Incognito モード(Ctrl+Shift+N)で開く 通常のブラウザでGoogle Console を開くと、一時的に発行されるアカウントがブラウザに記憶されたり、 ご自身のGCP アカウントがGoogle Cloud Skills Boost 演習時に紐づいてしまう恐れがあるため、 必ず Incognito (シークレット) モードで開きましょう
  9. 9. キャンペーンコードを入力
  10. 10. ラボの始め方 本日実施するラボはこちら https://www.cloudskillsboost.google/ catalog_lab/486?locale=ja
  11. 11. ラボの始め方 をクリックする。 https://www.cloudskillsboost.google/quests/116
  12. 12. ラボの始め方 ログインします。
  13. 13. ラボの始め方 ラボの画面に戻ります。アカウントロゴをクリックして クレジットが付与されているか確認します。 2
  14. 14. ● ラボの画面右上に表示されているアカウントアイコンをク リックする。 ● 「Settings」をクリックし、「Language」をクリック。 ● 一番下までスクロールして をクリックする。 ラボの始め方 (言語の変更)
  15. 15. ラボの内容を読み確認したら、左上の [ラボを開始] をクリックします。 ※「reCAPTCHA」で該当の画像を選択して進みます。 (ラボ名は実際とは異なります。 ) ラボの始め方
  16. 16. ● クレジットが必要なラボを実行する場合、「ラボを開始」をクリックすると、このような ポップアップが開きます。「一緒に開始:クレジット: 1 」をクリックし、起動します。 ● ラボの手順に従って操作します ラボの始め方 注:ラボによって最初に割り当てられるクレジットが異なります
  17. 17. ● 「Google Console を開く」をクリックする。 ● サインインの画面では、 ご自身のアカウントではなく 「Google Console を開く」の下に表示されている ユーザ名、パスワード でサインインしてください。 ラボの始め方
  18. 18. [利用規約] に同意します。(Accept ボタンを押してください) ラボの始め方
  19. 19. 復旧オプションは追加せずに、そのまま [Done] をクリックします。 ラボの始め方
  20. 20. Terms of Service /Email Updates にチェックをお入れください。( Email Updates は任意) [Accept] をクリックします。 ラボの始め方
  21. 21. ラボの進め方 〜 1 ヶ月無料適用確認
  22. 22. Cloud Shell を起動しましょう コンソール画面右上のボタンから起動します。 ラボの進め方
  23. 23. ラボの進め方 Skills Boost のインストラクションと GCP コンソールを行き来しながら、ラボを先に進めてください Google Cloud Skills Boost GCP Console
  24. 24. 1. Google Cloud Console で言語を変更したい場合、右上のドットをクリックします。 2. 一番上の [Preference] をクリックします。 Console の言語変更
  25. 25. 3. 左のメニューから [Languages & Region] を選択し、プルダウンで言語を選択します。 Console の言語変更
  26. 26. 全て終了したら、画面左上の [ラボを終了] をクリックします。 (複数ラボを同時に実施することはできませんので、必ず終了ボタンを押してください ) ラボが終了しました。お疲れ様でした。 (再度試したい際は、もう一度 [ラボを開始] ボタンをクリックしてください) ラボの終了
  27. 27. 2. 画面右上のアイコンをクリックして、「月単位のサブス クリプション」と表示されていれば OK です 1 ヶ月無料の適用確認 3. 次にラボを開始する際は「サブスクリプションを使用」 をクリックして開始しましょう 1. ラボを終了したら、ラボの「 ←」をクリックしてラボ一覧 の画面に戻ります
  28. 28. 操作など不明点がある場合は、 Google Cloud Skills Boost のチャットを利用して質問することが可能です。 担当者がチャット対応致します。 困ったら...
  29. 29. Google Cloud とは
  30. 30. 持続的なイノベーションを追求 Gmail YouTube Android Chrome Play Drive 1998 検索 フォト マップ
  31. 31. Google では 10 年間に渡り、すべてのサービスをコンテ ナで動かしてきた 毎週 40 億以上のコンテナを立ち上げている Images by Connie Zhou
  32. 32. 大量のコンテナ管理を実現する Google の Borg Google Research https://research.google/pubs/pub43438/
  33. 33. 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
  34. 34. Proprietary + Confidential 成長のボトルネックにならない Google の運用チーム 35 Google の コンテナ基盤 Borg による運用の自動化 はオペレーションチームのサイズの成長よりも 10 倍速くクラスタを成長させることに成功。 * The internal system that inspired Kubernetes 実行コンテナ数 運用チームサイズ — — — — — — — — — — — 0X 1 — — — — — — — — — — — — —
  35. 35. Proprietary + Confidential なぜ Google がコンテナを使うのか? 36 ● 開発速度を上げて、新機能を 早くリリースしたい ● サーバー リソースを 有効活用したい (使い切りたい) ● 開発者は開発に集中したい
  36. 36. Google Cloud のコンセプト Google が提供するサービスの基盤を 企業の皆様へ Proprietary + Confidential
  37. 37. 企業のデジタル トランスフォーメーションを加速する。 "Accelerate organizations' ability to digitally transform their business." Google Cloud のミッション
  38. 38. 0 Kubernetes 入門
  39. 39. ● 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 のオーケストレーション
  40. 40. アプリケーション コードとその依存性を一つのユニットにまとめることで、 アプリケーションとインフラを疎結合にできる ● ポータブル ○ 様々な実行環境に対応し、デプロイメントが容易 ● 軽量 ○ 仮想マシンに比べて軽量でシンプル、数十ミリ秒で起動 ● 効率性 ○ リソース使用量が少ない コンピュートリソースを細分化し、効率的に利用可能 コンテナ イメージ 依存ファイル群 アプリケーションコード コンテナとは?
  41. 41. 仮想マシン ● ハードウェアレベルで仮想化 ● ホストマシンとは独立した OS コンテナ ● OS レベルでの仮想化 ● ホスト OS のカーネルを利用 VM vs コンテナ 仮想マシン コンテナ ゲスト OS ホスト OS ハードウェア ハードウェア ハイパーバイザー コンテナランタイム 依存ファイル群 アプリケーションコード プログラミング言語ランタイ ム 依存ファイル群 アプリケーションコード プログラミング言語ランタイ ム
  42. 42. Node Node Cluster Node ??? ● 複数のノードにどうやってコンテナをデプロイする ? ● ノードがダウンしたらどうする ? ● コンテナに障害が発生したらどうする ? ● アプリケーションの更新はどうする ? ● コンテナ間の通信はどうする ? コンテナ管理の課題
  43. 43. Kubernetes プロダクショングレードのコンテナ管理基盤 ● Googleで 10 年以上稼働している コンテナ管理基盤(Borg)を参考に開発 ● オープンソース ○ オンプレミス、クラウドなど あらゆる場所に導入可能 ● コンテナ管理基盤のデファクト スタンダード
  44. 44. Kubernetes の主な機能 ● コンテナをホストする(コンテナを動かす) ● コンテナのスケジューリング(どこに配置するか決める) ● (負荷が増えたら)オートスケーリング ● (壊れたら)オートヒーリング ● (新しいアプリに置き換えたい)ローリングアップデート Kubernetes は拡張性が高く、Custom Resource Definition(CRD)を 使うことで、独自機能を追加することが出来る 開発者はアプリケーションの開発に集中できる
  45. 45. ● 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
  46. 46. Kubernetes のアーキテクチャ kube-apiserver kubectl User etcd kube-scheduler kube-controller-m anager Pod Containers Pod Containers Pod Containers ノード コントロール プレーン Kubernetes クラスタ コンテナを実行する環境 コントロールプレーンとノードからなる ワークロードを担う コンテナを実行するマシン k8s クラスタの全体管理を担 うコンポーネント群 Kubernetes を操作するため のコマンドラインツール
  47. 47. Google Kubernetes Engine(GKE) Google が提供するマネージドな Kubernetes サービス ● ワンクリックで Kubernetes を構築 ● 運用の手間を軽減するオートヒーリング オートアップグレード、リリースチャネル ● ロギング、モニタリングなどGoogle Cloud の 各種サービスとのネイティブな連携 ● エンタープライズでの利用を前提 とした SLA の設定、 HIPAA、PCI-DSS といったセキュリティ基準への準拠
  48. 48. 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 サービス
  49. 49. 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. デプロイ
  50. 50. Kubernetes における基本リソース
  51. 51. Kubernetes の主要なリソース • Pod – 1つ、または複数のコンテナをデプロイする単位 • Deployment と ReplicaSet – ReplicaSet:正常に動作していないPod を自動で 復旧し、指定したPod 数を維持する – Deployment:ローリング アップデートなど、 ReplicaSet を更新、管理する • Service – Pod に対するクラスタ内外の アクセスルーティングを制御する ReplicaSet Deployment Service Pod コンテナ
  52. 52. 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"
  53. 53. ● 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」を用います。
  54. 54. ● 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 の操作イメージ
  55. 55. 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 テンプレート ラベルセレクター
  56. 56. 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 を指定
  57. 57. 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 を指定
  58. 58. アプリケーションのエンドポイントを提供する ● 複数の 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
  59. 59. ラボにでてくる 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 と独立していて 永続的
  60. 60. Kubernetes を使った Cloud のオーケストレーション これから実施するラボ
  61. 61. では、 はじめましょう!
  62. 62. 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)
  63. 63. Proprietary + Confidential ハンズオンの概要 ステップ 1 End Users nginx nginx Deployment nginx Service ①コマンドで定義 このステップで学ぶ内容 ● コマンドを利用してマニフェストファイル (yaml) なしに Deployment と Service を作成する
  64. 64. Proprietary + Confidential ハンズオンの概要 ステップ 2 このステップで学ぶ内容 ● Deployment ではなく Pod を作成する ● Pod の状態を確認する ● Service がない状態で Pod にアクセスする ● Pod のログを確認する Cloud Shell monolith monolith Pod ② Pod にアクセス
  65. 65. Proprietary + Confidential ハンズオンの概要 ステップ 3 このステップで学ぶ内容 ● ConfiMap, Secret で設定情報や機密情報を定義する ● 外部に公開するための Service を定義する ● ラベルとセレクタを理解する End Users monolith secure- monolith Pod monolith Service ③ ラベルとセレクタ
  66. 66. 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 ④ マニフェストファイルで宣言的に定義
  67. 67. 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
  68. 68. Proprietary + Confidential ハンズオン おまけ Cloud Shell エディタでマニフェストファイルを確認してみよう Cloud Shell エディタ Google フルマネージドなオンライン開発環境 ● Eclipse Theia ベースのオンラインエディタ ● Go、Java、Python、NodeJS などの言語サポー ト ● Cloud Code の統合

×