У нас есть развернутый API в Kubernetes. API развертывается через контроллер репликации в поды и управляющий rc. Я хотел бы обновить конфигурацию модулей API с помощью скользящего обновления. Я могу это сделать, однако единственный способ заставить команду непрерывного обновления не выводить ошибку - это изменить имя RC. Но при этом разрывается связь с моей службой (представленной как балансировщик нагрузки) на RC, и он больше не может находить мои модули. Есть ли у кого-нибудь пример конфигурации для обновления контроллера репликации без изменения имени?
apiVersion: v1
kind: ReplicationController
metadata:
name: my-api
labels:
name: my-api
spec:
replicas: 4
selector:
name: my-api
template:
metadata:
labels:
name: my-api
spec:
containers:
- name: my-api
image: docker-registry.example.com/mynamespace/my-api
command: [ "sh", "-c", "/do/the/thing/run"]
resources:
limits:
cpu: 0
ports:
- name: web
containerPort: 80
env:
- name: "HELLO"
value: "WORLD"
И я хотел бы, например, изменить env var "HELLO" на "Bob" или что-то в этом роде.
Итак, я придумал стратегию, которая могла сработать. В большей части документации, над которой я работал, был селектор служб, основанный на имени модуля. Это не работает, потому что имя ДОЛЖНО измениться при выполнении непрерывного обновления. Лучше всего сделать service.spec.selector чем-то вроде "type = api-server" или какой-нибудь другой меткой метаданных, а затем добавить type = api-server к вашим модулям. (Помните, что службы указывают непосредственно на модули, а не на RC)
Контроллер репликации:
apiVersion: v1
kind: ReplicationController
metadata:
name: my-api-{{randomDigits}}
labels:
name: my-api-{{randomDigits}}
spec:
replicas: 4
selector:
name: my-api-{{randomDigits}}
template:
metadata:
labels:
name: my-api-{{randomDigits}}
type: api-server
spec:
containers:
- name: my-api
image: docker-registry.example.com/mynamespace/my-api
command: [ "sh", "-c", "/do/the/thing/run"]
resources:
limits:
cpu: 0
ports:
- name: web
containerPort: 80
env:
- name: "HELLO"
value: "WORLD"
Обслуживание:
apiVersion: v1
kind: Service
metadata:
name: my-api-service
labels:
name: my-api-service
spec:
type: LoadBalancer
ports:
- port: 80
selector:
type: api-server
Затем, если вы хотите обновить конфигурацию вашего модуля, вы просто измените {{randomDigits}} на что-то новое, и вы можете выполнить последовательное обновление, не разрывая связь между вашим Сервисом и вашими модулями.