Kubernetes: остановите контейнер CloudsQL-proxy sidecar в мультиконтейнере Pod/Job

У меня есть Kubernetes JOB, который выполняет миграцию базы данных в базе данных CloudSQL.
Один из способов доступа к базе данных CloudSQL от GKE - использовать контейнер CloudSQL-proxy, а затем подключиться через localhost. Отлично - это работает до сих пор. Но поскольку я делаю это внутри K8s JOB, задание не помечено как успешно законченное, так как прокси-сервер продолжает работать.

$ kubectrl get po
NAME                      READY     STATUS      RESTARTS   AGE
db-migrations-c1a547      1/2       Completed   0          1m

Несмотря на то, что на выходе указано "завершено", один из двух первоначально запущенных контейнеров - прокси.

Как я могу сделать прокси-выход при завершении миграции внутри контейнера 1?

Ответ 1

Одним из возможных решений могло бы стать отдельное развертывание cloudql-прокси с соответствующей услугой. Тогда вам понадобится только ваш контейнер миграции внутри задания, которое подключается к вашей службе прокси.

Это связано с некоторыми недостатками:

  • более высокая сетевая латентность, без связи с локальной связью mysql
  • Возможная проблема с безопасностью, если вы предоставляете sql-порт всему кластеру кубернетов

Если вы хотите открыть cloudql-proxy для всего кластера, вы должны заменить tcp:3306 на tcp:0.0.0.0:3306 в параметре -instance на cloudql-прокси.

Ответ 2

Не похоже, что Kubernetes может сделать это в одиночку, вам нужно будет вручную убить прокси-сервер после выхода миграции. Аналогичный вопрос задан здесь: Контейнеры Sidecar в Kubernetes Jobs?

Ответ 3

Возможным решением было бы установить concurrencyPolicy: Replace в spec задания... это будет агностически заменять текущий модуль новым экземпляром всякий раз, когда ему нужно будет запустить снова. Но вы должны убедиться, что последующие циклы cron достаточно разделены.

Ответ 4

Google cloud sql недавно запустил подключение к частному IP-адресу для cloudsql. Если экземпляр облачного SQL и кластер kubernetes находятся в одном регионе, вы можете подключиться к cloudql без использования облачного SQL-прокси.