Google Cloud Build не может найти развертывание kubernetes при обновлении изображения

Я пытаюсь настроить конвейер CI, используя Cloud Build. Мой файл сборки создает и передает изображения Docker, а затем использует kubectl конструктор для обновления образов в развертывании kubernetes. Однако я получаю следующую ошибку:

Error from server (NotFound): deployments.extensions "my-app" not found Running: kubectl set image deployment my-app my-app-api=gcr.io/test-project-195004/my-app-api:ef53550e2ahy784a14iouyh79712c9f

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

РЕДАКТИРОВАТЬ: В соответствии с просьбой, вот мой сценарий сборки:

steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA', '-f', 'deploy/api/Dockerfile', '--no-cache', '.'] - name: 'gcr.io/cloud-builders/kubectl' args: - set - image - deployment - my-app - my-app=gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA env: - 'CLOUDSDK_COMPUTE_ZONE=${_ZONE}' - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER}' images: ['gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA'] timeout: 5000s

И размещение.yaml -

metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: 2018-11-04T17:34:44Z generation: 1 labels: app: my-app name: my-app namespace: my-app resourceVersion: "4370" selfLink: /apis/extensions/v1beta1/namespaces/my-app/deployments/my-app uid: 65kj54g3-e057-11e8-81bc-42010aa20094 spec: replicas: 3 selector: matchLabels: app: my-app strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: creationTimestamp: null labels: app: my-app spec: containers: - image: gcr.io/test-project/my-app-api:f16erogierjf1abd436e733398a08e1b76ce6b712 imagePullPolicy: IfNotPresent name: my-appi-api resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 3 conditions: - lastTransitionTime: 2018-11-04T17:37:59Z lastUpdateTime: 2018-11-04T17:37:59Z message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available observedGeneration: 1 readyReplicas: 3 replicas: 3 updatedReplicas: 3

1 ответ

Решение

Вам необходимо определить пространство имен для вашего развертывания при использовании kubectlесли вы не используете пространство имен по умолчанию.

Потому что вы используете пространство имен для своего развертывания namespace: my-app вам нужно будет добавить его в команду, используя --namspace флаг.

Вот как это сделать внутри cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA', '-f', 'deploy/api/Dockerfile', '--no-cache', '.']
- name: 'gcr.io/cloud-builders/kubectl'
  args:
  - set
  - image
  - deployment
  - my-app
  - my-app=gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA
  - --namespace
  - my-app
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=${_ZONE}'
  - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER}'
images: ['gcr.io/$PROJECT_ID/my-app-api:$COMMIT_SHA']
timeout: 5000s
Другие вопросы по тегам