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

Skaffoldを用いたGKEアプリケーションの CD(Continuous Development)

Skaffoldを用いたGKEアプリケーションの CD(Continuous Development)

kojake_300

March 17, 2024
Tweet

More Decks by kojake_300

Other Decks in Technology

Transcript

  1. Skaffoldを用いたGKEアプリケーションの CD(Continuous Development) Copyright © 3-shake, Inc. All Rights Reserved.

    2024/03/15 Jagu'e'r クラウドネイティブ分科会 俺の考える最強のCI/CD
  2. Skaffoldとは? ❏ Skaffoldは、コンテナベース及びKubernetesアプリケーションの継続的開発(Continuous Development = CD)を容易にするOSSコマンドツール ❏ Googleが開発元であるため、Google Cloudの一部サービスで利用されている ❏

    Cloud Build内でSkaffoldを使用したビルド / テスト / デプロイ ❏ Cloud DeployでSkaffoldマニュフェストのデプロイ定義をレンダリング https://cloud.google.com/skaffold/?hl=ja
  3. SkaffoldのCD(Continuous Development)フロー Image Build Image Push Test Manifests Rendering Deploy

    ・dockerfileやカスタムスクリプトでbuild ・buildpacksやkoにも対応 ・buildをローカルではなくk8sクラスタやCloud Build 上で行うことも可能 https://skaffold.dev/docs/#skaffold-workflow-and-architecture ・シェルによるカスタムのテスト実行が可能 ・container-structure-testに対応しており、コンテ ナが意図通りに作成されているか確認可能 ・datetimeやハッシュ等で自動でタグを付与 ・buildしたタグに応じてレジストリへpush ・ローカルでdockerコンテナをデプロイする場合は pushしないオプションあり ・予め用意したtemplateに、imagetagとlabelを設定 ・KustomizeやHelmにも対応 ・レンダリングしたtemplateをデプロイ ・Cloud Deployを使用してCloud Run/GKE デプロイ
  4. Skaffoldのココがスゴい①:ホットリロード GKE Node Node pod Artifact Registry(AR) test-image skaffold dev

    appコード修正 dockerfile修正 ❏ Skaffoldは、一度Skaffold devを実行すれば自 動的にパイプラインが再実行される ❏ アプリやdockerfile修正の際は都度docker imageが作成されることになるため、ローカル のディスク容量やリモートレジストリの定期的 な削除が必要(後述の機能で対策を取れる) ❏ k8sテンプレートの修正はkubectl editで対応出 来る範囲で同期される k8s テンプレート修正
  5. Skaffoldで実現する 俺の考える最強のContinuous Development(CD) デプロイ 検証 クリーン アップ イメージ ビルド イメージ

    プッシュ マニフェスト レンダリング デプロイ k8s リソース 削除 ローカル イメージ 削除 リモート イメージ 削除 検証 コード修正 GKE Node pod A AR GKE Node pod A’ AR test image test image test image GKE Node pod A’ AR test image test image source code image build image push deploy sync port forward log tail modify prune delete
  6. Skaffoldで実現する 俺の考える最強のContinuous Development(CD) デプロイ 検証 クリーン アップ イメージ ビルド イメージ

    プッシュ マニフェスト レンダリング デプロイ k8s リソース 削除 ローカル イメージ 削除 リモート イメージ 削除 検証 コード修正 GKE Node pod A AR GKE Node pod A’ AR test image test image test image GKE Node pod A’ AR test image test image source code image build image push deploy sync port forward log tail modify prune delete ARのクリーンアップポリ シーでSkaffoldが生成し たタグを削除 Skaffoldがほぼ全てをカバー!
  7. ユースケース ❏ マイクロサービス検証 ❏ APIが複数マイクロサービスを跨ぐ時のE2E確認 ❏ 複数マイクロサービス間でのトレース確認 ❏ テレメトリ収集の確認 ❏

    Google Cloud Managed Service for Prometheusへのメトリクス表示確認 ❏ Cloud Loggingへのログ表示確認 ❏ Cloud Tracerへのトレース表示確認 ❏ その他GKE内のOSSツールのテレメトリ(Grafana、Jaeger、Elasticsearchなど)確認 ❏ Kubernetes Operator開発 ❏ ko / client-go / kubebuilderを使ったgolangアプリケーションの継続的開発