Я бы не рекомендовал этот подход, но наиболее близким к тому, что вы хотите, является использование набора с сохранением состояния и использование имени модуля в качестве индекса.
При развертывании набора с отслеживанием состояния модули будут называться в соответствии с именем набора с отслеживанием состояния в следующем примере:
apiVersion: v1
kind: Service
metadata:
name: kuard
labels:
app: kuard
spec:
type: NodePort
ports:
- port: 8080
name: web
selector:
app: kuard
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kuard
spec:
serviceName: "kuard"
replicas: 3
selector:
matchLabels:
app: kuard
template:
metadata:
labels:
app: kuard
spec:
containers:
- name: kuard
image: gcr.io/kuar-demo/kuard-amd64:1
ports:
- containerPort: 8080
name: web
Поды, созданные statefulset, будут называться так:
kuard-0
kuard-1
kuard-2
Таким образом, вы можете назвать набор с сохранением состояния в соответствии с классами, то есть: class-name
, и созданный модуль будет class-name-0
, и вы можете заменить _
на -
. Или просто удалите имя, чтобы получить индекс в конце.
Чтобы получить имя, просто прочитайте переменную окружения HOSTNAME
Это наименование является последовательным, поэтому вы можете убедиться, что у вас всегда есть 0, 1, 2, 3 после имени. И если 2
выйдет из строя, он будет воссоздан.
Как я уже сказал, я бы не рекомендовал этот подход, потому что вы привязываете инфраструктуру к своему коду, а также не можете масштабировать (при необходимости), потому что каждая служба уникальна, и добавление новых экземпляров приведет к получению новых идентификаторов.
Лучшим подходом было бы использование одного развертывания для каждого класса и передача правильных значений в качестве переменных среды.
person
Diego Mendes
schedule
24.04.2019