Как назначить имя кластера, пространства имен и модуля в переменной окружения файла kubernetes yaml
У меня есть требование передать кластер, пространство имен и имя модуля агенту AppDynamics из моего контейнера, развернутого в кластере Kubernetes.
Я попробовал что-то, как показано ниже, но это не работает.
containers:
- env:
- name: JAVA_OPTS
value: -Dappdynamics.agent.nodeName=$HOST-$spec.nodeName-spec.PodName
а также
- name: appdynamics.agent.nodeName
value= $HOST-$spec.nodeName-spec.PodName
Может кто-нибудь, пожалуйста, помогите мне здесь, как собрать детали и передать в AppD. Заранее спасибо.
2 ответа
Ты можешь получить POD_NAME
а также POD_NAMESPACE
передавая их как переменные среды через fieldRef
,
apiVersion: v1
kind: Pod
metadata:
name: test-env
spec:
containers:
- name: test-container
image: my-test-image:latest
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
- name: REFERENCE_EXAMPLE
value: "/$(MY_NODE_NAME)/$(MY_POD_NAMESPACE)/$(MY_POD_NAME)/data.log"
restartPolicy: Never
РЕДАКТИРОВАТЬ: Добавлен пример env REFERENCE_EXAMPLE
чтобы показать, как ссылаться на переменные. Благодаря этому ответу за указание на $()
интерполяция.
Вы можете ссылаться supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP
как указано в документации здесь.
Тем не мение, CLUSTERNAME
не является стандартной доступной собственностью. Согласно этому PR № 22043, CLUSTERNAME
следует вводить в .metadata
поле при использовании GCE.
В противном случае вам придется CLUSTERNAME
вручную в .metadata
поле, а затем использовать fieldRef
внедрить его в качестве переменной среды.
Ниже формат помог мне, предложенный ewok2030 и Praveen. Только одна вещь, чтобы убедиться, что переменная должна быть объявлена до того, как она будет использована как JAVA_OPTS.
контейнеры:
- env:
- name: APPD_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: APPD_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: APP_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: JAVA_OPTS
value: -Xmx712m -Xms556m -Dpdp.logging.level=WARN -Dappdynamics.agent.nodeName=$(APPD_NODE_NAME)-$(APPD_POD_NAMESPACE)-$(APP_POD_NAME)