Minikube中如何为插件部署的Nginx Ingress Pod映射宿主机卷
针对Minikube内置Nginx Ingress控制器的卷映射实现方案
不需要重新自定义部署Nginx Ingress,直接通过资源补丁或者修改addon本地模板的方式就能实现Pod内日志目录到宿主机的映射,具体操作如下:
方案一:Patch运行中控制器Deployment(操作最快,临时/测试环境推荐)
Minikube启用的ingress addon本质还是跑在ingress-nginx命名空间下的标准Kubernetes Deployment资源,不需要原始部署YAML就能直接通过kubectl patch修改配置:
- 先确认控制器资源位置,默认命名空间为
ingress-nginx,Deployment名称为ingress-nginx-controller,执行以下命令校验:kubectl get deployment -n ingress-nginx - 执行补丁命令添加hostPath卷映射,以下示例将Pod内Lua日志写入路径
/var/log/lua/挂载到Minikube节点的/var/log/nginx-lua/目录,你可以替换成自己实际使用的路径:
kubectl patch deployment ingress-nginx-controller -n ingress-nginx --type='json' -p='[ { "op": "add", "path": "/spec/template/spec/volumes/-", "value": { "name": "lua-log-storage", "hostPath": { "path": "/var/log/nginx-lua", "type": "DirectoryOrCreate" } } }, { "op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": { "mountPath": "/var/log/lua", "name": "lua-log-storage" } } ]'
- 补丁提交后Deployment会自动触发滚动更新,等待新的控制器Pod启动完成,Pod内写入
/var/log/lua/的日志就会落到Minikube节点的对应目录下。 - 要在物理宿主机直接访问日志,执行Minikube自带的目录挂载命令,将Minikube节点内的日志目录映射到物理机本地路径即可:
minikube mount /var/log/nginx-lua/:/本地物理机存放日志的绝对路径
该命令需要保持终端进程运行,若要后台常驻可以将其配置为系统服务,关闭后映射会自动断开。
方案二:修改addon本地模板(永久生效,长期使用推荐)
如果不想每次重启ingress addon都重新打补丁,可以直接修改Minikube节点内存储的addon静态模板:
- 执行
minikube ssh进入Minikube虚拟机节点,ingress addon的部署YAML默认存放在/etc/kubernetes/addons/ingress-nginx/目录下。 - 找到控制器对应的Deployment配置段,手动添加上述hostPath卷和对应挂载规则,保存文件后重启addon生效:
minikube addons disable ingress minikube addons enable ingress
- 该修改会持久化在Minikube节点内,除非执行
minikube delete重置集群,否则后续addon重启、集群重启配置都不会丢失。
配置注意点
- 提前给映射的目录添加写入权限,Nginx Ingress的worker进程默认以低权限用户运行,直接挂载hostPath目录可能出现权限不足无法写入日志的问题,可以提前在Minikube节点内创建目录后执行
chmod 777 /var/log/nginx-lua放行权限,或者在Deployment中添加initContainer提前修改目录属主。 - 不要直接修改运行中的Pod配置,Pod重建后手动修改的配置会完全丢失,所有配置变更必须在Deployment层级操作。
内容的提问来源于stack exchange,提问作者Manish Ballav
相关产品推荐
相关产品推荐

