Slide 1

Slide 1 text

Skaffoldを用いたGKEアプリケーションの CD(Continuous Development) Copyright © 3-shake, Inc. All Rights Reserved. 2024/03/15 Jagu'e'r クラウドネイティブ分科会 俺の考える最強のCI/CD

Slide 2

Slide 2 text

Agenda 1. 自己紹介 2. Skaffoldとは? 3. Skaffoldのココがスゴい 4. 俺の考える最強のContinuous Development 5. まとめ

Slide 3

Slide 3 text

自己紹介 01 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 4

Slide 4 text

自己紹介 ❏ 某SIerで業務系アプリケーションの保守運用やDevops推進、金融機関 向けのクラウドアプリケーションの保守運用を経験したのちスリー シェイクにジョイン ❏ スリーシェイクではお客様環境のEKS改善やGoogle Cloud上のアプリ システムのSRE支援を行っている ❏ 趣味はサウナ、スプラトゥーン、旅行 kojake_300 株式会社スリーシェイク Sreake 事業部

Slide 5

Slide 5 text

Skaffoldとは? 02 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 6

Slide 6 text

GKE(k8s)アプリケーション開発の悩み GKE(k8s)上でアプリケーション開発をしていて、こんな悩みはありませんか? k8s上に実際に デプロイしないと挙動 が確認できない! podを外部公開してな いから毎回 portforwardするの めんどくさい! 検証用にdev環境にデ プロイしたリソースを 消し忘れてしまう! k8s上で動作に不備 あったときに再度 docker buildしてapply し直すの めんどくさい!

Slide 7

Slide 7 text

GKE(k8s)アプリケーション開発の悩み GKE(k8s)上でアプリケーション開発をしていて、こんな悩みはありませんか? k8s上に実際に デプロイしないと挙動 が確認できない! podを外部公開してな いから毎回 portforwardするの めんどくさい! 検証用にdev環境にデ プロイしたリソースを 消し忘れてしまう! k8s上で動作に不備 あったときに再度 docker buildしてapply し直すの めんどくさい! その悩み、Skaffoldで全て解消出来ます!

Slide 8

Slide 8 text

Skaffoldとは? ❏ Skaffoldは、コンテナベース及びKubernetesアプリケーションの継続的開発(Continuous Development = CD)を容易にするOSSコマンドツール ❏ Googleが開発元であるため、Google Cloudの一部サービスで利用されている ❏ Cloud Build内でSkaffoldを使用したビルド / テスト / デプロイ ❏ Cloud DeployでSkaffoldマニュフェストのデプロイ定義をレンダリング https://cloud.google.com/skaffold/?hl=ja

Slide 9

Slide 9 text

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 デプロイ

Slide 10

Slide 10 text

Skaffoldのココがスゴい 03 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 11

Slide 11 text

Skaffoldのココがスゴい①:ホットリロード GKE Node Node pod Artifact Registry(AR) test-image skaffold dev appコード修正 dockerfile修正 ❏ Skaffoldは、一度Skaffold devを実行すれば自 動的にパイプラインが再実行される ❏ アプリやdockerfile修正の際は都度docker imageが作成されることになるため、ローカル のディスク容量やリモートレジストリの定期的 な削除が必要(後述の機能で対策を取れる) ❏ k8sテンプレートの修正はkubectl editで対応出 来る範囲で同期される k8s テンプレート修正

Slide 12

Slide 12 text

Skaffoldのココがスゴい②:file sync ❏ buildでsyncプロパティを使用することで、 ローカルでアプリケーションコードの変更を検 知してリモートコンテナに同期させる ❏ リモートリポジトリへのpushをskip出来るた め、プログラミング言語のホットリロード機能 と合わせればスピーディな開発が可能 GKE Node Node pod Artifact Registry(AR) test-image skaffold dev appコード修正 dockerfile修正 k8s テンプレート修正 sync

Slide 13

Slide 13 text

Skaffoldのココがスゴい②:file sync ❏ DockerfileのADD COPY句のパスを同期するパ スと判断 ❏ 同期元と同じフォルダ構成で同期してくれる ❏ 何も要件がないときはinferが良さそう infer manual ❏ 同期元と同期先のパスをそれぞれ指定する

Slide 14

Slide 14 text

Skaffoldのココがスゴい③:docker imageの自動prune ❏ Skaffoldのオプションで、Skaffold実行終了時に自動的にimageをpruneすることができる https://skaffold.dev/docs/cleanup/#image-pruning ❏ 設定方法は、実行時にオプションを追加するか、skaffold.envファイル or 環境変数に変数を追加する

Slide 15

Slide 15 text

Skaffoldのココがスゴい④:ポートフォワード ❏ Skaffoldのportforwardプロパティを使用すれば、デプロイ後に自動でポートフォワードを実行 ❏ kubectl port-forwardを実行する必要がないためよりシームレスに開発が可能 Skaffoldのココがスゴい⑤:自動リソース削除 ❏ Skaffold実行を終了させると、デプロイしたリソースを自動で削除

Slide 16

Slide 16 text

Skaffoldのココがスゴい⑥:ログの自動tail ❏ 実行中のワークロードのログをコンソール上に表示 ❏ デプロイした全てのワークロードのログが一つのコンソールに表示されるため、複数のリソースをデプロ イした場合は可読性が低くなる リソース削除 image prune ログのtail

Slide 17

Slide 17 text

俺の考える最強のContinuous Development 04 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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がほぼ全てをカバー!

Slide 20

Slide 20 text

ユースケース ❏ マイクロサービス検証 ❏ APIが複数マイクロサービスを跨ぐ時のE2E確認 ❏ 複数マイクロサービス間でのトレース確認 ❏ テレメトリ収集の確認 ❏ Google Cloud Managed Service for Prometheusへのメトリクス表示確認 ❏ Cloud Loggingへのログ表示確認 ❏ Cloud Tracerへのトレース表示確認 ❏ その他GKE内のOSSツールのテレメトリ(Grafana、Jaeger、Elasticsearchなど)確認 ❏ Kubernetes Operator開発 ❏ ko / client-go / kubebuilderを使ったgolangアプリケーションの継続的開発

Slide 21

Slide 21 text

まとめ 05 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 22

Slide 22 text

まとめ ❏ Skaffold一つで開発者体験を向上させるCD(Continuous Development)を構築することが出来る! ❏ GKEアプリケーション開発にはSkaffoldを使って楽をしよう!

Slide 23

Slide 23 text

ご清聴ありがとうございました