kubectl设置映像部署不会设置新的容器映像(gcp)

时间:2019-10-26 15:30:27

标签: kubernetes google-cloud-platform gitlab-ci

kubectl set image deployment/$DEPLOYMENT_EXTENSION $INSTANCE_NAME=gcr.io/$PROJECT_ID/$DOCKER_REPOSITORY:latest

我使用此命令将新创建的图像加载到我现有的集群中(我的应用程序的更新版本)。但是当我这样做之后,再转到该站点,我看不到任何更改。

spec:
      terminationGracePeriodSeconds: 30
      containers:
      - name: booknotes
        image: gcr.io/my-image:latest
        imagePullPolicy: Always

我还将这两行添加到了deployment.yaml文件中,并将其应用于我的cluser:

imagePullPolicy: Always
terminationGracePeriodSeconds: 30

但是它仍然不起作用。可能是因为我使用了:latest标签吗?还是不相关?如果您有一些成见,请告诉我。另外,如果您需要其他信息,我会附上它!

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

2 个答案:

答案 0 :(得分:2)

这个问题,症状和原因与[this],(Google cloud platform creating a pipeline with Kubernetes and replacing the same container)非常接近

在您的Gitlab-CI管道中应用相同的解决方案(使用全局变量来更改图像标签,并在每次部署新标签时强制Kubernetes进行部署和部署)。

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

答案 1 :(得分:0)

您是正确的,最新标签不会触发广告连播的重新部署。相反,您可以设置映像,然后扩展部署。

kubectl set image deployment/alpine alpine=alpine:latest
kubectl scale deployment --replicas=0
kubectl scale deployment --replicas=1

另一种选择是设置图像,然后修补注释或更改某些Yaml字段。