我正在尝试使用向下的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
Run Code Online (Sandbox Code Playgroud)
我想念什么?
更新:
很明显,我的缩进是搞砸了,谢谢你指出这一点,但是我的问题的主要部分仍然不清楚。如何从容器中获取部署名称?
您为部署对象使用了错误的缩进和结构。
无论是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
Run Code Online (Sandbox Code Playgroud)
请记住,您可以使用此在线验证器或在本地使用kubeval验证Kubernetes清单。
参考问题的主要部分,您可以获取创建Pod的对象,但很可能是ReplicaSet,而不是Deployment。
Pod名称通常是由Kubernetes生成的,您事先并不知道它,这就是为什么有一种获取名称的机制的原因。但这不是部署的情况:您在创建部署时知道其名称。我认为没有一种机制可以动态获取Deployment名称。
通常,在Deployment对象的PodSpec中使用标签来添加元数据。
您也可以尝试解析它,因为Pod名称(您拥有的名称)始终具有以下格式:deploymentName-replicaSetName-randomAlphanumericChars。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |