Kubernetes StatefulSet - 在配置中的其他地方获取 spec.replicas 元数据和引用

mjk*_*auf 5 kubernetes statefulset kubernetes-statefulset

我正在配置一个 StatefulSet,我希望副本的数量(如下所示的spec.replicas)以某种方式作为参数传递给应用程序实例。我的应用程序需要spec.replicas来确定副本的数量,以便它知道要从 MySQL 表加载哪些行。我不想对spec.replicas和 application 参数中的副本数量进行硬编码,因为这在向上或向下缩放副本数量时不起作用,因为在缩放时需要调整 application 参数。

这是我的 StatefulSet 配置:

apiVersion: 应用程序/v1beta1
种类:StatefulSet
元数据:
  标签:
    运行:我的应用程序
  名称:我的应用程序
  命名空间:my-ns
规格:
  复制品:3
  选择器:
    匹配标签:
      运行:我的应用程序
  服务名称:我的应用程序
  podManagementPolicy:并行
  模板:
    元数据:
      标签:
        运行:我的应用程序
    规格:
      容器:
      - 名称:我的应用程序
        图片:我的应用程序:最新
        命令:
          - /bin/sh
          - /bin/start.sh
          - 开发
          - 2000米
          - “0”
          - "3" **需要替换为#个副本**
          - 127.0.0.1
          - “32990”
        imagePullPolicy:始终
        活性探针:
          获取:
            路径:/健康
            端口:8081
          初始延迟秒数:180
          周期秒数:10
          超时秒数:3
        就绪探针:
          失败阈值:10
          获取:
            路径:/就绪
            端口:8081
            方案:HTTP
          初始延迟秒数:30
          周期秒数:15
          成功阈值:1
          超时秒数:3
        端口:
        - 容器端口:8080
          协议:TCP
        资源:
          限制:
            内存:2500Mi
      imagePullSecrets:
      - 名称:快照拉动
      重启策略:始终

我已经阅读了 Kubernetes 文档,并且spec.replicas字段的范围在 pod 或容器级别,而不是 StatefulSet,至少就我所见。

提前致谢。

小智 3

您可以使用 yaml 锚来执行此操作:

查看: https ://helm.sh/docs/chart_template_guide/yaml_techniques/#yaml-anchors

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  labels:
    run: my-app
  name: my-app
  namespace: my-ns
spec:
  replicas: &numReplicas 3
  selector:
    matchLabels:
      run: my-app
  serviceName: my-app
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest
        command:
          - /bin/sh
          - /bin/start.sh
          - dev
          - 2000m
          - "0"
          - *numReplicas
          - 127.0.0.1
          - "32990"
        imagePullPolicy: Always
        livenessProbe:
          httpGet:
            path: /health
            port: 8081
          initialDelaySeconds: 180
          periodSeconds: 10
          timeoutSeconds: 3
        readinessProbe:
          failureThreshold: 10
          httpGet:
            path: /ready
            port: 8081
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 15
          successThreshold: 1
          timeoutSeconds: 3
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          limits:
            memory: 2500Mi
      imagePullSecrets:
      - name: snapshot-pull
      restartPolicy: Always
Run Code Online (Sandbox Code Playgroud)