我在k8s中有现有的部署,我想更新容器,我在部署和运行中更新了docker镜像标签(新的唯一id):
kubectl apply -f testdeploy.yml --namespace=myapp输出为:deployment.apps/fakename configured
但是什么也没发生。
当我运行kubectl get pods --namespace=myapp时,我只能看到一个年老的旧pod。
有时是有效的,有时不是,为什么?
怎么啦?
发布于 2020-09-17 03:45:43
尝试添加ImagePullPolicy: Always,如下所示:
spec:
containers:
- image: <YOUR_IMAGE>:<YOUR_TAG>
imagePullPolicy: Always发布于 2020-09-17 14:02:54
尝试描述部署并查看事件
kubectl describe <deployment-name> --namespace=myapp或
kubectl get events --namespace=myapp来理解正在发生的事情。
请尝试检查是否已为更改的部署容器映像创建新副本。
kubectl get rs -n myapp检查执行kubectl get rs时预期的副本数量示例
NAME DESIRED CURRENT READY AGE
<deployment-name>-58ffbb8b76 0 0 0 10s也许更多的细节将有助于理解为什么当您尝试部署时没有发生任何事情。
kubernetes有很好的文档来检查这一点。
https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/
发布于 2020-09-17 07:26:45
你需要删除你的部署更新,然后重新创建,它将获取新的镜像,或者你可以编辑你的部署文件,如下所示,引入kubectl delete -f testdeploy.yml --namespace=myapp kubectl apply -f testdeploy.yml --namespace=myapp,然后当你更新你的镜像时,你可以简单地输入kubectl rollout restart deploy deployment_name_mentioned_in_manifest -n namespace这将提供一个新的pod,而旧的保留并获取新的镜像,一旦完成,旧的pod将被删除,新的pod将具有最新的镜像。
使用下面的清单文件的示例如果我想获取最新的映像,我将输入kubectl rollout restart deploy nginx -n test
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: test
spec:
replicas: 1
selector:
matchLabels:
name: nginx
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
readinessProbe:
tcpSocket:
port: 443
port: 80
initialDelaySeconds: 5
periodSeconds: 5https://stackoverflow.com/questions/63926591
复制相似问题