Mitomex Blog

Kubernetes の作業を自動化してくれるサービス Skaffold の yaml 設定ファイルの書き方

Jan 18, 2021

Kubernetes で Cluster 内の Pod を更新するとき以下の工程がある。

  1. Docker image 作成
  2. Docker image を Docker Hub に Push
  3. kubectl rollout restart deployment <depl yaml ファイル名> を実行して更新

開発時にファイルを更新するたびに上記手順を行っていると、とても手間。

上記作業を簡略化してくれるサービスとして Skaffold がある。

開発環境でのみ使えるサービス。

skaffold.yaml の記述例

参考ページ:skaffold.yaml

apiVersion: skaffold/v2alpha3
kind: Config
deploy:
  kubectl:
    manifests:
      - ./infra/k8s/*
build:
  local:
    push: false
  artifacts:
    - image: mitomex/client
      context: client
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: 'src/**/*.js'
            dest: .
    - image: mitomex/comments
      context: comments
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: '*.js'
            dest: .
    - image: mitomex/event-bus
      context: event-bus
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: '*.js'
            dest: .
    - image: mitomex/posts
      context: posts
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: '*.js'
            dest: .
    - image: mitomex/query
      context: query
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: '*.js'
            dest: .

apiVersion

apiVersion は表示させたい Kubernetes Object のセットを指定する。

kind

kind は apiVersion で指定した Kubernetes Object セットの中から使いたいタイプを指定する。

deploy

deploy に Kubernetes Cluster に適用したい yaml が保存されている場所を指定する。

deploy は「展開する、配置する」という意味がある。

build

build に Pod に適用したい Docker Image を指定する。

local

local: push は作成した Docker Image を Docker Hub に Push するかどうか。

手動で更新するときは Docker Hub に Push する必要があったが、 Skaffold を使うときは Docker Hub に Push する必要がないので false にする。

build:
  local:
    push: false

参考ページ:SKAFFOLD Build

artifacts

artifacts に どの Docker Image を作成し、どのファイルの更新を監視するか指定する。

- image: mitomex/client
  context: client
  docker:
    dockerfile: Dockerfile
  sync:
    manual:
      - src: 'src/**/*.js'
        dest: .

image に Docker Image の名前を指定する。

context に Docker Image を作成するためのファイル群がどのディレクトリにあるか指定する。

docker に Dockerfile を指定する。(何に基づいて作成するかを指定するところ)

sync に更新を監視するファイルを指定。

参考ページ;SKAFFOLD File Sync

Skaffold を実行する

skaffold.yaml が保存してあるディレクトリに移動。

通常はプロジェクトのルートディレクトリ。

以下のコマンドを実行する。

skaffold dev