是否可以从kubernetes容器中获取容器名称?
假设我有以下pod规范。是否可以从kubernetes容器中获取容器名称?
apiVersion: apps/v1beta1
kind: Deployment
metadata:
# Unique key of the Deployment instance
name: deployment-example
spec:
# 3 Pods should exist at all times.
replicas: 3
template:
metadata:
labels:
# Apply this label to pods and default
# the Deployment label selector to this value
app: nginx
spec:
containers:
- name: nginx
# Run this image
image: nginx:1.10
在这里,容器的名称是nginx
。有没有办法从正在运行的容器中获取“nginx”字符串?
我的意思是,一旦我Exec的放入容器的东西,如
kubectl exec -it <pod-name> -c nginx bash
有一个纲领性的方式来获得在吊舱规范指定容器名称?
请注意,这不一定是打印在docker ps
中的码头容器名称。 Kubernetes为产生的码头集装箱组成了一个更长的名字。
downward api在这方面看起来很有前景。但Capabilities of the Downward API
部分未提及container name
。
不知道部署中的容器名称是否可用。
对于部署名称,在OpenShift中用于部署配置(以及可能的Kubernetes部署)的一种方法是采用环境变量的值,其格式为<deployment-name>-<deployment-number>-<random-string>
。
从第二个倒数-
起,引导组件是部署名称。
可能会有点混乱,但也许可以通过查询基于该部署名称的部署资源对象的REST API以某种方式推断容器名称。
您在容器名称后特别注意?如果知道你需要什么,可以建议其他选项。
通过向下的api,容器名称不可用。您可以使用yaml anchors and aliases (references)。不幸的是,他们没有作用域,所以你将不得不为锚定者提供唯一的名称 - 它们并不重要,因为它们是而不是存在于解析的文档中。
以前序列化节点的后续事件作为别名节点呈现。节点的第一次出现必须用锚点标记,以允许随后出现的节点作为别名节点呈现。
别名节点由“*”指示符表示。 别名是指具有相同锚点的最近的在先节点。对于别名节点来说,使用以前不在文档中发生的锚点是错误的。指定未被任何别名节点使用的锚点并不是错误。
First occurrence: &anchor Foo Second occurrence: *anchor Override anchor: &anchor Bar Reuse anchor: *anchor
这是一个完整的工作示例:
apiVersion: v1
kind: Pod
metadata:
name: reftest
spec:
containers:
- name: &container1name first
image: nginx:1.10
env:
- name: MY_CONTAINER_NAME
value: *container1name
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: &container2name second
image: nginx:1.10
env:
- name: MY_CONTAINER_NAME
value: *container2name
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
我希望把它变成我的提示。我想要这样的东西 'root @ $ HOSTNAME:$ CONTAINER_NAME> $'在kubernetes中,$ HOSTNAME变成了PodName –