私は、ローカルに minikube をインストールして scaffold を試してきました。本番環境にできるだけ近いものでプロジェクトを開発できることは素晴らしいことです。
skaffold github リポジトリで提供されている入門サンプルを使用すると、すべてが正常に機能し、IDE (intellij アイデア) がブレークポイントで停止し、コードを変更すると、変更が即座に反映されます。
単純な main.go ファイルよりも少し複雑な私の個人的なプロジェクトでは、期待どおりに動作しません。IDE はブレークポイントで停止しますが、コンソールで scaffold がその特定のファイルに加えられた変更を検出したことを確認しても、ホット コード リロードは発生しませんが、残念ながら変更は反映/適用されません。
イメージのビルドには docker ファイルが使用されます。docker ファイルは次のとおりです。
FROM golang:1.14 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app.o ./cmd/shortener/shortener.go
FROM alpine:3.12
COPY --from=builder /app.o ./
COPY --from=builder /app ./
EXPOSE 3000
ENV GOTRACEBACK=all
CMD ["./app.o"]
kubernetes 側では、次のようにデプロイとサービスを作成しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: url-shortener-deployment
spec:
selector:
matchLabels:
app: url-shortener
template:
metadata:
labels:
app: url-shortener
spec:
containers:
- name: url-shortener
image: url_shortener
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: url-shortener-service
spec:
selector:
app: url-shortener
ports:
- port: 3000
nodePort: 30000
type: NodePort
skaffold に関しては、ここに skaffold.yaml ファイルがあります。
apiVersion: skaffold/v2beta5
kind: Config
metadata:
name: url-shortener
build:
artifacts:
- image: url_shortener
context: shortener
docker:
dockerfile: build/docker/Dockerfile.dev
noCache: false
deploy:
kubectl:
manifests:
- stack/mongo/mongo.yaml
- shortener/deployments/kubernetes/shortener.yaml
詳細ログを有効にしましたが、ソース コード ファイルを保存 (CTRL+S) するたびに、出力にこれが表示されます。
time="2020-07-05T22:51:08+02:00" level=debug msg="Found dependencies for dockerfile: [{go.mod /app true} {go.sum /app true} {. /app true}]"
time="2020-07-05T22:51:08+02:00" level=info msg="files modified: [shortener/internal/handler/rest/rest.go]"
これは、変化が検出されたことを意味すると思います。
ブレークポイントは IDE で正しく機能しますが、kubernetes でのコード スワップは発生していないようです