Cloudbuild не запускает развертывание нового модуля, ресурсы не найдены в пространстве имен GKE

#docker #kubernetes #google-cloud-platform #continuous-integration #build-triggers

#docker #kubernetes #google-cloud-platform #непрерывная интеграция #build-триггеры

Вопрос:

Я играл с триггерами GCP для развертывания нового модуля каждый раз, когда выполняется отправка в репозиторий Github. У меня все настроено, и образ docker помещается в реестр контейнеров GCP, и триггер успешно завершается без каких-либо ошибок. В качестве своих тегов я использую теги $ SHORT_SHA, которые генерируются конвейером сборки. Но, однако, развертывание нового модуля не работает. Я не уверен, в чем проблема, потому что я также изменяю кодовую базу с каждым новым нажатием, чтобы протестировать развертывание. Я следил за несколькими руководствами Google по триггерам, но я не могу понять, в чем именно проблема и почему недавно отправленное изображение не развертывается.

cloudbuild.yaml

   - name: maven:3-jdk-8
    id: Maven Compile
    entrypoint: mvn
    args: ["package", "-Dmaven.test.skip=true"]
  - name: 'gcr.io/cloud-builders/docker'
    id: Build
    args:
    - 'build'
    - '-t'
    - 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
    - '.'
   
  - name: 'gcr.io/cloud-builders/docker'
    id: Push
    args:
    - 'push'
    - 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
  - name: 'gcr.io/cloud-builders/gcloud'
    id: Generate manifest
    entrypoint: /bin/sh
    args:
    - '-c'
    - |
       sed "s/GOOGLE_CLOUD_PROJECT/$SHORT_SHA/g" kubernetes.yaml
  - name: "gcr.io/cloud-builders/gke-deploy"
    args:
    - run
    - --filename=kubernetes.yaml
    - --image=us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA
    - --location=us-central1-c
    - --cluster=cluster-1
  

kubernetes.yaml

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment_name>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: <container_label>
  template:
    metadata:
      labels:
        app: <container_label>
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      containers:
      - name: <container_name>
        image: us.gcr.io/<project_id>/<image_name>:GOOGLE_CLOUD_PROJECT
        ports:
        - containerPort: 8080
apiVersion: v1
kind: Service
metadata:
  name: <service-name>
spec:
  selector:
    app: <selector_name>
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

  

Комментарии:

1. Развертывает ли модуль и службу, когда в кластере ничего не существует?

2. Он развертывает службу, а не модуль

Ответ №1:

Я бы рекомендовал внести несколько изменений в работу вашей облачной сборки для развертывания приложения в кластере EKS.

cloudbuild.yaml

  1. На этапе сборки и нажатия измените аргумент на gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA использовать gcr.io/$PROJECT_ID/sample-image:latest .
  2. Создайте этап манифеста — вы можете пропустить / удалить этап.
  3. gke-deploy этап — удаление шага изображения.

kubernetes.yaml

  1. В спецификации — вы можете указать изображение, поскольку gcr.io/$PROJECT_ID/sample-image:latest оно всегда будет принимать latest при каждом развертывании.

Остальное все кажется хорошим.