我有一个JupyterHub笔记本服务器,并且正在aws(EKS)上的托管kubernetes上运行。我的docker存储库是AWS ECR。
我正在迭代开发用于测试的docker映像。
我的工作流程是:
config.yaml
中更新docker image标签helm upgrade jhub jupyterhub/jupyterhub --version=0.7.0 --values config.yaml
但是,旧的docker映像仍在使用吗?
如何更改开发工作流程,以便可以简单地更新docker映像并进行测试?
其他信息:
编辑:
已采取的其他故障排除步骤:
试图删除头盔版本并重新安装:
helm delete --purge jhub && helm upgrade --install jhub jupyterhub/jupyterhub --namespace jhub --version=0.7.0 --values config.yaml
尝试删除helm版本的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
(根据莫斯塔法在其回答中的建议)
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的描述,发现奇怪的事件消息: 我查看了一个广告连播说明,并看到一条奇怪的事件消息
Normal Pulled 32m kubelet, <<REDACTED>> Container image "<AWS_ACCOUNT>.dkr.ecr.eu-west-1.amazonaws.com/<REPO>:NEW_TAG" already present on machine
上面提到的图像是我刚刚上传到图像仓库的新图像。该映像不可能已经下载到群集上。不知何故,原始图像和新图像的哈希值都相同,或者这是一个错误?
答案 0 :(得分:1)
由于将imagePullPolicy
设置为IfNotPresent
,因此docker镜像可能不会更新,这意味着根据kubernetes documentation,以下内容:
默认的拉取策略是IfNotPresent,如果该图像已经存在,它将导致Kubelet跳过拉取图像。如果您想始终强制拉动,则可以执行以下操作之一:
- 将容器的imagePullPolicy设置为“始终”。
- 省略imagePullPolicy并使用:latest作为要使用的图像的标签。
- 省略imagePullPolicy和要使用的图像标签。
- 启用AlwaysPullImages准入控制器
在您的情况下,可以在部署新图表时在imagePullPolicy
内将Awlays
的值设置为config.yaml
,以使其提取代码的最新docker镜像>
# Add this in your config.yaml (check if hub: is already exist to avoid overriding it)
hub:
imagePullPolicy: Always