Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Cloud で クラウドネイティブに入門しよう

Avatar for Taisei Oda Taisei Oda
March 31, 2024
88

Google Cloud で クラウドネイティブに入門しよう

SAPPORO ENGINEER BASE #01

Avatar for Taisei Oda

Taisei Oda

March 31, 2024

Transcript

  1. 自己紹介 • 現在は SRE しています • 社会人歴 4 年目の 25

    歳 • 2022/12~ 札幌市中央区に移住 小田 泰生 (taisei oda) 𝕏: oda(@0I74_)
  2. Cloud Run (サービス) Knative 基盤 GKE への移行もし やすい デプロイが簡単 デプロイ後URLが付

    与される フルマネージド サーバーレス 0→N自動スケール コンテナをデプロイできるサービス!
  3. Cloud Run のユースケース Cloud Run Cloud Run Cloud Run パブリック(すべて)

    • Web App • API endpoint など プライベート(内部) • マイクロサービスなど
  4. Cloud Run のリソースモデル サービス (https://hoge-abc123-an.a.run.app) サービス • エンドポイント提供 リビジョン •

    デプロイ毎に作成される • デプロイで指定したイメージ情報、 1 インスタンスあたりの CPU/メモリ数 インスタンス • 実際に動作するコンテナインスタン ス Revision C 20% 80% Instance Instance Instance 0% https://cloud.google.com/run/docs/resource-model Revision B Revision A
  5. Cloud Run のデプロイ方法 Cloud Run Artifact Registry Docker Image サービス

    Revision ① コンテナイメージ作成 ② デプロイ (サービス/リビジョン作成)
  6. Cloud Run のデプロイ方法 一般的なデプロイ方法 # Docker ビルド $ docker build

    -t \ asia-northeast1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE} # Artifact Registry に イメージを push $ docker push \ asia-northeast1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE} # Cloud Run へデプロイ $ gcloud run deploy $NAME --region=${_LOCATION} --image \ asia-northeast1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}
  7. Cloud Run のデプロイ方法 Dockerfile を用意せずにソースコードからもデプロイ可能 (イメージのビルド、 Artifact Registry へのイメージ Push

    を自動化) # builpacks を使ってソースコードから Cloud Run へデプロイ $ gcloud run deploy <service> --region=asia-northeast1 --source=. • Cloud Run には Buildpacks の仕様が実装済み ◦ --source オプションを指定するだけ • 対応言語は Go、Node.js、Python、Java、Kotlin、.NET、Ruby、PHP
  8. Cloud Deploy アプリケーションを Cloud Run や Google Kubernetes Engine の環境に

    継続的デリバリー(CD) することに特化したマネージド サービス • アプリケーションのデプロイ ターゲットやデプロイ順序を定義 • デプロイに関する情報を可視化
  9. Cloud Deploy でカナリアデプロイする Cloud Run Cloud Run 新 Revision 古

    Revision Cloud  Deploy Skaffold 新 Revision 古 Revision 100% 0% ②デプロイ ①リリース作成 25%→… 100% 75%→… 0% ③デプロイ トラフィックの一部を ルーティング ④トラフィックを増やして いく dev環境 prd環境
  10. Cloud Deploy デリバリー パイプライン作成 apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name:

    cloud-run-pipeline description: test pipeline serialPipeline: stages: - targetId: dev profiles: [dev] - targetId: prd profiles: [prd] strategy: canary: runtimeConfig: cloudRun: automaticTrafficControl: true canaryDeployment: percentages: [25, 50, 75] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: dev run: location: projects/dev環境/locations/asia-east1 executionConfigs: - usages: - RENDER - DEPLOY --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prd run: location: projects/prd環境/locations/asia-east1 executionConfigs: - usages: - RENDER - DEPLOY clouddeploy.yaml # デリバリー パイプラインの作成 $ gcloud deploy apply --file=clouddeploy.yaml \ --region=asia-northeast1
  11. Cloud Deploy リリースの作成 # リリースの作成 $ gcloud deploy releases create

    [リリース名] \ --region=asia-northeast1 \ --delivery-pipeline=[パイプライン名] \ --skaffold-file=skaffold.yaml apiVersion: skaffold/v3alpha1 kind: Config metadata: name: deploy-run profiles: - name: dev manifests: rawYaml: - run-dev.yaml - name: prd manifests: rawYaml: - run-prd.yaml deploy: cloudrun: {} skaffold.yaml
  12. Cloud Deploy リリースの作成 # リリースを昇格してprd環境にデプロイ $ gcloud deploy releases promote

    \ --release=[リリース名] \ --delivery-pipeline=[パイプライン名] \ --region=asia-northeast1 25% のトラフィックがこのリビジョンに ルーティングされる
  13. Cloud Deploy リリースの作成 # 50%のフェーズに移行 $ gcloud deploy rollouts advance

    [ロールアウト名]\ --release=[リリース名] \ --delivery-pipeline=[パイプライン名] \ --region=asia-northeast1 50% に変化