我有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"
答案 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
通过这种方式,可以在部署文件之前根据需要放置任意数量的值。