Kubernetes StatefulSet - получить метаданные spec.replicas и ссылку в другом месте конфигурации

Я настраиваю StatefulSet, где я хочу, чтобы количество реплик (spec.replicas, как показано ниже) было доступно для передачи в качестве параметра в экземпляр приложения. Моему приложению нужны spec.replicas, чтобы определить количество реплик, чтобы знать, какие строки загружать из таблицы MySQL. Я не хочу жестко кодировать количество реплик в spec.replicas и параметре приложения, так как это не будет работать при масштабировании количества реплик вверх или вниз, поскольку параметр приложения необходимо корректировать при масштабировании.

Вот мой конфиг StatefulSet:

apiVersion: apps / v1beta1
вид: StatefulSet
метаданные:
  метки:
    запустить: мое приложение
  имя: мое приложение
  пространство имен: my-ns
спецификация:
  Реплики: 3
  селектор:
    matchLabels:
      запустить: мое приложение
  serviceName: my-app
  podManagementPolicy: Parallel
  шаблон:
    метаданные:
      метки:
        запустить: мое приложение
    спецификация:
      контейнеры:
      - имя: мое приложение
        изображение: мое приложение: последнее
        команда:
          - /bin/sh
          - /bin/start.sh
          - разработчик
          - 2000 м
          - "0"
          - "3" ** Необходимо заменить # репликами **
          - 127.0.0.1
          - "32990"
        imagePullPolicy: всегда
        livenessProbe:
          HttpGet:
            путь: / здоровье
            порт: 8081
          initialDelaySeconds: 180
          periodSeconds: 10
          timeoutSeconds: 3
        readinessProbe:
          failThreshold: 10
          HttpGet:
            путь: / готов
            порт: 8081
            схема: HTTP
          initialDelaySeconds: 30
          periodSeconds: 15
          successThreshold: 1
          timeoutSeconds: 3
        порты:
        - containerPort: 8080
          протокол: TCP
        Ресурсы:
          ограничения:
            память: 2500Mi
      imagePullSecrets:
      - имя: моментальный снимок
      restartPolicy: всегда

Я прочитал документы Kubernetes, и поле spec.replicas имеет область действия на уровне контейнера или контейнера, а не StatefulSet, по крайней мере, насколько я видел.

Заранее спасибо.

2 ответа

Вы можете использовать привязку yaml для этого:

Проверьте: https://github.com/kubernetes/helm/blob/master/docs/chart_template_guide/yaml_techniques.md

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

Обычно вы бы использовали нисходящий API для такого рода вещей. https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/

Однако в настоящее время kubernetes не может распространять данные спецификации развертывания / statefulset в спецификации pod с нисходящим API, и это не должно быть. Если вы отвечаете за это программное обеспечение, я бы настроил некоторые внутренние функции, чтобы он мог находить своих партнеров и периодически определять их количество.

Другие вопросы по тегам