ローカルで変更したコードをTiltを使ってkindのk8s環境に反映させる
Tilt?
ローカルで開発、ビルドしてk8sに反映して、Pod立て直して、、という手間をTiltを使うとローカルで開発、ビルドからPodの立て直しまでを自動でやってくれるようになります。つまりホットリロード。
カスタムコントローラーを作る時とかのお供によく紹介されています。便利そう。
結果
Webサーバーを建てて変更内容が反映されるところまで確認
インストール
公式より。
ディレクトリ構成
Tiltfileの用意
動かすのにはTitfileという、設定ファイルを作る必要があります。
k8s_yaml('simple-go.yaml')
k8s_resource('simple-go', port_forwards='1323')
custom_build(
'simple-go-app',
'docker build -t $EXPECTED_REF . && kind load docker-image $EXPECTED_REF',
['.'],
)
## dockerで使う場合
# load('ext://restart_process', 'docker_build_with_restart')
# docker_compose('docker-compose.yaml')
# docker_build_with_restart(
# 'example-go-image',
# '.',
# dockerfile='Dockerfile',
# entrypoint='/app/build/tilt-example-go',
# live_update=[
# sync('.', '/app'),
# ],
# )
k8s_yaml()でyamlファイルのパスを入れる。
k8s_resource()でワークロードを入れるらしい。今回はPodのnameを入れてみた
https://docs.tilt.dev/api.html#api.k8s_resource
custom_build()では、Tiltを使ってビルドするときの設定を書いている。
https://docs.tilt.dev/custom_build.html#the-next-way-running-your-own-image-builder
いろんなビルド方法が用意されているが、今回はkindで動かすので、ビルド後にkindへイメージをロードする必要があり、custom_buildを選択。
その他ファイル
Tiltの動作確認だけなので、GoでシンプルなWebサーバーを立てます。
main.go
https://echo.labstack.com/docs/quick-start#hello-world
Dockerfile
FROM golang:1.22-alpine
WORKDIR /app
ADD go.mod go.sum main.go ./
RUN go mod download
RUN go build -o /simple-go
EXPOSE 1323
CMD [ "/simple-go" ]
EXPOSEしたポートの1323とTiltfileのk8s_resourceのport_forwardsの値は同じにしています
simple-go.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: simple-go
name: simple-go
spec:
containers:
- image: simple-go-app
name: simple-go
imagePullPolicy: IfNotPresent
resources: {}
ports:
- containerPort: 1323
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
普通のPodです。imagePullPolicyはIfNotPresentでないと、kindで使えないので注意です。
実行方法
Tiltfileがあるディレクトリに移動してtiltを立ち上げるだけです。
tilt up
http://localhost:10350/へアクセスすると、ビルドの状況などがわかります。
あとはmain.goを変更してビルドが終わるのを待つだけ!
package main
import (
"net/http"
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "文字文字文字!")
})
e.Logger.Fatal(e.Start(":1323"))
}
http://localhost:1323/にアクセスすると、ローカルで変更した内容が反映されるようになりました
終わり
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント