一尘不染

Kubernetes:使用“最新”标签时,kubectl apply不会更新pod

docker

我正在kubectl apply更新我的Kubernetes容器:

kubectl apply -f /my-app/service.yaml
kubectl apply -f /my-app/deployment.yaml

以下是我的service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    run: my-app
spec:
  type: NodePort
  selector:
    run: my-app 
  ports:
  - protocol: TCP
    port: 9000
    nodePort: 30769

以下是我的deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:  
  selector:
    matchLabels:
      run: my-app
  replicas: 2
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: my-app
        image: dockerhubaccount/my-app-img:latest
        ports:
        - containerPort: 9000
          protocol: TCP
      imagePullSecrets:
      - name: my-app-img-credentials
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%

第一次可以正常运行,但是在随后的运行中,我的广告连播没有得到更新。

我已经在https://github.com/kubernetes/kubernetes/issues/33664上阅读了建议的解决方法,该方法是:

kubectl patch deployment my-app -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"

我能够运行上面的命令,但是它没有为我解决问题。

我知道可以通过手动将image标签从“ latest”更改为另一个标签来触发pod更新,但是我想确保无需检查Docker Hub就能获得最新的image。

任何帮助将不胜感激。


阅读 2129

收藏
2020-06-17

共1个答案

一尘不染

原来我误解了我从链接中给出的解决方法命令。

我以为这是一次配置我的部署的命令,它将将来的所有kubectl apply命令都视为更新我的Pod的触发器。

实际上,每次我要更新Pod时,我实际上只需要运行命令:

kubectl patch deployment my-app -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"

非常感谢大家的帮助!

2020-06-17