我有一个天蓝色的容器服务(aks)集群。它已迁移到1.8.1版。我正在尝试部署postgres数据库并使用AzureFileVolume
来保存postgres数据。
默认情况下,如果我在没有安装卷的情况下部署postgres数据库,则一切都正常工作,即创建pod并初始化数据库。
当我尝试使用下面的yaml挂载卷时,我得到initdb:无法访问目录“/ var / lib / postgresql / data”:权限被拒绝。
我按照这个长github thread的建议尝试了各种黑客攻击,例如:设置pod的安全上下文或在initContainers中运行chown命令。结果是相同的 - 许可被拒绝。
任何想法,将不胜感激。
apiVersion: v1
kind: Service
metadata:
labels:
app: myapp
component: test-db
name: test-db
spec:
ports:
- port: 5432
selector:
app: myapp
component: test-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: test-db
spec:
template:
metadata:
labels:
app: myapp
component: test-db
spec:
securityContext:
fsGroup: 999
runAsUser: 999
containers:
- name: test-db
image: postgres:latest
securityContext:
allowPrivilegeEscalation: false
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: myappdb
- name: POSTGRES_USER
value: myappdbuser
- name: POSTGRES_PASSWORD
value: qwerty1234
volumeMounts:
- name: azure
mountPath: /var/lib/postgresql/data
volumes:
- name: azure
azureFile:
secretName: azure-secret
shareName: acishare
readOnly: false
我们遇到了同样的问题并找出了以下解决方案:
我们使用AzureDisk而不是使用AzureFileVolume。所以我们在Kubernetes所需要的是以下......
存储类
使用您的Azure帐户名称
持续量索赔
PostgreSQL部署在Kubernetes部署中包含PVC
- name: postgres-db
persistentVolumeClaim:
claimName: pvc-postgresdb
另外,我们需要将PGDATA var指向已安装目录的子目录。因为Azure在基本目录中创建了AzureDisk类型的一些问题。
#... evn definitions...
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- mountPath: /var/lib/postgresql/data/
name: postgres-db
这不起作用你需要使用azure磁盘,因为postgres使用azure文件不支持的硬链接https://github.com/docker-library/postgres/issues/548