Google Cloud Build не может найти развертывание kubernetes при обновлении изображения - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь настроить конвейер 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 Ответ

0 голосов
/ 07 ноября 2018

Вам необходимо определить пространство имен для вашего развертывания при использовании 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
...