Kubernetes kubectl设置映像部署未设置新容器映像(gcp)

Kubernetes kubectl设置映像部署未设置新容器映像(gcp),kubernetes,google-cloud-platform,gitlab-ci,Kubernetes,Google Cloud Platform,Gitlab Ci,我使用此命令将新创建的图像加载到我的应用程序的现有群集更新版本。但当我这样做,然后去网站,我没有看到任何变化 kubectl set image deployment/$DEPLOYMENT_EXTENSION $INSTANCE_NAME=gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest 我还在deployment.yaml文件中添加了这两行代码,并将其应用于我的cluser: spec: terminationGracePeriodSec

我使用此命令将新创建的图像加载到我的应用程序的现有群集更新版本。但当我这样做,然后去网站,我没有看到任何变化

kubectl set image deployment/$DEPLOYMENT_EXTENSION $INSTANCE_NAME=gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest
我还在deployment.yaml文件中添加了这两行代码,并将其应用于我的cluser:

spec:
      terminationGracePeriodSeconds: 30
      containers:
      - name: booknotes
        image: gcr.io/my-image:latest
        imagePullPolicy: Always
但它仍然不起作用。是否因为我使用了:最新标签?还是没有关系?如果你有一些IDIA,请让我知道。如果你还需要其他信息,我会附上它

gitlab-ci.yml


你是正确的,最新的标签不会触发重新部署你的吊舱。相反,您可以设置映像,然后缩放部署

   stages:
      - build
      - docker-push
      - deploy

    cache:
      paths:
        - node_modules/

    build:
      stage: build
      image: node:latest
      script:
        - yarn install
        - npm run build
      artifacts:
        paths:
          - dist/
      only:
        - master

    docker:
      stage: docker-push
      image: docker:18.09.7

      services:
        - docker:18.09.7-dind
        - google/cloud-sdk:latest

      script:
        - echo $GCP_ACCESS_JSON > $CI_PIPELINE_ID.json
        - cat $CI_PIPELINE_ID.json | docker login -u _json_key --password-stdin $GCP_REGION
        - docker build -t gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest .
        - docker push gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest

      only:
        - master

    test:
      stage: deploy
      image: google/cloud-sdk:latest
      script:
        - echo $GCP_ACCESS_JSON > $CI_PIPELINE_ID.json
        - gcloud auth activate-service-account $GCP_CE_PROJECT_EMAIL --key-file $CI_PIPELINE_ID.json --project $GCP_PROJECT_ID
        - gcloud container clusters get-credentials $CLUSTER_NAME --zone $ZONE --project $PROJECT_NAME
        - kubectl set image deployment/$DEPLOYMENT_EXTENSION $INSTANCE_NAME=gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest

      only:
        - master

另一个选项是设置图像,然后修补注释或更改某些yaml字段

您是正确的,最新的标签不会触发pod的重新部署。相反,您可以设置映像,然后缩放部署

   stages:
      - build
      - docker-push
      - deploy

    cache:
      paths:
        - node_modules/

    build:
      stage: build
      image: node:latest
      script:
        - yarn install
        - npm run build
      artifacts:
        paths:
          - dist/
      only:
        - master

    docker:
      stage: docker-push
      image: docker:18.09.7

      services:
        - docker:18.09.7-dind
        - google/cloud-sdk:latest

      script:
        - echo $GCP_ACCESS_JSON > $CI_PIPELINE_ID.json
        - cat $CI_PIPELINE_ID.json | docker login -u _json_key --password-stdin $GCP_REGION
        - docker build -t gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest .
        - docker push gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest

      only:
        - master

    test:
      stage: deploy
      image: google/cloud-sdk:latest
      script:
        - echo $GCP_ACCESS_JSON > $CI_PIPELINE_ID.json
        - gcloud auth activate-service-account $GCP_CE_PROJECT_EMAIL --key-file $CI_PIPELINE_ID.json --project $GCP_PROJECT_ID
        - gcloud container clusters get-credentials $CLUSTER_NAME --zone $ZONE --project $PROJECT_NAME
        - kubectl set image deployment/$DEPLOYMENT_EXTENSION $INSTANCE_NAME=gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest

      only:
        - master

另一个选项是设置图像,然后修补注释或更改某些yaml字段

这个问题、症状和原因与[这个问题]非常接近

在Gitlab CI管道中应用相同的解决方案使用全局变量更改图像标记,并在每次部署新的图像标记时强制Kubernetes提取并部署它


如果您有困难,我可以在Gitlib CI上为您提供帮助。

这个问题,症状和原因非常接近[这一个]

在Gitlab CI管道中应用相同的解决方案使用全局变量更改图像标记,并在每次部署新的图像标记时强制Kubernetes提取并部署它


如果您有困难,我可以在Gitlib CI上帮助您。

谢谢您的回答,很抱歉重复,我自己还没有找到这个答案。我将:latest标记更改为:$CI\u COMMIT\u REF\u NAME-$CI\u PIPELINE\u ID。此变量对运行者是全局变量,对我可用。请让我知道,在我的情况下,这是正确的解决方案吗?目的是更改每个新版本/版本上图像标签的值。就是这样。它会起作用的是的,它起作用了谢谢你的回答谢谢你的回答,很抱歉重复,我自己还没有找到这个答案。我将:latest标记更改为:$CI\u COMMIT\u REF\u NAME-$CI\u PIPELINE\u ID。此变量对运行者是全局变量,对我可用。请让我知道,在我的情况下,这是正确的解决方案吗?目的是更改每个新版本/版本上图像标签的值。就是这样。它会起作用的是的,它起作用了谢谢你的回复
kubectl set image deployment/alpine alpine=alpine:latest
kubectl scale deployment --replicas=0
kubectl scale deployment --replicas=1