首页 > 解决方案 > 有没有办法在 deployment.yml 文件中动态添加值?

问题描述

我有 deployment.yml 文件,我在其中将服务日志记录文件夹安装到主机中的文件夹。问题是当我使用相同的 deployment.yml 文件运行多个实例时,例如扩展所有实例都记录到同一个文件。有没有办法通过基于容器ID或其他东西在主机中动态创建文件夹来解决这个问题。任何建议表示赞赏。我当前的 deployment.yml 文件是

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash-deployment
spec:
  selector:
matchLabels:
  app: logstash
  replicas: 2
  template:
    metadata:
      labels:
        app: logstash
    spec:
       containers:
       - name: logstash
         image: logstash:6.8.6
         volumeMounts:
         - mountPath: /usr/share/logstash/config/
           name: config
          - mountPath: /usr/share/logstash/logs/
            name: logs
       volumes:
       - name: config
         hostPath:
           path: "/etc/logstash/"
       - name: logs
         hostPath:
           path: "/var/logs/logstash"

标签: kuberneteslogstash

解决方案


kubernetes 中有一些字段可以动态获取,例如节点名称、pod 名称、pod ip 等。请参阅此(https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose- pod-information/ ) 文档作为示例。

这是一个示例,您可以将节点名称设置为环境变量。

env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

您可以通过向其添加节点名称来创建文件的方式更改部署。这样,您可以在每个节点上使用不同的文件名。建议创建一个守护程序集而不是部署,它将在每个选定的节点上生成一个 pod(可以使用节点选择器完成选择)。


推荐阅读