我正在尝试使用向下的API将部署名称设置为环境变量,但是我的容器一直崩溃而没有任何日志记录。我正在使用busybox打印环境变量。我在Pod上使用成功,但在部署上却没有运气:这是我的YAML:
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-d
name: test-deploy
spec:
replicas: 1
selector:
matchLabels:
app: test-d
template:
metadata:
labels:
app: test-d
spec:
command:
- sh
- "-c"
- "echo Hello Kubernetes, I am $MY_DEPLOY_NAME in $MY_CLUSTER_NAME and $MY_NAMESPACE! && sleep 3600"
containers:
-
image: busybox
name: test-d-container
env:
-
name: MY_DEPLOY_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
-
name: MY_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
-
name: MY_CLUSTER_NAME
value: production
我想念什么?
更新:
很明显,我的缩进被弄乱了,谢谢你指出,但是我的问题的主要部分仍然不清楚。如何从容器中获取部署名称?
答案 0 :(得分:5)
您为Deployment对象使用了错误的缩进和结构。
command
键和env
键都是container
键的一部分。
这是正确的格式
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-d
name: test-deploy
spec:
replicas: 1
selector:
matchLabels:
app: test-d
template:
metadata:
labels:
app: test-d
spec:
containers:
- image: busybox
name: test-d-container
command:
- sh
- "-c"
- "echo Hello Kubernetes, I am $MY_DEPLOY_NAME in $MY_CLUSTER_NAME and $MY_NAMESPACE! && sleep 3600"
env:
-
name: MY_DEPLOY_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
-
name: MY_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
-
name: MY_CLUSTER_NAME
value: production
请记住,您可以使用this online validator或本地using kubeval来验证Kubernetes清单。
请参阅问题的主要部分you can get the object that created the Pod,但最有可能的是副本集,而不是部署。
Pod名称通常是由Kubernetes生成的,您事先并不知道,这就是为什么有一种获取名称的机制的原因。但这不是部署的情况:您在创建部署时知道其名称。我认为没有一种机制可以动态获取Deployment名称。
通常,在Deployment对象的PodSpec中使用标签来添加元数据。
您也可以尝试解析它,因为pod名称(您拥有的)始终具有以下格式:deploymentName-replicaSetName-randomAlphanumericChars。