我在 GKE 上的 Kubernetes 中有以下复制控制器:
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 创建(请参阅更新图像文档 https://kubernetes.io/docs/concepts/containers/images/#updating-images):
- 使用标记的图像
:latest
-
imagePullPolicy: Always
已指定
如果你想一直拉的话,这非常棒。但如果你想这么做怎么办一经请求: 例如,如果你想使用some-public-image:latest
但只想在您要求时手动获取较新的版本。目前您可以:
- Set
imagePullPolicy
to IfNotPresent
or Never
and pre-pull https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images:在每个集群节点上手动拉取映像,以便缓存最新的映像,然后执行kubectl rolling-update
或类似于重新启动 Pod(丑陋且容易损坏的黑客!)
-
暂时地 change
imagePullPolicy
, do a kubectl apply
,重新启动 Pod(例如kubectl rolling-update
), 恢复imagePullPolicy
,重做一个kubectl apply
(ugly!)
-
拉和推
some-public-image:latest
到您的私人存储库并执行kubectl rolling-update
(重的!)
按需拉取没有好的解决方案。如果有变化,请发表评论;我会更新这个答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)