问题标签 [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/容器
我一直在阅读有关kubernetes 中的 liveness 和 readiness 探针的信息,我想用它们来检查集群是否已经活跃起来。
问题是如何为整个 statefulset 而不是单个 pod/container 配置就绪探测。
可以使用简单的 HTTP 检查来确定准备情况,但我遇到的问题是 readinessCheck 似乎适用于容器/pod 而不是集合本身。
对于我正在使用的软件,HTTP 端点在集群形成之前不会出现;这意味着每个单独的 pod 都将无法通过 readinessCheck,直到所有三个都启动并找到另一个。
我现在在 Kubernetes 中看到的行为是创建了 3 个副本中的第一个,并且 Kubernetes 甚至不会尝试创建副本 2 和 3,直到第一个通过 readinessCheck,这永远不会发生,因为所有三个都必须启动让它有机会通过它。
kubernetes - 如何更新 StatefulSet 中的环境变量
我想更新 Kubernetes StatefulSet 中的环境变量。我更新了 YAML 文件并执行了$kubectl apply -f my-statefulset.yml
,但没有任何改变。然后我尝试$kubectl scale sts my-statefulset --replicas=0; kubectl scale sts my-statefulset --replicas=4
了,它只重新创建了 StatefulSet 中的最后一个 pod。
删除我的整个 StatefulSet 并重新创建它只是为了更改环境变量看起来不是一个好主意。$kubectl patch
可以在这里工作,但我无法形成更新 json。我需要一些关于如何更新 StatefulSet 中的环境变量的帮助。
mysql - 具有root密码的Kubernetes mysql statefulset
我按照这里的示例https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/在 kubernetes 中创建了一个 3 副本 mysql statefulset,一切正常。
但是,在我添加 root 密码并修改部署 yaml 以包含密码后,mysql-1 总是失败。
这是我添加密码的方法:
- 我创造了一个秘密
mysql-root-pass
- 我删除并用read from the secret
MYSQL_ALLOW_EMPTY_PASSWORD
替换它MYSQL_ROOT_PASSWORD
- 添加
-p$MYSQL_ROOT_PASSWORD
到 yaml 文件中调用 mysql 的所有位置。 - 尽管如此,mysql-0 已创建并运行,但 mysql-1 崩溃了:
mysql-1 0/2 Init:CrashLoopBackOff
任何人都有一个关于如何添加密码的工作示例?
编辑:添加 yaml 文件
docker - 将持久卷声明添加到容器中的现有文件
在我的 docker 映像中,我有一个/opt/myapp/etc
包含一些文件和目录的目录。我想为我的应用创建 statefulset。在那个 statefulset 中,我正在创建持久卷声明并附加到/opt/myapp/etc
. Statefulsetyaml
附在下面。谁能告诉我在这种情况下如何将卷附加到容器?
这是描述 pod 的输出
存储类定义
docker - activemq 状态集 kubernetes pod 启动失败
我有这个奇怪的错误困扰着我。
我试图让一个 activemq pod 运行一个 kubernetes 有状态集,附加卷。
activemq 只是一个普通的旧 vanila docker 映像,从这里挑选出来https://hub.docker.com/r/rmohr/activemq/
如果我们不使用有状态集定义 kubernete activemq pod,它运行良好。
以下是规格
kubernetes - 基于副本的 Kubernetes 容器亲和性?
我有一个有 10 个副本的 StatefulSet,每个副本都有数百 GB 的数据。
我想在 10 个副本中的 1 个上对对象存储(例如 S3)运行备份命令。(因此可以在 initContainer 步骤中加载数据)
是否可以使用基于副本 ID 的亲和性来调度容器?或者是否可以从环境变量中检索副本 ID?
kubernetes - 是否可以将整数锚转换或转换为 yaml 文件中的字符串别名?
对于我的 AKS 容器设置,我想通过环境变量将给定 statefulset 的请求数量的副本传递给每个 pod。
我试图在不重复自己的情况下做到这一点(一次是在“副本”设置中,一次是在环境变量的设置中)。
我能找到的唯一真正的解决方案是使用锚和别名(基于Kubernetes StatefulSet - 获取 spec.replicas 元数据并在配置中的其他位置引用):
不幸的是,“env”值似乎必须是一个字符串,并且“replicas”的整数值不会被转换或转换。而是引发以下错误:
v1.EnvVar.v1.EnvVar.Value: ReadString: 需要 " 或 n,但找到了 3,在 ...|,"value":3},{"name":|...的#10 字节中发现错误更大的上下文 ...|:"solr-config"}}},{"name":"N_O_REPLICAS","value":3},
我尝试通过编写手动转换为字符串:
但这也不起作用并引发以下错误:
将 YAML 转换为 JSON 时出错:yaml:第 52 行:未找到预期的密钥
有没有办法创建一个允许将整数值作为字符串重用的 Kubernetes YAML 文件?或者对于这种特殊情况有其他解决方案吗?
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 - 无法通过 minikube 上的主机名 ping 其他 pod
我有一个有两个副本的 statefulSet。它的无头服务名称是“gov-svc” 它是->
- .metadata.name:sts
- .metadata.namespace:默认
- .spec.serviceName: gov-svc
- .spec.template.spec.subdomain: gov-svc
- .spec.replicas: 2
在运行 statefulSet 之前
在从 pod 运行这个 statefulSet 的两个 podsts-0
之后,ping
结果:
但是当我尝试ping sts-1
from时sts-0
,它说:
我需要通过主机名成功 ping 其他 pod。我该怎么做?