我希望我的应用程序在主机位置写入日志文件,所以我正在安装一个hostPath
卷。但是所有应用程序都尝试使用相同的文件名写入日志。
我想将文件分成以Pod名称命名的文件夹,但我在文档中没有看到如何实现它:
volumes:
- name: logs-volume
hostPath:
path: /var/logs/apps/${POD_NAME}
type: DirectoryOrCreate
在上面的(不工作)示例中,应用程序应将文件写入POD_NAME文件夹。
可能吗?
您可以使用向下的API(在https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod-fields-as-values-for-environment-variables上阅读更多内容)。您可以设置一个变量,例如:
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
然后在卷路径中使用带括号的变量,如:
volumes:
- name: logs-volume
hostPath:
path: /var/logs/apps/$(MY_POD_NAME)
type: DirectoryOrCreate
但是,我不确定您是否可以在命令和参数以外的位置使用环境变量。如果是这种情况,您可以修改应用程序代码或入口点脚本,以将环境变量添加到其写入日志的位置。
环境变量的替代方法是使用包含带有信息的文件的映射卷(https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)。然后,您的应用程序需要读取该卷或先前定义的环境变量的数据,并将名称添加到它写入日志的路径中。
alpha feature that might help可在kubernetes 1.11中找到。我没有测试它,但它显然允许这样的东西:
volumeMounts:
- mountPath: /var/log
name: logs
subPathFrom:
fieldRef:
fieldPath: metadata.name
volumes:
- name: logs
hostPath:
path: /var/logs/apps/