Percona MongoDB Operator如何创建mongod与Filebeat共享的emptyDir卷
emptyDir共享卷配置方法(适配Percona MongoDB Operator场景)
- 先定义共享emptyDir卷:直接改StatefulSet的话就在
spec.template.spec.volumes字段下加,走Operator配置的话就在CR的replset额外卷配置段下加,卷名可以直接叫mongo-logs,emptyDir默认用节点临时存储,基础配置不用加额外参数:
volumes: - name: mongo-logs emptyDir: {}
- 给mongod主容器配挂载:找到mongod容器的
volumeMounts配置段,把mongo-logs卷挂到mongod的日志输出目录就行,Percona官方MongoDB镜像默认日志存在/var/log/mongodb/路径下,挂载配置参考:
volumeMounts: - name: mongo-logs mountPath: /var/log/mongodb/
如果你的mongod之前改了自定义日志输出路径,这里的mountPath必须和实际日志路径完全一致,不然日志写不进共享卷,Filebeat自然采不到。
- 给Filebeat sidecar配挂载:找到同Pod里Filebeat容器的
volumeMounts配置段,挂同一个mongo-logs卷就行,Filebeat只需要读日志,建议加个只读标记,避免sidecar误删改日志文件:
volumeMounts: - name: mongo-logs mountPath: /var/log/mongodb/ readOnly: true
踩坑提醒:如果挂载后报权限拒绝,直接在Pod级别的
securityContext里加fsGroup: 1001就行。Percona MongoDB镜像默认用UID/GID 1001的用户运行,加了这个配置kubelet会自动把挂载目录的组权限赋给对应ID,刚好满足mongod写日志、Filebeat读日志的权限要求,不用手动进容器改目录权限:
securityContext: fsGroup: 1001
- 别直接改rs0对应的StatefulSet资源:Percona Operator会周期性调谐管理的资源,你手动改的StatefulSet配置过几分钟就会被Operator覆盖回去。所有卷、sidecar的配置都要写到PerconaServerMongoDB自定义资源的对应配置段里,让Operator自动生成最终的StatefulSet配置,改完等Pod滚动重建就生效。
内容的提问来源于stack exchange,提问作者Naama L Ackerman
相关产品推荐
相关产品推荐

