7

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

这是我的 StatefulSet 配置:

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

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

提前致谢。

4

2 回答 2

2

您可以使用 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
于 2018-04-16T05:48:57.887 回答
1

通常你会使用向下的 api 来做这种事情。https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

然而,kubernetes 目前不可能使用向下 api 将部署/状态集规范数据传播到 pod 规范中,也不应该这样做。如果你负责这个软件,我会设置一些内部功能,以便它可以找到它的对等点并定期确定它们的数量。

于 2018-07-18T15:11:43.073 回答