Kubernetes部署NATS:如何通过参数传入配置文件并解决报错
解决NATS部署中ConfigMap挂载报错的问题
报错原因:你把ConfigMap直接挂载到了一个文件路径上,Kubernetes默认会将这个路径创建为目录而非文件,所以nats-server读取时提示/etc/nats-server-conf/server.conf: is a directory。
下面两种方法都能解决这个问题:
方法一:挂载整个目录
修改Deployment中的volumeMounts,将mountPath设为目录路径而非文件路径:
apiVersion: apps/v1 kind: Deployment metadata: name: nats-depl spec: replicas: 1 selector: matchLabels: app: nats template: metadata: labels: app: nats spec: containers: - name: nats image: nats volumeMounts: # 挂载到目录,而非文件 - mountPath: /etc/nats-server-conf name: nats-server-conf args: [ '-p', '4222', '-m', '8222', '-js', '-c', '/etc/nats-server-conf/server.conf' ] volumes: - configMap: name: nats-server-conf name: nats-server-conf
这样ConfigMap中的server.conf文件会被放到/etc/nats-server-conf目录下,nats-server就能正常读取配置文件了。
方法二:使用subPath挂载单个文件
如果想保持挂载路径为文件,可以添加subPath字段指定要挂载的ConfigMap中的文件:
# 修改volumeMounts部分即可 volumeMounts: - mountPath: /etc/nats-server-conf/server.conf name: nats-server-conf subPath: server.conf
添加subPath: server.conf后,Kubernetes会将ConfigMap里的server.conf文件直接挂载到指定路径,而不会创建目录。
验证:部署修改后的Deployment后,可执行以下命令检查文件是否正确挂载:
kubectl exec -it <nats-pod-name> -- cat /etc/nats-server-conf/server.conf
内容的提问来源于stack exchange,提问作者Shreyas Chorge
相关产品推荐
相关产品推荐

