我试图将一些容器信息公开为env变量,这些变量从pod的spec.template.spec.containers [0] .name中读取值,而这似乎不起作用。引用部署模板内的容器字段的apiSpec是什么。部署模板如下:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
replicas: 2
selector:
matchLabels:
run: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 8000
resources: {}
env:
- name: MY_CONTAINER_NAME
valueFrom:
fieldRef:
fieldPath: spec.template.spec.containers[0].name
答案 0 :(得分:4)
Downward API使您可以将Pod自身的元数据公开给流程 在那个豆荚里跑
当前,它允许您将以下信息传递到您的容器:
就是这样。如您所见,容器端口不属于此列表。
通常,通过Downward API可用的元数据相当有限。如果您还需要更多,则需要直接从Kubernetes API服务器上获取它,您可以通过使用客户端库或使用大使容器来实现。
答案 1 :(得分:1)
两件事:首先,容器名称是固定的-它是由PodSpec模板定义的-您可能会想到 docker 容器的名称(这是一个由生成的长名称,名称空间,容器名称,pod UID和重启计数)?因为docker容器的名称肯定不会出现在.spec.containers[0].name
第二,虽然我同意David的观点,但我怀疑kubernetes是否可以让您运行任意的fieldPath:
选择器,但是如果您愿意使用command:
灵活选择,您实际上可以使用Pod自己的{{ 1}}会在启动时查询kubernetes API,以检索Pod信息的 all 全部,包括其ServiceAccount
结构,该结构可能包含大量您需要的信息。