我正在尝试在Minikube上安装PostgreSQL,并且数据路径是我在Minikube上安装的主机文件夹(我想将数据保留在主机上)。
在创建kubernetes对象之后(如下),我得到权限错误,与此处How to solve permission trouble when running Postgresql from minikube?相同,尽管提到的问题未能解决问题。它建议改为挂载minikube的VM目录。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
app: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: storage
env:
- name: POSTGRES_PASSWORD
value: user
- name: POSTGRES_USER
value: pass
- name: POSTGRES_DB
value: k8s
volumes:
- name: storage
hostPath:
path: /data/postgres
除了在Postgres上构建自己的图像并以某种方式使用权限之外,还有其他方法可以做到吗?我在使用Minikube 0.30.0的macOS上,并且在Minikube的Virtualbox和hyperkit驱动程序中都遇到了这种情况。
答案 0 :(得分:0)
从此处查看以下几行:hostPath
在基础主机上创建的文件或目录只能由root写入。您要么需要以root用户身份在特权容器中运行进程,要么需要修改主机上的文件许可权才能写入
hostPath
卷
因此,您要么必须以root用户身份运行,要么必须更改/data/postgres
目录的文件许可权。
但是,您可以以root用户身份运行Postgres容器,而无需重建docker image。
您必须在容器中添加以下内容:
securityContext:
runAsUser: 0
您的Yaml应该如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
app: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: storage
env:
- name: POSTGRES_PASSWORD
value: user
- name: POSTGRES_USER
value: pass
- name: POSTGRES_DB
value: k8s
securityContext:
runAsUser: 0
volumes:
- name: storage
hostPath:
path: /data/postgres