问题描述
我使用 minikube
和 skaffold
在本地 k8s 集群中开发。使用 Django 和 DRF 作为 API。
我正在处理多个 models.py
,但有一件事情开始变得烦人,每次我运行 ./manage.py
命令,例如 (showmigrations
,makemigrations
,等)它会触发 API 节点的 skaffold
重建。不到 10 秒,但仍然很烦人。
我应该从我的 skaffold.yaml
中具体排除/包括什么来防止这种情况发生?
apiVersion: skaffold/v2beta12
kind: Config
build:
artifacts:
- image: postgres
context: postgres
sync:
manual:
- src: "**/*.sql"
dest: .
docker:
dockerfile: Dockerfile.dev
- image: api
context: api
sync:
manual:
- src: "**/*.py"
dest: .
docker:
dockerfile: Dockerfile.dev
local:
push: false
deploy:
kubectl:
manifests:
- k8s/ingress/development.yaml
- k8s/postgres/development.yaml
- k8s/api/development.yaml
defaultNamespace: development
解决方法
似乎 ./manage.py
必须在本地记录一些状态,从而触发重建。您需要将这些状态文件添加到您的 .dockerignore
。
Skaffold 通常以警告 级别记录日志,这会抑制触发同步或重建的详细信息。使用 -v info
运行 Skaffold,您会看到更多详细信息:
$ skaffold dev -v info
...
[node] Example app listening on port 3000!
INFO[0336] files added: [backend/src/foo]
INFO[0336] Changed file src/foo does not match any sync pattern. Skipping sync
Generating tags...
- node-example -> node-example:v1.20.0-8-gc9335b0ad-dirty
INFO[0336] Tags generated in 80.293621ms
Checking cache...
- node-example: Not found. Building
INFO[0336] Cache check completed in 1.844615ms
Found [minikube] context,using local docker daemon.
Building [node-example]...