Minikube 上的 Helm:更新本地镜像

API*_*API 3 minikube kubernetes-helm

我有 Minikube (v1.1.0) 在本地运行,Helm (v2.13.1) 初始化并连接本地 docker 守护进程并运行 Minikube eval $(minikube docker-env)。在我的应用程序的代码库中,我使用helm create chart. 我的前几行./chart/values.yml改为:

image:
  repository: app-development
  tag: latest
  pullPolicy: Never
Run Code Online (Sandbox Code Playgroud)

我在本地构建映像并使用 Helm 安装/升级图表:

image:
  repository: app-development
  tag: latest
  pullPolicy: Never
Run Code Online (Sandbox Code Playgroud)

现在,第一次就可以完美运行,但如果我对应用程序进行更改,我想运行上述两个命令来升级映像。有什么办法可以让它发挥作用吗?

解决方法

为了获得预期的行为,我可以从 Minikube 中删除图表并再次安装:

docker build . -t app-development
helm upgrade --install example ./chart
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 6

当您进行这样的更改时,Kubernetes 会在 Deployment 对象中查找某些更改。如果它发现您想要 1 个 Pod running app-development:latest,并且它已经有 1 个 Pod 运行名为 的镜像app-development:latest,那么它处于正确的状态,并且不需要执行任何操作(即使具有该标签的本地镜像已更改)。

这里的规范建议是永远不要:latest在 Kubernetes 中使用该标签。每次构建映像时,请使用不同的标签(时间戳或当前源代码管理提交 ID 是简单且独特的东西)。使用 Helm,可以很容易地根据您传入的值进行注入:

image: app-development:{{ .Values.tag | default "latest" }}
Run Code Online (Sandbox Code Playgroud)

这种构建顺序看起来更像是

TAG=$(date +%Y%m%d-%H%m%S)
docker build -t "app-development:$TAG" .
helm upgrade --install --set "tag=$TAG"
Run Code Online (Sandbox Code Playgroud)

如果您正在积极开发组件,您可能会发现尝试尽可能地将“代码攻击”与“部署到 Kubernetes 中”分开会更容易。其中一些往往是不可避免的,但 Kubernetes 确实不是为实时开发环境而设计的。