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, и это не должно быть. Если вы отвечаете за это программное обеспечение, я бы настроил некоторые внутренние функции, чтобы он мог находить своих партнеров и периодически определять их количество.