是否可以从Kubernetes的容器内部获取容器名称?

Hak*_*aba 5 kubernetes

说我有以下Pod规格。

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
Run Code Online (Sandbox Code Playgroud)

在这里,容器的名称是nginx。有没有办法从正在运行的容器中获取“ nginx”字符串?

我的意思是,一旦我用类似的东西执行到容器中

kubectl exec -it <pod-name> -c nginx bash
Run Code Online (Sandbox Code Playgroud)

有没有一种编程的方法来获取pod规范中的给定容器名称?


请注意,这不一定是在中打印的docker容器名称docker ps。Kubernetes为生成的Docker容器编写了一个更长的名称。


向下API看起来在这方面的承诺。但是container name,本Capabilities of the Downward API节未提及。

Jan*_*art 5

容器名称无法通过向下的 api 获得。您可以使用yaml 锚点和别名(引用)。不幸的是,它们没有范围,因此您必须为锚点提供唯一的名称 - 它们是什么并不重要,因为它们存在于解析的文档中。

先前序列化的节点的后续出现显示为别名节点。节点的第一次出现必须用锚标记,以允许后续出现的出现作为别名节点。

别名节点由“*”指示符表示。该别名是指具有相同的锚最近在前节点。别名节点使用文档中先前未出现的锚点是错误的。指定未被任何别名节点使用的锚点不是错误。

First occurrence: &anchor Foo
Second occurrence: *anchor
Override anchor: &anchor Bar
Reuse anchor: *anchor
Run Code Online (Sandbox Code Playgroud)

这是一个完整的工作示例:

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
Run Code Online (Sandbox Code Playgroud)


Gra*_*ton 1

不确定部署中的容器名称是否可用。

对于部署名称,在 OpenShift 中用于部署配置(因此可能是 Kubernetes 部署)的一种方法是获取环境HOSTNAME变量的值,其形式为<deployment-name>-<deployment-number>-<random-string>.

从倒数第二个-开始,主要组件是部署名称。

这可能会有点麻烦,但也许可以通过基于部署名称查询部署资源对象的 REST API 以某种方式推断出容器名称。

容器名称后面的具体用途是什么?如果知道您需要它的用途,也许可以建议其他选择。