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