y-ohgi's blog

TODO: ここになにかかく

skaffold をGKE-autopilot で開発環境として利用する

f:id:y-ohgi:20210828162801p:plain

TL;DR

  • GKE-autopilot でskaffold を使う
  • skaffold のホットリロードを試す

概要

GKE-autopilot で開発環境としてskaffold を使い、開発効率化をする

versions

  • macOS
    • 11.5.2
  • GKE-autopilot
    • v1.20.8-gke
  • skaffold
    • v1.30.0

skaffold を実行する

CLI のインストール

$ brew install skaffold

GCP Artifact の認証情報を取得

GCP Artifact を使用したいため認証情報を予め取得する

$ gcloud auth configure-docker \
    asia-northeast1-docker.pkg.dev

Docker の準備

nginx を立てて単純なhtml のホットリロードを試すための Dockerfile を作成

FROM nginx:1.21.1-alpine

COPY ./html /usr/share/nginx/html

./html/index.html の作成

<h1>Hello World</h1>

マニフェストの作成

k8s-pod.yaml の作成。前項で作成したDockerfile を動かすだけのマニフェスト

apiVersion: v1
kind: Pod
metadata:
  name: getting-started
spec:
  containers:
  - name: getting-started
    image: <GCP ARTIFACT URI>
    ports:
    - containerPort: 80

skaffold.yaml の作成。 sync: の項目で同期したいディレクトリを指定する。

apiVersion: skaffold/v2beta21
kind: Config
build:
  artifacts:
  - image: <GCP ARTIFACT URI>
    sync:
      manual:
      - src: 'html*'
        dest: '/usr/share/nginx/html'
deploy:
  kubectl:
    manifests:
      - k8s-*

GKE-autopilot へデプロイ

コマンド一発でビルド・push・デプロイを行ってくれる

$ skaffold dev
Listing files to watch...
 :

nginx をポートフォワードでローカルへ持ってくる

$ kubectl port-forward pod/getting-started 8888:80
Forwarding from 127.0.0.1:8888 -> 80
Forwarding from [::1]:8888 -> 80
Handling connection for 8888

curl で疎通確認

$ curl localhost:8888
<h1>Hello World</h1>

ホットリロードを試す

./html/index.html を適当に更新

<h1>Hello World !!!!!!!</h1>

するとskaffold が検知してくれビルドが走り、反映してくれる。

$ curl localhost:8888
<h1>Hello World !!!!!!!</h1>

片付け

$ kubectl delete ns skaffold

まとめ

すんなり動き感動。
一人でGKE を利用するならTelepresence よりskaffold が良さそう。
また、GCP のOSS ということでCloud Build をサポートしてくれていたり、欲しいオプションはだいたいそろっていたり(ホットリロードをはじめタグ付けみたいな。)、kustomize を扱えたりで積極的に使っていきたいなという気持ち。