Создайте службу или контейнер из другого контейнера в Google Cloud Run или Cloud Run на GKE

Могу ли я создать службу или контейнер из другого контейнера в Google Cloud Run или Cloud Run на GKE?

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

Добавляем подробности:

Один из моих микросервисов должен создать новые изолированные контейнеры, которые будут запускать некоторый пользовательский код. Я хотел бы иметь полный контроль над жизненным циклом этих контейнеров, запускать код, а затем уничтожать по мере необходимости.

Я также посмотрел на Cloud Run API, но не уверен, как запустить что-то вроде «kubectl create ...» через API? Это правильный подход?


person haknick    schedule 16.09.2019    source источник
comment
Не могли бы вы отредактировать вопрос, чтобы уточнить, чего вы пытаетесь достичь?   -  person Doug Stevenson    schedule 16.09.2019
comment
Конечно, почему бы и нет, просто нужен модуль / контейнер, содержащий необходимые инструменты для взаимодействия / управления кластером (например, kubectl).   -  person masseyb    schedule 16.09.2019
comment
Таким образом, вам нужна среда по запросу (без сервера) для управления другим контейнером? Вам нужен терминальный доступ или только для запуска на нем запланированного сценария?   -  person guillaume blaquiere    schedule 16.09.2019
comment
@DougStevenson добавил к нему еще несколько деталей   -  person haknick    schedule 17.09.2019
comment
@guillaumeblaquiere Не уверен, нужен ли мне сейчас терминальный доступ, но я бы так не подумал   -  person haknick    schedule 17.09.2019
comment
Cloud Run (полностью управляемый) не поддерживает DinD. Не уверен в Cloud Run на GKE, но мне довольно непонятно, зачем вам это нужно делать в кластере GKE, который вы контролируете.   -  person Grayside    schedule 17.09.2019
comment
@Grayside Я спрашиваю об управлении другими контейнерами / службами в кластере, а не DinD   -  person haknick    schedule 19.09.2019


Ответы (1)


Да, у вас должна быть возможность развертывать службы Cloud Run из служб Cloud Run.

  • on Cloud Run (hosted): services by default run with Editor permissions, so this should be possible without any extra configuration
    • note that if you deploy apps with --allow-unauthenticated which requires setting IAM permissions, the Editor role will not be enough, as you need Owner role on the GCP project for that.
  • on Cloud Run на GKE: службы по умолчанию запускаются с ограниченными областями действия (поскольку они по умолчанию наследуют разрешения / области действия узла GKE). Вам следует добавить учетную запись службы в Kubernetes Pod и использовать ее для аутентификации.

Оттуда у вас есть несколько вариантов:

  1. Используйте REST API напрямую: поскольку run.googleapis.com ведет себя как сервер Kubernetes API, вы можете напрямую применять JSON-объекты Knative Services. (Вы можете использовать gcloud ... --log-http, чтобы узнать, как выполняется развертывание с использованием запросов REST API).

  2. Используйте gcloud: вы можете отправить образ контейнера с помощью gcloud и вызывать его из своего процесса.

  3. Используйте клиентские библиотеки Google Cloud: вы можете использовать клиентские библиотеки, доступные для Cloud Run (например, это библиотека Go) для создания объектов службы в памяти и отправки их в API с помощью клиентской библиотеки более высокого уровня (рекомендуемый подход)

person Ahmet Alp Balkan    schedule 17.09.2019
comment
Это здорово, спасибо. 1- Где я могу найти пример или дополнительную информацию о первом варианте? 2- Кроме того, похоже, что первый вариант будет более стандартным вариантом Knative, который будет работать одинаково при каждой установке Knative? А третий вариант кажется специфичным для Cloud Run? 3- Наконец, есть ли библиотека Node, похожая на известную вам Go? - person haknick; 19.09.2019
comment
1. Вы просто сами пишете HTTP-запросы в http-клиенте, просто посмотрите на вывод --log-http gcloud, чтобы узнать, что и как он делает такие запросы. 2. Да, Knative API почти такой же, как Cloud Run, но некоторые вещи, такие как аутентификация, будут отличаться. 3. Да, я уверен, что есть библиотека, эквивалентная узлу, для вызова API Google, например googleapis / google-api-nodejs-client. - person Ahmet Alp Balkan; 19.09.2019