【问题标题】:Upgrading JupyterHub helm release w/ new docker image, but old image is being used?使用新的 docker 映像升级 JupyterHub helm 版本,但正在使用旧映像?
【发布时间】:2019-03-08 21:24:08
【问题描述】:

我有一个 JupyterHub 笔记本服务器,我在 aws (EKS) 上的托管 kubernetes 上运行。我的 docker 存储库是 AWS ECR。

我正在迭代开发我的 docker 镜像以进行测试。

我的工作流程是:

  1. 更新 docker 镜像
  2. 更新 helm release 配置中的 docker 镜像标签 config.yaml
  3. 升级 helm release helm upgrade jhub jupyterhub/jupyterhub --version=0.7.0 --values config.yaml
  4. 测试对 docker 映像的更改

但是,旧的 docker 镜像还在使用吗?

我必须如何更改我的开发工作流程,以便我可以简单地更新 docker 映像并进行测试?

附加信息:

编辑:

采取的其他故障排除步骤:

尝试删除 helm 版本并重新安装:

helm delete --purge jhub && helm upgrade --install jhub jupyterhub/jupyterhub --namespace jhub --version=0.7.0 --values config.yaml

尝试删除 helm release AND 命名空间,然后重新安装:

helm delete --purge jhub && kubectl delete namespace jhub && helm upgrade --install jhub jupyterhub/jupyterhub --namespace jhub --version=0.7.0 --values config.yaml

还尝试将 imagePullPolicy 值覆盖为 Always(根据 Mostafa 在他的回答中的建议)

hub:
  imagePullPolicy: Always

这些都不起作用。仍在使用旧的原始 docker 映像。

奇怪的是,当我检查当前在我的 kubernetes 集群中使用的 docker 镜像时,我看到了新的 docker 镜像。但它不是正在使用的那个。

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"

# output:
...
<AWS_ACCOUNT>.dkr.ecr.eu-west-1.amazonaws.com/<REPO>:NEW_TAG  # <-- not actually being used in jupyerhub
...

编辑(2): 我检查了 pod 描述,发现了奇怪的事件消息: 我检查了我的一个 pod 描述并看到一条奇怪的事件消息

  Normal  Pulled                  32m   kubelet,  <<REDACTED>>  Container image "<AWS_ACCOUNT>.dkr.ecr.eu-west-1.amazonaws.com/<REPO>:NEW_TAG" already present on machine

上面提到的图像是我刚刚上传到图像存储库的新图像。镜像不可能已经下载到集群上。不知何故,原始图像和新图像的哈希值相同,或者这是一个错误?

【问题讨论】:

  • 对于每个 docker 映像更改,您需要创建一个新的 docker 容器以使用新映像并查看反映的更改
  • 舵图中的imagePullPolicy 值是多少?
  • @MostafaHussein -- 图表不是我的,它是公开的:https://jupyterhub.github.io/helm-chart/。我检查了图表,值是IfNotPresent ——所以,这就解释了为什么 docker 图像没有更新。现在,我想问题是:我可以覆盖这个值吗?还是我必须直接 fork 和修改图表?
  • @MostafaHussein 如果您知道我如何做到这一点,请随时将其发布为答案
  • @JamesWierzba 我会发布它

标签: amazon-web-services docker jupyter-notebook kubernetes-helm


【解决方案1】:

由于将imagePullPolicy 设置为IfNotPresent,docker 映像可能不会更新,这意味着根据kubernetes documentation 如下:

默认的拉取策略是 IfNotPresent,这会导致 Kubelet 跳过拉取已经存在的镜像。如果您想始终强制拉动,可以执行以下操作之一:

  • 将容器的 imagePullPolicy 设置为 Always。
  • 省略 imagePullPolicy 并使用 :latest 作为要使用的图像的标签。
  • 省略 imagePullPolicy 和要使用的图像的标签。
  • 启用AlwaysPullImages准入控制器

在您的情况下,您可以在部署新图表时将 imagePullPolicy 的值设置为 Awlays 内的 Awlays,以使其拉取代码的最新 docker 映像

# Add this in your config.yaml (check if hub: is already exist to avoid overriding it)
hub:
  imagePullPolicy: Always

【讨论】:

  • 但是,如果图表是从公共仓库安装的,我有什么办法可以从我的发布配置中覆盖imagePullPolicy?例如helm upgrade jhub jupyterhub/jupyterhub --version=0.7.0 --values config.yaml 其中config.yaml 将覆盖我的imagePullPolicy
  • 让我检查一下原来的 values.yaml 并回复你
  • 抱歉,我最初的问题表述有误。我混淆了chartrelease的术语
  • @JamesWierzba 请检查我的答案
  • 你也可以添加你的 pod 描述的结果吗?在将敏感数据添加到您的问题之前,不要忘记删除任何敏感数据
猜你喜欢
  • 2019-11-12
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
相关资源
最近更新 更多