我有以下复制控制器在Kubernetes上的GKE:
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 2
selector:
app: myapp
deployment: initial
template:
metadata:
labels:
app: myapp
deployment: initial
spec:
containers:
- name: myapp
image: myregistry.com/myapp:5c3dda6b
ports:
- containerPort: 80
imagePullPolicy: Always
imagePullSecrets:
- name: myregistry.com-registry-key
现在,如果我说
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b
执行滚动更新,但不重新拉取。为什么?
Kubernetes将在Pod创建时拉动(参见updates -images doc):
使用标记为:最新的图像
imagePullPolicy:始终被指定
如果你想一直拉,这很好。但如果您想按需执行该操作:例如,如果您想使用某些公共映像:latest,但只希望在您要求时手动提取更新的版本。您目前可以:
将imagePullPolicy设置为IfNotPresent或Never并预拉:在每个集群节点上手动拉出最新的图像,以便缓存最新的图像,然后执行kubectl滚动更新或类似的重启Pods(丑陋的容易破坏的hack!)
临时更改imagePullPolicy,执行kubectl apply,重新启动pod(例如kubectl roll -update),恢复imagePullPolicy,重做kubectl apply(难看!)
Pull - push一些公共映像:最新的到您的私有存储库,并执行kubectl滚动更新(重!)
没有好的解决方案按需拉。如果有变化,请评论;我会更新这个答案。
Kubernetes将在Pod创建时拉动(参见updates -images doc):
使用标记为:最新的图像
imagePullPolicy:始终被指定
如果你想一直拉,这很好。但如果您想按需执行该操作:例如,如果您想使用某些公共映像:latest,但只希望在您要求时手动提取更新的版本。您目前可以:
将imagePullPolicy设置为IfNotPresent或Never并预拉:在每个集群节点上手动拉出最新的图像,以便缓存最新的图像,然后执行kubectl滚动更新或类似的重启Pods(丑陋的容易破坏的hack!)
临时更改imagePullPolicy,执行kubectl apply,重新启动pod(例如kubectl roll -update),恢复imagePullPolicy,重做kubectl apply(难看!)
Pull - push一些公共映像:最新的到您的私有存储库,并执行kubectl滚动更新(重!)
没有好的解决方案按需拉。如果有变化,请评论;我会更新这个答案。