kubernetes - 在 Kubernetes 中部署有状态应用程序

标签 kubernetes

我开始熟悉 Kubernetes,还没有找到在 Kubernetes 中部署有状态服务的简单解决方案。

  • 每个 pod 都必须使用接触点(其他 pod IP 列表)进行引导,这无法进行负载平衡(我担心运气不好时会裂脑:在最坏的情况下,负载平衡器可能会在每个pod 到自己,使一个节点的几个自封闭集群)
  • 每个 pod 都必须有持久存储,在最坏的情况下,必须手动访问(例如 consul 的 peers.json)
  • 每个 pod 都应该是可重新配置的;如果我忘记对我的 consul 集群做一些事情,从头开始重建它只会导致停机。如果 kubernetes 阻止了这种情况,请随时告诉我,我对部署机制还不够熟悉。
  • 使用新配置的实例动态增加服务集群,然后耗尽旧的实例可能是非常不受欢迎的(我不是领事专家,但从我的角度来看,这会降低领事集群中的脑裂保护)。

  • AFAIK最适用的东西是Pet Set,但是,它仍然处于alpha阶段,只能完全删除;另外,我觉得我不明白应该如何管理持久卷才能在宠物套装游戏中幸存下来。我想出的另一个选择是将服务部署拆分为引导节点部署、引导节点服务和所有其他节点部署,这允许我使用引导节点服务作为联系点(虽然这并不完全安全) )。

    这种情况下流行的方法是什么,它们有什么优点和缺点?

    最佳答案

    如果您正在 Kubernetes 集群的有状态集群中查看一定数量的 Pod,PetSets(我相信它现在被称为 StatefulSets)就是答案……或者您可以为每个 Pod 定义一个服务来实现相同的目的。

    为了让 Pod 知道其他 Pod 的 IP,您可以使用 headless 服务,它为您提供与标签关联的 IP 列表。

    对于存储,如果你使用 emptyDir,你有本地存储,但是当 Pod 被移除/重新调度时你会丢失它。

    我在 Kubernetes 中使用 Zookeeper,设置起来有点麻烦,但是 Zookeeper 提供了“重新配置”API,允许在节点更改时重新配置集群,因此在新节点启动时重新定义集群相当容易当 Pod 被重新调度时。我不确定 Consul 是否具有相同类型的功能,但可能确实如此。

    关于kubernetes - 在 Kubernetes 中部署有状态应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852026/

    相关文章:

    kubernetes - 新镜像准备好后如何自动重启 Pod

    deployment - Kubernetes 部署挂起

    apache-kafka - 在Kubernetes上运行的Apache Kafka消费者组和微服务是否兼容?

    kubernetes - 具有CrashLoopBackOff的metrics-server

    docker - hostpath 中的只读文件系统。因此无法挂载卷

    kubernetes - 如何扩展已经创建的作业?

    kubernetes - 如何从 pod 容器内访问 Kubernetes api?

    kubernetes - 基本 Helm 依赖关系澄清

    docker - 有没有办法更新在Kubernetes中运行的Jenkins?

    spring-boot - 设置 GOOGLE_APPLICATION_CREDENTIALS 后,Google 云存储为部署在 GKE 上的 Spring 应用程序返回 401