Kubernetes:在多容器Pod / Job中停止CloudSQL代理跨斗容器

我有一个在CloudSQL数据库上进行数据库迁移的Kubernetes JOB
从GKE访问CloudSQL数据库的一种方法是使用CloudSQL代理容器,然后通过localhost连接。 太好了 – 这是迄今为止的工作。 但是因为我在K8s JOB这样做,作业不会被标记为成功完成,因为代理继续运行。

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

即使输出显示“已完成”,最初的两个容器之一仍在运行 – 代理。

如何让代理退出完成容器1内的迁移?

一种可能的解决scheme是使用匹配服务的单独的cloudsql-proxy部署。 您只需要在连接到您的代理服务的作业内部安装迁移容器。

这带来一些缺点:

  • 更高的networking延迟,没有pod本地mysql通信
  • 可能的安全问题,如果你提供的SQL端口到您的整个kubernetes群集

如果要将cloudsql-proxy打开到整个群集,则必须在cloudsql-proxy的-instance参数中将tcp:3306replace为tcp:0.0.0.0:3306

看起来不像Kubernetes可以独自完成这项工作,您需要在迁移退出后手动终止代理。 类似的问题在这里问: Kubernetes乔布斯边车容器?