Вам не обязательно использовать здесь руководства, это просто ярлыки и имена ...
Во-вторых, они относятся к разным вещам (хотя некоторые из них должны быть одинаковыми в некоторых случаях):
- имя метаданных - это имя рассматриваемого развертывания. Вы будете использовать его для ссылки и манипулирования этим конкретным Развертыванием в течение его жизненного цикла.
- метки и метки должны быть одинаковыми, если вы хотите, чтобы они совпали друг с другом, что в данном случае вам нужно. Kubernetes является сильным и достаточно гибким, когда дело доходит до маркировки, и разные ресурсы могут иметь несколько меток (скажем, у модуля может быть метка: app: Postfix, tier: backend, layer: mysql, env: dev). Само собой разумеется, что метка (и), которую вы хотите сопоставить, и метка (и), которые должны быть сопоставлены, должны быть одинаковыми, чтобы их можно было сопоставить.
Что касается автоматизации маркировки в Развертывании, чтобы избежать повторения, может быть, лучше было бы использовать рулевые диаграммы или какой-нибудь другой подход «автоматизации kubernetes», в зависимости от ваших реальных потребностей?
Дополнительное примечание: для передачи метки в переменную env может использоваться следующее, начиная с kubernetes 1.9:
...
template:
metadata:
labels:
label_name: label-value
...
env:
- name: ENV_NAME
valueFrom:
fieldRef:
fieldPath: metadata.labels['label_name']
Ниже приведен полный макет кода для демонстрации этого (клиент 1.9.3, сервер 1.9.0):
# cat d.yaml:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: app-guidhere
spec:
selector:
matchLabels:
client: guidhere
template:
metadata:
labels:
client: guidhere
spec:
containers:
- name: some-name
image: nginx
env:
- name: GUIDENV
valueFrom:
fieldRef:
fieldPath: metadata.labels['client']
# after: kubectl create -f d.yaml and connecting to container
# echo $GUIDENV responds with "guidhere"
И я только что попробовал это и работает правильно (обратите внимание на версии k8s).