0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

skaffold dev でリソースが作成されない(manifests と deploy の違い)

Last updated at Posted at 2024-12-02

はじめに

記事を見てくださりありがとうございます!
@HayatoHanaoka と申します。
今日も仕事で扱っている技術でちょっとした躓きがあり、それを解消していく中でとある学びを得ました。
その内容を、備忘録がてら記事にします!
ちなみに、ネタバレをすると...

  1. manifestsdeploy プロパティの関心の違い
  2. 関心に合わせたプロパティを選ぶことの大切さ
    です。

何が起きたか?

skaffold dev -f e2e.yaml --port-forward でリソースが構築されない

やりたかったことは、以下のe2e.yamlskaffold devすることで、
モック用のpodとアプリケーション用のpodを同時に立ち上げることです。

e2e.yaml
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通りの解決法がありました。

  1. manifests -> deploy に書き換える
  2. deploy プロパティを追加する

プロパティについて詳しく知りたい方は、公式docsをご参照ください。
https://skaffold.dev/docs/references/yaml/

それぞれの方式の特徴を記述しておきます。(毎度の如く、自己解釈です。ご容赦ください。)

  • 前者
    • マニフェストの作成〜デプロイ方法までをまとめて設定できる
      • デプロイまでの工程を自身で行う場合に有用
    • kubectlなどのコマンド単位でのデプロイ方法を指定できたりする
  • 後者
    • manifests プロパティを残すことで、マニフェストファイルの作成に注力できる
      • デプロイはCDツール等を用いて行う場合に有用
    • deploy プロパティにデプロイ方法を設定することも可能

私の場合、デプロイ自体は Arogocd を使用していたため、マニフェストファイルの作成に注力したプロパティを残せる後者の方式を選択しました。

修正前

./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 }}'
./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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?