标签: kubernetes-statefulset

Kubernetes 滚动更新无需停机?

根据https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#scaling-a-statefulset,请问如何实现零宕机滚动更新?我想这是最低要求:

(1) .spec.updateStrategy 设置为 RollingUpdate

(2) .spec.podManagementPolicy 设置为 OrderedReady

(3) .spec.replicas 设置为 2

那正确吗?我假设当更新以相反的顺序发生时,所有到 StatefulSet 的流量都由序号较低的 pod 提供服务?

patch downtime live-update kubernetes kubernetes-statefulset

4
推荐指数
1
解决办法
2699
查看次数

在 Kubernetes 中配置 StatefulSet 的 pod 的起始索引

众所周知,从文档中可以看出

对于具有 N 个副本的 StatefulSet,StatefulSet 中的每个 Pod 将被分配一个整数序数,从 0 到 N-1,它在整个 Set 中是唯一的。

例子:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zookeeper-np
  labels:
    app: zookeeper-np
spec:
  serviceName: zoo-svc-np
  replicas: 3
  selector:
    matchLabels:
      app: zookeeper-np
  template:
    metadata:
      labels:
        app: zookeeper-np
    spec:
      containers:
      - name: zookeeper-np
        image: zookeeper:3.5.6
        ports:
        - containerPort: 30005
        - containerPort: 30006
        - containerPort: 30007
        env:
        - name: ZOO_MY_ID
          value: "1"
Run Code Online (Sandbox Code Playgroud)

上面的清单将创建三个 pod,如下所示:

NAME                     READY   STATUS    STARTS   AGE
pod/zookeeper-np-0       1/1     Running   0        203s
pod/zookeeper-np-1       1/1     Running   0        137s …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-statefulset

4
推荐指数
1
解决办法
582
查看次数

有状态集不会转移到新节点

我已经在我的 Kubernetes 集群上部署了一个有状态的集合应用程序。它有持久卷等和一个副本。我面临的问题是,当我关闭运行有状态集的节点时,pod 不会在新节点上重新启动。它继续等待节点启动并最终在同一节点上重新启动。StatefulSet 规范中是否有一些我缺少的设置。我已经按照 Kubernetes 指南中提到的示例进行了设置:https ://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#components

我错过了什么?

kubernetes kubernetes-statefulset

3
推荐指数
1
解决办法
1400
查看次数

连接到不同命名空间中的 Kubernetes mongo db

任何人都可以指出如何使用 mongo 客户端使用命令行客户端或使用连接字符串从 .net core 程序连接到 mongo 数据库实例?

我们在 digitalocean 中创建了一个带有命名空间的示例集群,假设是mongodatabase

我们安装了带有 3 个副本的 mongo statefulset。我们能够使用以下命令成功连接 kubectl --kubeconfig=configfile.yaml -n mongodatabase exec -ti mongo-0 mongo 但是当我们从不同的命名空间或默认命名空间使用以下格式的 pod 名称连接时,它不起作用。

 kubectl --kubeconfig=configfile.yaml  exec -ti mongo-0.mongo.mongodatabase.cluster.svc.local mongo
Run Code Online (Sandbox Code Playgroud)

其中mongo-0.mongo.mongodatabase.cluster.svc.local位于pod-0.service_name.namespace.cluster.svc.local中(也尝试了 pod-0.statfulset_name.namespace.cluster.svc.local 和 pod-0。 service_name.statefulsetname.namespace.cluster.svc.local) 等,

任何人都可以帮助在命令行中以及从 java/.net core 等程序连接 mongo 客户端时使用正确的 dns 名称/连接字符串吗?

另外,我们应该在这里使用 kubernetes 部署而不是有状态集吗?

mongodb kubernetes kubernetes-statefulset

3
推荐指数
1
解决办法
6083
查看次数

Kubernetes HPA(具有自定义指标)扩展策略

从 Kubernetes v1.18 开始,v2beta2 API 允许通过 Horizo​​ntal Pod Autoscalar (HPA) 行为字段配置扩展行为。我计划将具有自定义指标的 HPA 应用于 StatefulSet

我正在查看的用例是使用自定义指标(例如我的应用程序上的用户会话数)进行扩展,但 HPA 根本不会缩小。K8s SIG 自动缩放增强功能也描述了此用例 - “HPA 的可配置缩放速度 >> 故事 4:照常缩放,不要缩小”

behavior:
  scaleDown:
    policies:
    - type: pods
      value: 0
Run Code Online (Sandbox Code Playgroud)

