はじめに
記事を見てくださりありがとうございます!
@HayatoHanaoka と申します。
今日も仕事で扱っている技術でちょっとした躓きがあり、それを解消していく中でとある学びを得ました。
その内容を、備忘録がてら記事にします!
ちなみに、ネタバレをすると...
-
manifestsとdeployプロパティの関心の違い - 関心に合わせたプロパティを選ぶことの大切さ
です。
何が起きたか?
skaffold dev -f e2e.yaml --port-forward でリソースが構築されない
やりたかったことは、以下のe2e.yamlをskaffold devすることで、
モック用のpodとアプリケーション用のpodを同時に立ち上げることです。
apiVersion: skaffold/v4beta10
kind: Config
requires:
- path: ./app/skaffold.yaml
- path: ./deps.yaml
しかし...
$ skaffold dev -f e2e.yaml --port-forward
~ イメージビルドやプルのログ ~
Starting deploy...
Listing files to watch...
- docker-registry/my_app
Press Ctrl+C to exit
Watching for changes...
なにも立ち上がってないように見える...。
$ kubectl get svc,pod
No resources found in my_app namespace.
やっぱり何も立ち上がっていない。
原因
./app/skaffold.yaml と ./deps.yaml で使っていたプロパティに問題があった!
結論、manifests プロパティだけを使っていて、 deploy プロパティを設定していなかったことが原因でした。
解決法
2通りの解決法がありました。
-
manifests->deployに書き換える -
deployプロパティを追加する
プロパティについて詳しく知りたい方は、公式docsをご参照ください。
https://skaffold.dev/docs/references/yaml/
それぞれの方式の特徴を記述しておきます。(毎度の如く、自己解釈です。ご容赦ください。)
- 前者
- マニフェストの作成〜デプロイ方法までをまとめて設定できる
- デプロイまでの工程を自身で行う場合に有用
-
kubectlなどのコマンド単位でのデプロイ方法を指定できたりする
- マニフェストの作成〜デプロイ方法までをまとめて設定できる
- 後者
-
manifestsプロパティを残すことで、マニフェストファイルの作成に注力できる- デプロイはCDツール等を用いて行う場合に有用
-
deployプロパティにデプロイ方法を設定することも可能
-
私の場合、デプロイ自体は Arogocd を使用していたため、マニフェストファイルの作成に注力したプロパティを残せる後者の方式を選択しました。
修正前
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: my_app
build:
artifacts:
- image: docker-registry/my_app
context: ../../../my_app
docker:
dockerfile: ../environments/my_app/app/Dockerfile
tagPolicy:
gitCommit:
variant: AbbrevCommitSha
local:
push: false
useBuildkit: true
manifests:
helm:
releases:
- name: my_app
chartPath: helm/deployment
valuesFiles:
- helm/values.yaml
setValueTemplates:
image: docker-registry/my_app
tag: '{{ .IMAGE_TAG_docker_registry_my_app }}'
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: mock
manifests:
helm:
releases:
- name: mock
chartPath: ../lib/mock/helm
setValues:
name: mock
port: 30005
resources:
requests:
memory: 256Mi
cpu: 100m
修正後 1(manifests -> deploy に書き換える)
./app/skaffold.yaml
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: my_app
build:
artifacts:
- image: docker-registry/my_app
context: ../../../my_app
docker:
dockerfile: ../environments/my_app/app/Dockerfile
tagPolicy:
gitCommit:
variant: AbbrevCommitSha
local:
push: false
useBuildkit: true
- manifests:
+ deploy:
helm:
releases:
- name: my_app
chartPath: helm/deployment
valuesFiles:
- helm/values.yaml
setValueTemplates:
image: docker-registry/my_app
tag: '{{ .IMAGE_TAG_docker_registry_my_app }}'
./deps.yaml
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: mock
- manifests:
+ deploy:
helm:
releases:
- name: mock
chartPath: ../lib/mock/helm
setValues:
name: mock
port: 30005
resources:
requests:
memory: 256Mi
cpu: 100m
修正後 2(depoloy プロパティを追加する)
./app/skaffold.yaml
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: my_app
build:
artifacts:
- image: docker-registry/my_app
context: ../../../my_app
docker:
dockerfile: ../environments/my_app/app/Dockerfile
tagPolicy:
gitCommit:
variant: AbbrevCommitSha
local:
push: false
useBuildkit: true
manifests:
helm:
releases:
- name: my_app
chartPath: helm/deployment
valuesFiles:
- helm/values.yaml
setValueTemplates:
image: docker-registry/my_app
tag: '{{ .IMAGE_TAG_docker_registry_my_app }}'
+ deploy:
+ helm: {}
./deps.yaml
apiVersion: skaffold/v4beta10
kind: Config
metadata:
name: mock
manifests:
helm:
releases:
- name: mock
chartPath: ../lib/mock/helm
setValues:
name: mock
port: 30005
resources:
requests:
memory: 256Mi
cpu: 100m
+ deploy:
+ helm: {}
最後に
実は動き的には deploy を使おうが manifests を使おうがそこまで変わりはないはずです。
ただ、やりたいことや関心に適したプロパティを選んであげることも大切なので、今後は気をつけて書いていこうと思いました!🛹