Облачная платформа Google создает конвейер с Kubernetes и заменяет тот же контейнер - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь заменить существующий контейнер контейнером из моего регистра-контейнера из Google Cloud Platform.

Это мой файл cloudbuild.yaml.

шаги:

  # This steps clone the repository into GCP
  - name: gcr.io/cloud-builders/git
    args: ['clone', 'https:///user/:password@github.com/PatrickVibild/scrappercontroller']

  # This step runs the unit tests on the src
  - name: 'docker.io/library/python:3.7'
    id: Test
    entrypoint: /bin/sh
    args:
      - -c
      - 'pip install -r requirements.txt && python -m pytest src/tests/**'

  #This step creates a container and leave it on CloudBuilds repository.
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/abiding-robot-255320/scrappercontroller', '.']

  #Adds the container to Google container registry as an artefact
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/abiding-robot-255320/scrappercontroller']

  #Uses the container and replaces the existing one in Kubernetes
  - name: 'gcr.io/cloud-builders/kubectl'
    args: ['set', 'image', 'deployment/scrappercontroller', 'scrappercontroller-sha256=gcr.io/abiding-robot-255320/scrappercontroller:latest']
    env:
      - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
      - 'CLOUDSDK_CONTAINER_CLUSTER=scrapper-admin'

У меня нет проблем со сборкой моего проекта, и я получаю зеленый цвет на всех этапах, на последнем этапе я могу отсутствовать, но я не могу найти способ заменить свой контейнер в моем кластере более новой версией моего кода,

Я могу создать новую рабочую нагрузку в моем существующем кластере вручную, используя графический интерфейс и выбрав контейнер из реестра контейнеров, но оттуда выполнить шаг по замене этого контейнера рабочей нагрузки моей новой версией из облаков не удается.

1 Ответ

2 голосов
/ 24 октября 2019

Это распространенная ошибка. В соответствии с документацией :

Примечание. Развертывание развертывания запускается тогда и только тогда, когда изменяется шаблон Pod развертывания (то есть .spec.template), например, еслиярлыки или изображения контейнера шаблона обновляются. Другие обновления, такие как масштабирование развертывания, не запускают развертывание.

Ваша проблема, связанная с тегом образа, не меняется: :latest развернуто, и вы запрашиваете развертывание :latest. Без изменения имени изображения, без развертывания.

Для изменения этого я предлагаю вам использовать переменные подстановки , особенно COMMIT_SHA или SHORT_SHA. Вы не можете сделать это в документации:

доступно только для запускаемых сборок

Это означает, что эта переменная заполняется только тогда, когда сборка запускается автоматически, а не вручную.

Для запуска вручную вы должны указать свою собственную переменную, например,

gcloud builds submit --substitutions=COMMIT_SHA=<what you want>

и обновить скрипт сборки следующим образом:

  # This steps clone the repository into GCP
  - name: gcr.io/cloud-builders/git
    args: ['clone', 'https:///user/:password@github.com/PatrickVibild/scrappercontroller']

  # This step runs the unit tests on the src
  - name: 'docker.io/library/python:3.7'
    id: Test
    entrypoint: /bin/sh
    args:
      - -c
      - 'pip install -r requirements.txt && python -m pytest src/tests/**'

  #This step creates a container and leave it on CloudBuilds repository.
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/abiding-robot-255320/scrappercontroller:$COMMIT_SHA', '.']

  #Adds the container to Google container registry as an artefact
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/abiding-robot-255320/scrappercontroller:$COMMIT_SHA']

  #Uses the container and replaces the existing one in Kubernetes
  - name: 'gcr.io/cloud-builders/kubectl'
    args: ['set', 'image', 'deployment/scrappercontroller', 'scrappercontroller-sha256=gcr.io/abiding-robot-255320/scrappercontroller:COMMIT_SHA']
    env:
      - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
      - 'CLOUDSDK_CONTAINER_CLUSTER=scrapper-admin'

И во время развертывания, вы должны увидеть эту строку:

Step #2: Running: kubectl set image deployment.apps/test-deploy go111=gcr.io/<projectID>/postip:<what you want>
Step #2: deployment.apps/test-deploy image updated

Если вы этого не видите, это означает, что ваше развертывание не учитывает.

...