我有一个Kubernetes JOB
在CloudSQL数据库上进行数据库迁移.
从GKE访问CloudSQL数据库的一种方法是使用CloudSQL代理容器然后通过连接localhost
.太棒了 - 到目前为止工作正常.但是因为我在K8s中这样做,JOB
所以作业没有被标记为成功完成,因为代理继续运行.
$ kubectrl get po NAME READY STATUS RESTARTS AGE db-migrations-c1a547 1/2 Completed 0 1m
即使输出显示"已完成",最初的两个容器之一仍在运行 - 代理.
如何在完成容器1内的迁移时使代理退出?
一种可能的解决方案是使用匹配服务的单独的cloudql-proxy部署.然后,您只需要在连接到代理服务的作业中使用迁移容器.
这有一些缺点:
更高的网络延迟,没有pod本地mysql通信
如果您将sql端口提供给整个kubernetes集群,则可能存在安全问题
如果你想打开CLOUDSQL代理整个集群必须更换tcp:3306
同tcp:0.0.0.0:3306
在-instance
上CLOUDSQL代理参数.