Kubernetes предоставляет информацию о других сервисах (всем запущенным модулям в одном пространстве имен) с использованием переменных среды. Например:
"UIMANAGEMENT_V6_2_2_SERVICE_PORT_HTTP": "80"
"UIMANAGEMENT_V6_2_2_SERVICE_PORT_GRPC": "5111"
"UIMANAGEMENT_V6_2_2_SERVICE_PORT": "80"
"UIMANAGEMENT_V6_2_2_SERVICE_HOST": "10.110.7.1"
куда UIMANAGEMENT_V6_2_2
это название развертывания нашей службы.
Мы хотели бы использовать эти данные для реализации простого обнаружения сервисов, но я только что понял, что эта информация не обновляется внутри уже запущенных модулей во время выполнения - когда в кластере развертывается новая служба. Это просто проблема конфигурации k8s или обновление среды выполнения в настоящее время не поддерживается?
Спасибо.
Обновление переменных среды на запущенных модулях не поддерживается в Kubernetes.
Однако если вы развернете свои поды в Kubernetes как deployment.apps
, вы можете изменить переменную среды в развертывании, что заставит Kubernetes развернуть новые экземпляры вашего модуля с новым значением переменной среды и завершить работу старых модулей с использованием более старого значения переменной.
Например, если вы развертываете модуль с помощью Pod
api вот так:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
env:
- name: TEST_VAR
value: "123"
Вы не сможете kubectl edit pod nginx-pod
обновить значение, установленное для TEST_VAR
. Если вы когда-нибудь захотите обновить TEST_VAR
env, вам необходимо удалить модуль и заново создать его с обновленным значением «вручную».
Вместо этого вы должны развернуть модуль, используя Deployment.app
api, вот так:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
env:
- name: TEST_VAR
value: "123"
Что позволит вам сделать kubectl edit deployments.apps nginx-deployment
, или даже проще, kubectl set env deployment/nginx-deployment TEST_VAR="456"
, чтобы обновить TEST_VAR
стоимость. Kubernetes удалит и заново создаст поды.