はじめに
記事を見てくださりありがとうございます!
@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
を使おうがそこまで変わりはないはずです。
ただ、やりたいことや関心に適したプロパティを選んであげることも大切なので、今後は気をつけて書いていこうと思いました!🛹