用户会话可能会保持活动状态几分钟到几小时。从 StatefulSet 的 1 个副本开始,随着用户会话数量达到上限(使用 Prometheus 收集器公开,随后使用 HPA 自定义指标选项进行配置),应用程序 Pod 将横向扩展。新的 Pod 将开始为新用户提供服务。

由于这是一个 StatefulSet 并且不能突然缩小,因此我正在寻求有关当新副本上的用户会话降至 0 时缩小规模的方法的帮助。上面的链接说缩小可以通过单独的过程来控制。不知道该怎么做?寻找一些指点。

谢谢。

kubernetes kubernetes-statefulset kubernetes-pod horizontal-pod-autoscaling

3
推荐指数
1
解决办法
2406
查看次数

将单独的环境变量传递给有状态 Pod

我正在部署两个具有相同映像的有状态 Pod,作为无头服务运行。我希望将单独的环境变量传递给在 statefulset pod 内运行相同图像的容器。谁能告诉我如何实现这一目标?

kubernetes kubernetes-statefulset

3
推荐指数
1
解决办法
5258
查看次数

statefulset 的就绪探针,而不是单个 pod/容器

我一直在阅读kubernetes 中的活性和就绪探针,我想用它们来检查集群是否已经启动。

问题是如何为整个 statefulset 配置就绪探针,而不是单个 pod/容器。

可以使用简单的 HTTP 检查来确定准备情况,但我遇到的问题是 readinessCheck 似乎适用于容器/pod 而不是集合本身。

对于我使用的软件,在集群形成之前,HTTP 端点不会出现;这意味着每个单独的 pod 都不会通过 readinessCheck,直到所有三个都启动并找到另一个。

我现在在 Kubernetes 中看到的行为是创建了 3 个副本中的第一个,并且在第一个通过 readinessCheck 之前,Kubernetes 甚至不会尝试创建副本 2 和 3,这从未发生过,因为所有三个都必须启动让它有机会通过它。

kubernetes google-kubernetes-engine kubernetes-statefulset

2
推荐指数
1
解决办法
1579
查看次数

是否可以在kubernetes中将HPA应用于Statefulset?

我正在尝试在kubernetes环境中为我的statefulset(for elasticsearch)设置HPA。我正计划使用cpu利用率来扩展statefulset。我已经从https://github.com/stefanprodan/k8s-prom-hpa/tree/master/metrics-server创建了度量服务器。

而我的用于statefulset的HPA yaml如下:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: dz-es-cluster
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: StatefulSet
    name: dz-es-cluster
  minReplicas: 2
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 80
Run Code Online (Sandbox Code Playgroud)

但是在hpa中获取输出如下:

Conditions:
  Type         Status  Reason          Message
  ----         ------  ------          -------
  AbleToScale  False   FailedGetScale  the HPA controller was unable to get the target's current scale: the server could not find the requested resource
Events:
  Type     Reason          Age                From                       Message
  ----     ------          ----               ----                       -------
  Warning  FailedGetScale  1m …
Run Code Online (Sandbox Code Playgroud)

elasticsearch autoscaling kubernetes kubernetes-statefulset

2
推荐指数
1
解决办法
1611
查看次数

如何在 Google Cloud Platform 上使用 ClusterIP None 公开 StatefulSet 服务?

如何ClusterIP=None在 Google Cloud Platform 中的 Kubernetes 上公开 StatefulSet 服务(cassandra、mysql 等)?

我需要更改 ClusterIP 配置吗?或者我需要配置 Google Cloud NAT?或者我需要改变其他事情?

谢谢

编辑:我想从互联网上的任何地方从外部IP连接到cassandra

EDIT2:我想解决方案是使用LoadBalance代替ClusterIP,但是当我使用 时LoadBalance,Cassandra 节点找不到种子节点。然后我仍然使用ClusterIP=NoneCassandra 集群,并创建了另一个 POD 以type=LoadBalance连接到 Cassandra 并连接到外部。现在它可以工作了:)

google-cloud-platform kubernetes kubernetes-statefulset

2
推荐指数
1
解决办法
2万
查看次数

Kubernetes StatefulSets 和 livenessProbes

活性探针应该触发失败容器的重新启动。他们是否尊重默认的有状态集部署和扩展保证。例如,如果同一状态集中的多个 pod 的活性探测同时失败,K8S 会尝试一次重新启动一个容器还是并行地重新启动所有容器?

kubernetes statefulset kubernetes-statefulset livenessprobe

2
推荐指数
1
解决办法
1824
查看次数