问题标签 [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 - statefulset 滚动更新影响高可用性
在 kubernetes 中首先部署一个带有新版本的新 pod,然后取下更新的 pod 并将我们预先创建的那个添加到 statefulset 中的任何方式?当在滚动更新期间重新创建一些 pod 时,它可能需要很多时间并且例如,应用程序可能不可用,因为它需要仲裁。
mysql - Kubernetes多数据库实例或HA单实例
我有一个运行多个应用程序(服务)的 Kubernetes 环境。现在我有点困惑如何设置 MySQL 数据库实例。
根据不同的来源,每个微服务都应该有自己的数据库。我应该在 HA 模式下创建一个运行多个数据库的单个 MySQL 状态集,还是应该为每个运行一个数据库的应用程序(服务)部署一个单独的 MySQL 实例。
我的第一个想法是第一个选择,因此 HA 应该在哪里有用?想听听一些不同的看法。
mongodb - 为什么删除 STS 应用程序不会自动删除 OpenEBS Jiva 卷 pvc?
我正在运行一个在 OpenEBS 0.6.0 Jiva 卷上使用的 Mongo DB STS 应用程序,我已经删除了这个应用程序。但它并没有删除相应的 PVC。如何清理我的系统?这是默认行为吗?
kubernetes - 向 statefulSet 添加额外的 volumeClaimTemplate
我们正在使用 Kubernetes 1.10.1
我有一个 statefulset,它附加了一个 volumeClaim。
我想添加一个额外的 volumeClaim,因为调整现有 PV 的大小仍处于测试阶段,并且在 Kubernetes 1.10 中也不可用。
我的更改基本上只是添加了一个额外的 PVC(当然还要安装它,这里没有提到):
结果我得到一个错误:
Error: UPGRADE FAILED: StatefulSet.apps "my-app" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden.
只要不触及现有的 PVC,至少不应该支持添加额外的 PVC 吗?我在这里错过了什么吗?我在文档中没有找到与此相关的任何内容。
kubernetes - statefulset 卡在 volumeClaimTemplates 挂起
我有一个有状态的集合来启动一个 postgres 数据库 - 使用以下 PV:
具有以下状态集:
但是,当我创建 statefulset 时,它会卡住:
看sts:
但是,看看 pv 和 pvc,它们看起来还不错:
我在主节点上使用 v1.10.0,在我希望安排到的节点上使用 v1.10.3。
帮助?!
cron - 在 cronjob 和 statefulset 中挂载 PVC
我有两个要访问 PersistentVolumeClaim 的服务。
一个是从卷中读取(并向最终用户提供内容)的 StatefulSet,另一个是 Kubernetes CronJob,它定期更新 PVC 获取的数据内容。
现在我遇到了一个问题,即我的 PVC 由 PV(不是 NFS、Ceph 等)支持,并且一个服务抓取了卷,导致另一个无法启动。
我怎样才能使这两个服务都可以访问该卷?
有没有办法像添加更多容器一样向我的 StatefulSet 添加 CronJob?
kubernetes - 是否可以让 Kubernetes statefulset 中的所有 pod 都失败 ReadinessProbes 而不是一个?
我们有一个服务(德鲁伊历史)的状态集,它在本地 SSD 上缓存大量数据。(我们使用污点和亲和性在 SSD 中为每个节点运行一个 pod。)当我们需要替换底层机器时,这意味着 pod 以空的本地磁盘启动,然后需要一段时间来重新填充缓存。理想情况下,我们只想一次有计划地更换节点(例如,GKE 节点池升级),并等到新节点上的 pod 完全填满其缓存后再推出下一个节点。
好的,这意味着我们需要将 PodDisruptionBudget 设置为 1,并设置 Readiness 探针以使新节点在缓存被填满之前不准备好。
问题是:该系统并没有真正为我们提供一个很好的方式来询问“pod X 是否下载了它所需要的所有东西,以使系统作为一个整体完全复制”。
它让我们问的是“整个系统是否完全复制?”。
因此,我们很想编写一个 Readiness 探针,上面写着“除非整个系统完全复制,否则未准备好”。但这意味着在节点池升级期间(或其他短暂的“未完全复制”状态),statefulset 中的每个 pod 都将变为 unready。
我的问题是:我并不真正了解 k8s 咨询 Ready 状态的每个部分的全部含义。如果 SS 中的每个 pod 都没有准备好而单个 pod 正在“加载”,那会不会很糟糕?
我的理解是,readiness 用于控制 Deployment 或 StatefulSet rollout 的速度(在这里很好),它也用于让服务确定路由到哪些 pod。在这种情况下,我们实际上并没有使用与 StatefulSet 关联的 Service 进行路由(客户端直接连接到各个 pod)。所以看起来这实际上可能很好。但是是吗?或者是否还有其他 Ready 状态的应用程序,这会使我们在全局复制未达到 100% 时将所有 pod 标记为未准备好?
deployment - 在 kubernetes StatefulSet 中按顺序创建 Pod
我在部署我的应用程序时遇到了困难,我的应用程序需要了解关于特定 statefulset 的集群内部状态并采取相应的行为。所以在我的 deployment.yml 文件中,我添加
哪个 kubernetes 将立即创建 3 个 pod(它不会等到容器内的应用程序启动),这在我的情况下是不需要的。所以我在应用程序中有一个逻辑,比如它的第一个副本,如果它的第二个(或第一个以外的任何副本)获取 statefulset 中生成的 pod 的最后一个 ip,然后连接到它,则执行 behavior1。
下面是我的代码
因此,由于 kubernetes 不会等到我的代码在 pod 中运行并且它只是启动 pod,所以我的逻辑失败并且它无法按预期工作。
目前我看到的唯一方法是将副本 = 1 并手动扩展它,我认为这不好。随着同样问题的出现,部署时间的扩展也无济于事。任何想法通过 kubernetes 完成这项工作?
kubernetes - StatefulSet、ReplicaSet 或 DaemonSet。单个 Pod 最好的是什么?
我想在节点上部署一个 Pod 来托管我的服务(例如 GitLab)。问题是:在节点故障(如重新启动)后不会重新创建 Pod。解决方案:使用 StatefulSet、ReplicaSet 或 DaemonSet 来确保在 Node 故障后创建 Pod。但是这种情况下最好的方法是什么?
这个 Pod 是有状态的(我使用卷hostPath
来保存数据),并且部署使用nodeSelector
它始终保持在同一个节点上。
这是示例的简单 YAML 文件:https ://pastebin.com/WNDYTqSG
它创建了 3 个 Pod(每个一个Set
),并带有一个卷以有状态地保存数据。在实践中,所有这些解决方案都可以满足我的需求,但我不知道这种情况下是否有最佳实践。
您能帮我在这些解决方案之间进行选择以部署单个有状态 Pod 吗?
kubernetes - Kubernetes 中 ignite 状态集的备份
我试图想出一个策略来备份我的 apache ignite 缓存中的数据,该缓存作为有状态集托管在谷歌云 Kubernetes 中。我的 ignite 部署使用 ignite 本机持久性并运行一个 3 节点的 ignite 集群,该集群由 Kubernetes 中的持久性卷备份。我正在使用 binaryConfiguration 将二进制对象存储在缓存中。
我正在寻找一种可靠的方法来备份我的 ignite 数据并能够恢复它。
到目前为止,我已尝试仅备份持久性文件,然后将它们恢复。它还没有可靠地工作。我面临的问题是,还原后,不是二进制对象的缓存数据会正确还原,例如字符串或数字。我可以很好地访问数字或字符串数据。但二进制对象不可访问。似乎二进制对象已恢复,但我无法获取它们。
奇怪的是,在恢复之后,一旦我将一个新的二进制对象添加到缓存中,所有恢复的数据似乎都可以正常访问。
谁能建议一种可靠的方法来备份和恢复 ignite 本机持久性数据?