有没有一种方法可以在Deployment.yml文件中动态添加值?

时间:2020-02-24 12:53:18

标签: kubernetes logstash

我有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"

2 个答案:

答案 0 :(得分:1)

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(可以使用节点选择器进行选择)。

答案 1 :(得分:-1)

您可以使用sed动态添加一些值

例如:-

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: {path}
       - name: logs
         hostPath:
           path: "/var/logs/logstash"

现在我要动态添加路径

我会简单地

set -i "s|{path}:'/etc/logstash/'|g" deployment.yml 

通过这种方式,可以在部署文件之前根据需要放置任意数量的值。