Как проверить, готова ли к работе последняя версия Cloud Run - PullRequest
2 голосов
/ 07 мая 2020

Я использую Cloud Run некоторое время, и весь пользовательский опыт просто потрясающий!

В настоящее время я использую Cloud Build для развертывания образа контейнера, pu sh образа в GCR, затем создайте новую версию Cloud Run. Теперь я хочу вызвать сценарий для очистки кешей из CDN после успешного развертывания последней версии в Cloud Run, однако команда $ gcloud run deploy не может сказать вам, запущен ли трафик c, указывающий на последнюю версию.

Есть ли какая-нибудь команда или событие, на которые я могу подписаться, чтобы убедиться, что трафик c не указывает на старую ревизию, чтобы я мог безопасно очистить все кеши?

Ответы [ 3 ]

3 голосов
/ 07 мая 2020

@ Ответ Дастина правильный, однако «статусные» сообщения являются косвенным результатом конфигурации Route, поскольку эти вещи обновляются отдельно (и между ними может наблюдаться задержка в несколько секунд). В статусном сообщении все равно будет указано, что ревизия была выведена из ротации, если вы не против. 1004 *

Есть ли какая-либо команда или событие, на которые я могу подписаться на , убедитесь, что трафик c не указывает на старую ревизию ?

Вам нужно посмотреть на Route объекты в API. Это Knative API (он доступен в Cloud Run), но в нем нет команды gcloud: https://cloud.google.com/run/docs/reference/rest/v1/namespaces.routes

Например, предположим, что вы сделали 50% -50% трафик c разделен на вашу службу Cloud Run. Когда вы это сделаете, вы обнаружите, что ваш объект Service (который вы можете увидеть в Cloud Console → Cloud Run → YAML tab) имеет следующее поле spec.traffic:

spec:
  traffic:
  - revisionName: hello-00002-mob
    percent: 50
  - revisionName: hello-00001-vat
    percent: 50

Это "желательно конфигурация ", но на самом деле она может не отражать статус окончательно. Изменение этого поля приведет к изменению go и обновлению объекта Route - который определяет, как будет разделен c трафик.

Чтобы увидеть объект Route под крышками (к сожалению, мне придется использовать curl здесь, потому что для этого нет команды gcloud:)

TOKEN="$(gcloud auth print-access-token)"

curl -vH "Authorization: Bearer $TOKEN" \
    https://us-central1-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/GCP_PROJECT/routes/SERVICE_NAME

Эта команда покажет вам результат:

  "spec": {
    "traffic": [
      {
        "revisionName": "hello-00002-mob",
        "percent": 50
      },
      {
        "revisionName": "hello-00001-vat",
        "percent": 50
      }
    ]
  },

(который, как вы могли заметить, идентичен сервису spec.traffic - потому что он скопирован оттуда), который может точно сказать вам, какие версии в настоящее время обслуживают трафик c для этой конкретной Услуги.

2 голосов
/ 07 мая 2020

Вы можете использовать gcloud run revisions list, чтобы получить список всех ревизий:

$ gcloud run revisions list --service helloworld

   REVISION          ACTIVE  SERVICE     DEPLOYED                 DEPLOYED BY
✔  helloworld-00009  yes     helloworld  2019-08-17 02:09:01 UTC  email@email.com
✔  helloworld-00008          helloworld  2019-08-17 01:59:38 UTC  email@email.com
✔  helloworld-00007          helloworld  2019-08-13 22:58:18 UTC  email@email.com
✔  helloworld-00006          helloworld  2019-08-13 22:51:18 UTC  email@email.com
✔  helloworld-00005          helloworld  2019-08-13 22:46:14 UTC  email@email.com
✔  helloworld-00004          helloworld  2019-08-13 22:41:44 UTC  email@email.com
✔  helloworld-00003          helloworld  2019-08-13 22:39:16 UTC  email@email.com
✔  helloworld-00002          helloworld  2019-08-13 22:36:06 UTC  email@email.com
✔  helloworld-00001          helloworld  2019-08-13 22:30:03 UTC  email@email.com

Вы также можете использовать gcloud run revisions describe, чтобы получить подробную информацию о конкретной c ревизии, которая будет содержать status поле. Например, активная ревизия:

$ gcloud run revisions describe helloworld-00009
...
status:
  conditions:
  - lastTransitionTime: '2019-08-17T02:09:07.871Z'
    status: 'True'
    type: Ready
  - lastTransitionTime: '2019-08-17T02:09:14.027Z'
    status: 'True'
    type: Active
  - lastTransitionTime: '2019-08-17T02:09:07.871Z'
    status: 'True'
    type: ContainerHealthy
  - lastTransitionTime: '2019-08-17T02:09:05.483Z'
    status: 'True'
    type: ResourcesAvailable

И неактивная ревизия:

$ gcloud run revisions describe helloworld-00008
...
status:
  conditions:
  - lastTransitionTime: '2019-08-17T01:59:45.713Z'
    status: 'True'
    type: Ready
  - lastTransitionTime: '2019-08-17T02:39:46.975Z'
    message: Revision retired.
    reason: Retired
    status: 'False'
    type: Active
  - lastTransitionTime: '2019-08-17T01:59:45.713Z'
    status: 'True'
    type: ContainerHealthy
  - lastTransitionTime: '2019-08-17T01:59:43.142Z'
    status: 'True'
    type: ResourcesAvailable

Вы, в частности, захотите проверить условие type: Active.

Это все это также доступно через Cloud Run REST API: https://cloud.google.com/run/docs/reference/rest/v1/namespaces.revisions

1 голос
/ 07 мая 2020

По умолчанию трафик c направляется на последнюю версию. Вы можете увидеть это в журналах.

Deploying container to Cloud Run service [SERVICE_NAME] in project [YOUR_PROJECT] region [YOUR_REGION]
✓ Deploying... Done.                                                           
  ✓ Creating Revision...
  ✓ Routing traffic...
Done.
Service [SERVICE_NAME] revision [SERVICE_NAME-00012-yic] has been deployed and is serving 100 percent of traffic at https://SERVICE_NAME-vqg64v3fcq-uc.a.run.app

Если вы хотите быть уверены, вы можете явно вызвать команду update traffic c

gcloud run services update-traffic --platform=managed --region=YOUR_REGION --to-latest YOUR_SERVICE
...