【问题标题】:Kubernetes custom deploymentKubernetes 自定义部署
【发布时间】:2022-01-24 02:38:30
【问题描述】:
由于 Liquibase,我们的水平扩展目前受到影响。
我们希望我们的部署始终部署一个运行 Liquibase (-Dspring.liquibase.enabled=true) 的 pod,然后所有后续 pod 不运行它 (-Dspring.liquibase.enabled=false)。
Kubernetes 是否提供了开箱即用的功能?
【问题讨论】:
标签:
spring-boot
kubernetes
liquibase
【解决方案1】:
我不熟悉 Liquibase,也不清楚非第一个 Pod 如何利用 Liquibase,但您可以使用锁来控制访问。获取锁的 Pod 将属性设置为true,如果无法获取锁,则属性为false。
一个挑战是确保在第一个 Pod 终止时释放锁。并且,要了解对其他 Pod 的影响。是否提升了现有 Pod?
尽管 Kubernetes 将 etcd 用于其自己的分布式锁定目的,但仍鼓励用户在需要锁定时运行单独的 etcd 实例。既然你必须选择,你也可以选择你喜欢的,例如Redis,动物园管理员。
您可以使用 init Container 或 sidecar 作为锁定机制,并使用共享卷来记录其状态。
感觉好像 Liquibase 应该是一个独特的部署,作为所有 Pod 都可以访问的服务公开。
您是否联系过 Liquibase 以了解它对 Kubernetes 部署的建议?