说我有以下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
节未提及。
容器名称无法通过向下的 api 获得。您可以使用yaml 锚点和别名(引用)。不幸的是,它们没有范围,因此您必须为锚点提供唯一的名称 - 它们是什么并不重要,因为它们不存在于解析的文档中。
先前序列化的节点的后续出现显示为别名节点。节点的第一次出现必须用锚标记,以允许后续出现的出现作为别名节点。
别名节点由“*”指示符表示。该别名是指具有相同的锚最近在前节点。别名节点使用文档中先前未出现的锚点是错误的。指定未被任何别名节点使用的锚点不是错误。
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
不确定部署中的容器名称是否可用。
对于部署名称,在 OpenShift 中用于部署配置(因此可能是 Kubernetes 部署)的一种方法是获取环境HOSTNAME
变量的值,其形式为<deployment-name>-<deployment-number>-<random-string>
.
从倒数第二个-
开始,主要组件是部署名称。
这可能会有点麻烦,但也许可以通过基于部署名称查询部署资源对象的 REST API 以某种方式推断出容器名称。
容器名称后面的具体用途是什么?如果知道您需要它的用途,也许可以建议其他选择。
归档时间: |
|
查看次数: |
2105 次 |
最近记录: |