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:3306
replace为tcp:0.0.0.0:3306
。
看起来不像Kubernetes可以独自完成这项工作,您需要在迁移退出后手动终止代理。 类似的问题在这里问: Kubernetes乔布斯边车容器?