Kun*_*mar 6 logging containers kubernetes
如何在 Kubernetes 中从自身内部获取容器的完整 id。我想在作为 Kubernetes 容器运行的应用程序日志中添加容器 ID
api*_*sim 14
该HOSTNAME环境变量可在 Kubernetes 上运行的任何容器中轻松使用,并给出运行容器的 pod 的唯一名称。使用日志记录框架提供的方法来访问环境变量并使其成为日志记录模式的一部分,或者以编程方式将其值添加到日志条目中。
假设pod 中只有一个应用程序容器(无论如何,这被认为是一种最佳实践),那么这应该用于应用程序日志记录。
有两种方法可以将 Pod 和 Container 字段公开给正在运行的 Container:
- 环境变量
- 卷文件
这两种公开 Pod 和 Container 字段的方式一起称为 Downward API。
因此,只需使用环境变量,您就可以将 Pod 的任何元数据注入到正在运行的容器中。
发表评论更新- 根据 kubernetes 文档,每个名称都有一个附加到资源名称的 UID,例如,pod 或容器将提供一种获取用于日志记录的唯一 ID 的方法。
metadata.name = myimage + unique id
注意* - 这里唯一需要注意的是,UID 在每次升级时都会发生变化,因此最好从您这边分配一个唯一的 ID 来与 K8 UID 结合识别容器或 Pod。
这是 YAML 的示例。
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
env:
- name: MY_POD_ID // <--- here you inject env into container
valueFrom:
fieldRef:
fieldPath: metadata.name // <--- set value of the env var to pod name
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |