【问题标题】:Docker Image and it's Kubernetes Pod differDocker Image 和它的 Kubernetes Pod 不同
【发布时间】:2020-10-12 02:47:19
【问题描述】:
我修改了 Docker-Image 中的内容并运行它的 Kubernetes Pod。但是,Kubernetes Pod 包含旧版本 Docker Image 的内容,而不是修改后的内容。
这怎么可能?
我猜 K8s 工作节点正在尝试从本地获取尽可能多的层,而从 docker-registry 中只获取很少的层。
如何解决这个问题,使得每次 K8s 工作节点只从 Registry 中拉取 docker 镜像的所有层?
【问题讨论】:
标签:
kubernetes
docker-registry
kubernetes-pod
docker-image
docker-layer
【解决方案1】:
将imagePullPolicy 设置为Always。
示例:
apiVersion: v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: image-name
image: my-image:0.0.1
imagePullPolicy: Always # <<--here
默认拉取策略是IfNotPresent,这会导致 kubelet 跳过拉取已经存在的镜像。如果您想始终强制拉动,请将其设置为 Always。
Reference
【解决方案2】:
在您的部署中使用imagePullPolicy: Always
如果您过于频繁地部署应用程序(典型用例是 CI/CD),此选项会派上用场。
如果您希望您的图像应该在没有任何缓存的情况下从本地使用 docker build 命令中的--no-cache 命令重新构建,还有一件事。
docker build -t myimage/imagename . --no-cache