【问题标题】:Deployment or Statefulset for single replica Gitlab service?单副本 Gitlab 服务的部署或 Statefulset?
【发布时间】:2018-06-28 07:29:31
【问题描述】:

我对 Kubernetes 的阅读似乎表明,Statefulsets 是“有状态”应用程序的最佳答案。 (在我的例子中是一个 Gitlab 实例。)创建容器的单个副本很好,但是当我推送更新时会发生什么?

如果我的应用程序要求单个持久卷,推送更新是否会连接回同一个磁盘? Google Kubernetes Engine 文档指出,每个 pod 都会收到自己的卷,并且“滚动”更新是默认设置。如果在滚动更新期间创建的新容器需要第一个副本仍在使用的卷中的数据,这将如何工作?

我可能错过了一些让我绕着答案转圈的东西。

【问题讨论】:

    标签: google-cloud-platform google-kubernetes-engine


    【解决方案1】:

    你是对的,statefulset controller 用于运行有状态的应用程序。

    升级节点池版本不会删除持久卷,它会在更新后将新的 Pod 连接回相同的持久卷。

    根据the GCP documentation,更新后,只有存储在主机hostPathemptyDir中的数据会被擦除。持久卷中的数据不会被擦除。

    将会发生的情况是 Kubernetes 停止调度、排空然后删除集群的所有节点和 Pod。逐个。持久卷将从 pod 中卸载,然后在更新完成后安装到新的 pod。持久卷中的数据将被保留。更新后,新更新的容器将挂载到同一个永久磁盘上。

    由于是单副本,所以会有一段时间容器会离线,在此期间pod不可用,持久化卷会被卸载。

    【讨论】:

    • 我还会向您推荐另一个thread that I answered。有状态集使用volumeClaimTemplates 数组。每次复制 pod 时,volumeClaimTemplates 都会自动创建一个新的 PersistentVolumeClaim。这意味着每个 Statefulset 副本 does have its own PersistentVolumeClaim 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多