问题标签 [kubernetes-statefulset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - 为什么选择有状态集?无状态 Pod 不能使用持久卷吗?
我正在尝试了解Stateful Sets。它们的使用与使用带有持久卷的“无状态”Pod 有何不同?也就是说,假设一个“正常”的 Pod 可能声称拥有持久存储,那么我缺少什么明显的东西需要这个新的构造(具有有序的启动/停止等)?
kubernetes - Kubernetes StatefulSet - 获取 spec.replicas 元数据并在配置中的其他地方引用
我正在配置一个 StatefulSet,我希望其中的副本数量(如下所示的spec.replicas)可以以某种方式作为参数传递到应用程序实例中。我的应用程序需要spec.replicas来确定副本的数量,以便它知道要从 MySQL 表中加载哪些行。我不想在spec.replicas和 application 参数中硬编码副本的数量,因为在向上或向下缩放副本数量时这将不起作用,因为在缩放时需要调整 application 参数。
这是我的 StatefulSet 配置:
我已经阅读了 Kubernetes 文档,并且spec.replicas字段的范围是 pod 或容器级别,而不是 StatefulSet,至少就我所见而言。
提前致谢。
amazon-web-services - Kubernetes Stateful set、AZ 和 Volume 声明:AZ 失败时会发生什么
考虑跨 3 个可用区的 Statefulset(Cassandra 使用官方 K8S 示例):
- cassandra-0 -> 区域 a
- cassandra-1 -> 区域 b
- cassandra-2 -> 区域 c
每个 Cassandra pod 都使用一个 EBS 卷。所以自动地有一个亲和力。例如,cassandra-0 无法移动到“zone-b”,因为它的卷位于“zone-a”中。都好。
如果某些 Kubernetes 节点/worker 发生故障,它们将被替换。pod 将在新节点上重新启动并重新附加其 EBS 卷。看起来什么都没发生。
现在,如果整个 AZ “zone-a”出现故障并且在一段时间内不可用(这意味着 cassandra-0 由于与 EBS 在同一区域中的相关性而无法再启动)。你剩下:
- cassandra-1 -> 区域 b
- cassandra-2 -> 区域 c
只要“zone-a”不可用,Kubernetes 就永远无法启动 cassandra-0。这一切都很好,因为 cassandra-1 和 cassandra-2 可以处理请求。
现在,如果最重要的是,另一个 K8S 节点出现故障,或者您已经设置了基础架构的自动扩展,那么您最终可能需要移动到另一个 K8S 节点的 cassandra-1 或 cassandra-2。这不应该是一个问题。
但是根据我的测试,K8S 不会这样做,因为 pod cassandra-0 处于脱机状态。它永远不会自我修复 cassandra-1 或 cassandra-2(或任何 cassandra-X),因为它首先要返回 cassandra-0。并且 cassandra-0 无法启动,因为它的卷位于已关闭且未恢复的区域中。
因此,如果您使用Statefulset + VolumeClaim + 跨区域 并且您遇到整个 AZ 故障 并且您在另一个 AZ 中遇到 EC2 故障或者您的基础架构具有自动扩展
=> 那么你将失去所有的 Cassandra 豆荚。直到 zone-a 重新上线
这似乎是一个危险的情况。有没有办法让有状态的集合不关心订单并且仍然自我修复或在 cassandra-3、4、5、X 上启动更多 pod?
kubernetes - 如何在状态集中通知 POD 关于 Kubernetes 中的其他 PODS
我正在阅读有关使用 statefulsets 部署 Cassandra ring 和 zookeeper 的教程。我不明白的是,如果我决定将另一个副本添加到 statefulset 中,我如何通知其他 PODS 还有另一个。它的最佳实践是什么?我希望一个 POD 能够在我的自定义应用程序中将请求重定向到另一个 POD,以防请求不属于它(即它没有数据)
solr - 在 Kubernetes 部署期间写入 Solr
我正在尝试使用 StatefulSets 将 Solr Cloud 部署到 Kubernetes 中。我的问题是,如果我在 statefulset 的滚动更新期间写入 Solr,当我到达 solr 集群领导者的部署时会出错。只需阅读,我就可以毫无问题地部署 Solr Cloud - 在 java 中使用 SolrCloudClient。我已经尝试在领导者的 preStop Hook 上重新平衡领导者,但我仍然在 SolrCloudClient 写入时遇到错误......有没有人有任何关于如何滚动更新 Solr Cloud 的提示,即使在写入期间也不会出现任何错误?谢谢
apache-spark - Spark Standalone on Kubernetes - application got finished after consecutive master then driver failure
Trying to achieve High Availability of SparkMaster using ZooKeeper with SparkDriver resiliency using metaData checkpoint into GlusterFS.
Some Informations :
- Using Spark 2.2.0 (prebuilt binary)
- Submitting a streaming app with --deploy-mode cluster and --supervise from a separate spark client pod
- Spark Components on Kubernetes are of type Statefulset for Dynamic Volume Provisioning (Previously using Replication Controller/ Deployment)
- Created 3 GlusterFS shared pvc - spark-master-pvc,spark-worker-pvc,spark-ckp-pvc
Successfully achieved the Scenarios like - Only Master Failure, Only Driver Failure, Consecutive Master and Driver Failure, Driver Failure then Master. But the Scenario like Submitted a Job -> Master Failure (Working fine) -> Driver Failure i.e. Worker Pod failure is not working.
NEW ALIVE MASTER's log -
DRIVER is remained in Halted State. Driver Error Log -
Am I choosing the right resource controller i.e. Statefulsets of kubernetes for spark? M new to this environment, any help will be highly appreciable.
kubernetes - storageClass kubernetes.io/no-provisioner 是否适用于多节点集群?
集群:1个master 2个worker
我正在使用具有 3 个副本的 PV (kubernetes.io/no-provisioner storageClass) 使用本地卷部署 StatefulSet。为两个工作节点创建了 2 个 PV。
预期:Pod 将被安排在两个工作人员上并共享相同的卷。
结果:在单个工作节点上创建了 3 个有状态的 Pod。yaml:-
mongodb - Istio 0.8 中的 Mongo 状态集
我在运行 istio 0.8 时尝试从 cvallance 部署有状态的 mongodb 副本集时遇到问题,如果我将 istio 排除在外,一切正常,但是当启用 istio 时,mongo-sidecars 找不到彼此并且副本集未配置. 下面是我的 mongo 部署和服务。
redis - Kubernetes上部署redis集群需要sentinal是什么?
哨兵:文档说
Redis Sentinel 为 Redis 提供高可用性。实际上,这意味着使用 Sentinel,您可以创建一个 Redis 部署,该部署无需人工干预即可抵抗某些类型的故障。
我认为我们可以Sentinal
在不部署的情况下实现 redis 集群(在 K8s 中)的功能Sentinal
?我从文档中获取哨兵能力,并从 K8s 中抛出一些反点。
Monitoring
- Sentinel 不断检查您的主从实例是否按预期工作。- 我正在考虑
working as expected
意味着吊舱向上或向下。当您部署为Deployment
(副本集)甚至部署时,这在 K8s 中是非常原生的StatefulSets
- 我正在考虑
Notification
- Sentinel 可以通过 API 通知系统管理员、另一台计算机程序,其中一个受监控的 Redis 实例有问题。- 我们不能这样做
Operators
吗?(从redis集群状态等角度来看)
- 我们不能这样做
Automatic failover
- 如果一个主服务器没有按预期工作,Sentinel 可以启动一个故障转移过程,其中一个从服务器被提升为主服务器,其他额外的从服务器被重新配置为使用新的主服务器,并且使用 Redis 服务器的应用程序通知要使用的新地址连接时。- 我正在考虑
not working as expected
意味着 redis pod 已关闭。Operators
在这种情况下,如果我们在/StatefulSet
+的帮助下部署 redisHeadless Service
。即使 Pod 重启,我们也有稳定的主/从网络 ID。
- 我正在考虑
Configuration provider
- Sentinel 充当客户端服务发现的授权来源:客户端连接到 Sentinel 以请求负责给定服务的当前 Redis 主服务器的地址。如果发生故障转移,Sentinels 将报告新地址。- 正如我在上面所说的,我们有稳定的网络 ID/名称/IP。客户总是可以指向一个主人。
我是redis的新手。如果有任何问题,请指导我。谢谢。
更新1
我的目标是避免哨兵并拥有HA。(主要是master
故障转移)