我在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
Run Code Online (Sandbox Code Playgroud)
现在,如果我说
kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b
Run Code Online (Sandbox Code Playgroud)
执行滚动更新,但没有重新拉动.为什么?
我有一个已推送到私有 Azure 容器注册表的本地 docker 映像。然后在 Azure Kubernetes 服务中,我有一个使用此映像的集群 - 来自 ACR。
现在我想更新图像(意识到我需要安装 zip 和解压缩)。我启动了一个本地容器,进行了更改,提交了它们并将新映像推送到了 ACR。不幸的是,这还不够。我的 pod 仍在使用之前版本的镜像,没有 zip。
更多细节和我尝试过的:
在掌舵图中,我使用了“最新”标签;
比较我本地“最新”图像的摘要 sha 和我在 ACR 中的图像 - 它们是相同的;
在本地启动“最新”容器 ( docker run -it --rm -p 8080:80 My-REPO.azurecr.io/MY-IMAGE:latest) - 它安装了 zip
删除了 kubernetes 中现有的 pod;新创建的仍然缺少 zip
删除发布并重新创建它 - 仍然没有。
我正在使用 ACR docker push MY-REPO.azurecr.io/MY-IMAGE:latest
所以我的问题是 - 我错过了什么?如何正确更新此设置?
假设我们在deployment.yml中有这个
containers:
- name: my_container
imagePullPolicy: Always
image: my_image:latest
Run Code Online (Sandbox Code Playgroud)
因此,重新部署可能采取以下形式:
kubectl set image deployment/my-deployment my_container=my_image
Run Code Online (Sandbox Code Playgroud)
我从这里偷来的:
我的问题是 - 这是进行滚动更新的正确方法吗?上述内容是否始终可以确保部署获得新映像?我的deployment.yml可能永远不会改变——它可能my_image:latest永远不变,那么如何进行滚动更新呢?