在 Kubernetes Pod 定义中,我使用
metadata.namespace
设置适当的环境变量。
apiVersion: apps/v1
kind: Deployment
[...]
template:
spec:
containers:
[...]
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: LOG_DIR
value: /logs/$(POD_NAMESPACE)
是否有类似的机制可以使用
metadata.namespace
来设置Service的注释?
---
apiVersion: v1
kind: Service
metadata:
annotations:
external-dns.alpha.kubernetes.io/hostname: {metadata.namespace}.domain.com
简短的回答,你不能。
$(VAR_NAME)
语法用于依赖的环境变量,但不用于注释,因为注释是一个通用概念,用于所有 kubernetes 对象,并且从 k8s 的角度来看,只是附加到资源的键/值对,没有任何方式与底层对象交互。
通常,这应该由模板引擎处理,即在 Helm 中,您可以使用 {{ Release.Namespace }} (区分大小写!)在资源模板中注入当前命名空间。
但是,如果您正在处理普通的 k8s 清单,没有一些外部工具,则必须在文件中提供完整的注释。