当我们在开发或自己测试环境需要把 Deployment 或 pod 挂载指定 Hosts 主机时可能会遇到权限拒绝的问题。解决这个问题其实只要把容器内外用户保持一致即可。
下面我以 Grafana 容器为例
首先在本地宿主机创建指定挂载目录
mkdir -p /data/k8smount/grafana
修改 deployment 文件里面的挂载参数
spec:
volumes:
- name: grafana-storage
hostPath:
path: /data/k8smount/grafana
type: DirectoryOrCreate
仅仅这样修改 pod 启动后会显示没有权限创建 plugins 插件目录
首先查看 grafana 容器内用户 id 信息
[root@ddn bin]# docker run -it --rm --entrypoint /bin/sh grafana/grafana:8.5.0
/usr/share/grafana $ id
uid=472(grafana) gid=0(root) groups=0(root)
可以看到容器内 uid 为 472,紧接着我们在宿主机上面创建 grafana 用户并指定 uid 为 472
useradd -u 472 grafana
chown -R grafana:grafana /data/k8smount/grafana/
仅仅这样做还是不够,调整 deployment 中 uid 信息为 472 再次启动 pod 就不会存在权限问题了
imagePullPolicy: IfNotPresent
securityContext:
runAsUser: 472