1. 目標
Skaffold は、アプリケーションのビルド、push、デプロイのワークフローを処理するツールです。Skaffold を使用すると、ローカル開発ワークスペースを簡単に構成し、内部開発ループを効率化し、Kustomize や Helm などの他のツールと統合して、Kubernetes マニフェストを管理できます。
このチュートリアルでは、Skaffold の基本コンセプトをいくつか学習し、それを使用して内部開発ループを自動化してから、アプリケーションをデプロイします。
次のことを行います。
- ローカル開発用に Skaffold を構成して有効にする
- シンプルな Go アプリケーションをビルドして実行する
- Skaffold を使用してローカル アプリケーションのデプロイを管理する
- マニフェストをレンダリングしてアプリケーションをデプロイする
2. 始める前に
ワークスペースの準備
- 次の URL にアクセスして、Cloud Shell エディタを開きます。
https://shell.cloud.google.com
サードパーティ Cookie を許可します。[サイトが動作しない]、[Cookie を許可] の順にクリックします。


- まだ行っていない場合は、ターミナル ウィンドウで次のコマンドを使用してアプリケーション ソースのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- クローンされたリポジトリ ディレクトリに移動します。
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- 次のコマンドを実行して、Cloud Shell ワークスペースを現在のディレクトリに設定します。
cloudshell workspace .
プロジェクトの準備
- 次のコマンドを実行して、Google Cloud プロジェクトが正しく設定されていることを確認します。
gcloud config set project {{project-id}}
3. Skaffold のスタートガイド
- 次のコマンドを実行して、最上位の Skaffold 構成ファイル
skaffold.yamlを作成します。
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- IDE ペインで
skaffold.yamlファイルを開きます。これは、Skaffold パイプラインを定義する最上位の構成ファイルです。
Kubernetes のような YAML 形式と、YAML の次のセクションに注目してください。
builddeployprofiles
これらのセクションでは、アプリケーションのビルドとデプロイの方法と、各デプロイ ターゲットのプロファイルを定義します。
Skaffold ステージの完全なリストについては、Skaffold パイプライン ステージのドキュメントをご覧ください。
4. ビルド
build セクションには、アプリケーションのビルド方法を定義する構成が含まれています。この例では、git タグの処理方法の構成と、アプリケーションを構成するコンテナ イメージを定義する artifacts セクションを確認できます。
このセクションでは、イメージのビルドに使用する Dockerfile のリファレンスも確認できます。Skaffold は、Jib、Maven、Gradle、クラウドネイティブ Buildpacks、Bazel、カスタム スクリプトなどの他のビルドツールもサポートしています。この構成の詳細については、Skaffold Build のドキュメントをご覧ください。
5. デプロイ
deploy セクションには、アプリケーションのデプロイ方法を定義する構成が含まれています。この場合、Kustomize ツールを使用するように Skaffold を構成するデフォルトのデプロイの例を確認できます。
Kustomize ツールは、一連の共通コンポーネント YAML ファイル(base ディレクトリ内)を 1 つ以上の「オーバーレイ」と組み合わせて Kubernetes マニフェストを生成する機能を提供します。通常、オーバーレイは 1 つ以上のデプロイ ターゲット(通常は dev、test、staging、production など)に対応します。
この例では、3 つのターゲット(dev、staging、prod)に 2 つのオーバーレイがあります。dev オーバーレイはローカル開発で使用され、staging オーバーレイと prod オーバーレイは Skaffold を使用してデプロイするときに使用されます。
6. プロファイル
profiles セクションには、さまざまなコンテキストのビルド、テスト、デプロイの構成を定義する構成が含まれています。通常、コンテキストはアプリケーション デプロイ パイプライン内の異なる環境(この例では staging や prod など)です。つまり、ボイラープレート構成を繰り返すことなく、ターゲット環境ごとに内容が異なるマニフェストを簡単に管理できます。
profiles セクションの構成では、メイン構成(build、test、deploy セクションなど)の項目を置き換えたり、パッチを適用したりできます。
例として、ファイル overlays > prod > deployment.yaml を開きます。アプリケーションのレプリカ数が 3 に設定され、基本構成がオーバーライドされていることに注意してください。
アプリケーションのソースコードをナビゲートする。
- IDE ペインで次のファイル
app > main.goを開きます。これは、1 秒ごとにstdoutに文字列を書き込むシンプルな golang アプリケーションです。 - アプリケーションは、実行されている Kubernetes Pod の名前も出力します。
Dockerfile の表示
- IDE ペインで
app > Dockerfileファイルを開きます。このファイルには、main.goファイルのアプリケーション コンテナ イメージをビルドする一連のディレクティブが含まれており、最上位のskaffold.yamlファイルで参照されます。
7. Skaffold を使用した開発
Kubernetes 環境の構成
- 次のコマンドを実行して、ローカル Kubernetes クラスタが実行され、構成されていることを確認します。
minikube start
この処理には数分かかることがあります。クラスタが正常に起動すると、次の出力が表示されます。
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- 次のコマンドを実行して、
dev、staging、prodの Kubernetes Namespace を作成します。
kubectl apply -f namespaces.yaml
次の出力が表示されます。
namespace/dev created namespace/staging created namespace/prod created
ローカル開発での Skaffold の使用
- 次のコマンドを実行して、アプリケーションをビルドし、Cloud Shell で実行されているローカル Kubernetes クラスタにデプロイします。
skaffold dev
アプリケーション コンテナのビルド プロセスが実行されます。これには 1 分ほどかかることがあります。その後、アプリケーションの出力が 1 秒ごとに繰り返されます。
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
実際の Pod 名は、上記の一般的な出力とは異なります。
アプリケーションの変更
アプリケーションがローカル Kubernetes クラスタで実行されているため、コードを変更すると、Skaffold はアプリケーションを自動的に再ビルドしてクラスタに再デプロイします。
- IDE ペインで
app > main.goファイルを開き、出力文字列を変更します。
"Hello world from pod %s!\n"
これを、次のように変更します。
"Hello Skaffold world from pod %s!\n"
変更を行うと、Skaffold がイメージを再ビルドしてクラスタに再デプロイし、ターミナル ウィンドウに出力の変更が表示されます。
- IDE ペインの「app > main.go」ファイルで、次の行を変更します。
time.Sleep(time.Second * 1)
に
time.Sleep(time.Second * 10)
アプリケーションが再ビルドされて再デプロイされ、出力行が 10 秒ごとに 1 回表示されます。
Kubernetes 構成の変更
次に、Kubernetes 構成を変更します。Skaffold は再び自動的に再デプロイします。
- IDE で
base > deployment.yamlファイルを開き、次の行を変更します。
replicas: 1
に
replicas: 2
アプリケーションが再デプロイされると、2 つの Pod が実行されていることがわかります。それぞれ異なる名前が付けられています。
- 次に、ファイル
base > deployment.yamlの同じ行を次のように変更します。
replicas: 1
1 つの Pod がサービスから削除され、1 つだけが残っていることがわかります。
- 最後に、ターミナル ウィンドウで
Ctrl-Cを押して、Skaffold のローカル開発を停止します。
リリースをカットする
次に、リリース イメージをビルドしてクラスタにデプロイし、リリースを作成します。
- 次のコマンドを実行してリリースをビルドします。
skaffold build --file-output artifacts.json
このコマンドは、最終的なイメージをビルドし(必要な場合)、リリース詳細を artifacts.json ファイルに出力します。
Cloud Deploy などのツールを使用してクラスタにデプロイする場合、このファイルにはリリース情報が含まれます。これは、アーティファクトがライブへのルートで不変であることを意味します。
- 次のコマンドを実行して、
artifacts.jsonファイルの内容を表示します。
cat artifacts.json | jq
このファイルには、最終的なデプロイで使用されるイメージへの参照が含まれています。
ステージングにデプロイする
- 次のコマンドを実行して、
stagingプロファイルを使用してリリースをデプロイします。
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
デプロイが完了すると、次のような 2 つの Pod からの出力が表示されます。
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- ターミナル ウィンドウで Ctrl+C キーを押して、Skaffold の出力を停止します。
- 次のコマンドを実行して、クラスタでアプリケーションが稼働していることを確認します。
kubectl get all --namespace staging
アプリケーションの staging プロファイルでデプロイに 2 つのレプリカを指定しているため、2 つの異なる Pod 名が表示されます。
本番環境にデプロイする
- 次のコマンドを実行して、
prodプロファイルを使用してリリースをデプロイします。
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
デプロイが完了すると、次のような 3 つの Pod からの出力が表示されます。
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- ターミナル ウィンドウで Ctrl+C キーを押して、Skaffold の出力を停止します。
アプリケーションの prod プロファイルでは、デプロイに 3 つのレプリカが必要であると指定されているため、3 つの異なる Pod 名が表示されます。
- 次のコマンドを実行して、クラスタでアプリケーションが稼働していることを確認します。
kubectl get all --namespace prod
次のような行を含む出力が表示されます。これは、prod デプロイを示しています。
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
3 つのアプリケーション Pod が実行されていることも確認します。
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. 完了
おめでとうございます!Understanding Skaffold ラボを完了し、ローカル開発とアプリケーションのデプロイ用に Skaffold を構成して使用する方法を学習しました。
次のステップ:
Skaffold についてさらに学習する:
クリーンアップ
- 次のコマンドを実行して、ローカル クラスタをシャットダウンします。
minikube delete