Skaffoldのprofile機能を使えば、profileごとに設定を上書くことができます。
たとえば、開発環境とプロダクション環境へのデプロイの仕方を変えることができます。
実際の例を見てみましょう。
例えば以下のようなskaffold.yamlがあったとします。
apiVersion: skaffold/v1
kind: Config
build:
artifacts:
- image: sample-image
deploy:
kustomize:
path: kubernetes/overlays/dev
kustomizeのpathとしてdevを指定していますが、これをproductionを指定したい場合、profile機能を使うとスマートにできます。
apiVersion: skaffold/v1
kind: Config
build:
artifacts:
- image: sample-image
profiles:
- name: dev
deploy:
kustomize:
path: kubernetes/overlays/dev
- name: production
deploy:
kustomize:
path: kubernetes/overlays/production
このように書くと、dev環境へデプロイしたい場合は、
$ skaffold run -p dev
prod環境へデプロイしたい場合は、
$ skaffold run -p production
というように設定を切り替えることができます。
profile機能が行っているのは設定の上書きなので上記のdeploy以外にもbuild内容も変更が可能です。
profile機能のexamplesをみるとよく分かるかと思います。
またActivation
というprofileの自動切り替え機能もあります。
Activationを使うと
kubecontextや環境変数、skaffoldコマンド(dev/run/build/deploy)によって、profileを自動で切り替えてくれます。
build:
artifacts:
- image: sample-image
profiles:
- name: local
activation:
- kubeContext: minikube
command: dev
deploy:
kustomize:
path: kubernetes/overlays/local
- name: dev
activation:
- env: ENV=dev
deploy:
kustomize:
path: kubernetes/overlays/dev
- name: production
activation:
- env: ENV=production
deploy:
kustomize:
path: kubernetes/overlays/production
例えば上記の場合、
- kubeContextがminikubeで、skaffold devコマンドを実行した場合、local profileが使用される
- ENV=devという環境変数があれば、dev profileが使用される
- ENV=productionという環境変数があれば、production profileが使用される
といった具合です。
うまく使えば-pオプションにいちいち指定しなくてよくなるので大変便利ですね。