Postgresql 将azure文件存储与kubernetes和azure容器服务(aks)一起使用-权限被拒绝

Postgresql 将azure文件存储与kubernetes和azure容器服务(aks)一起使用-权限被拒绝,postgresql,azure,kubernetes,azure-storage,azure-container-service,Postgresql,Azure,Kubernetes,Azure Storage,Azure Container Service,我有一个azure容器服务(aks)集群。它已迁移到1.8.1版。我正在尝试部署postgres数据库,并使用AzureFileVolume将postgres数据持久化 默认情况下,如果我部署postgres数据库而不装入卷,则一切正常,即创建pod并初始化数据库 当我尝试使用下面的yaml装载卷时,我得到initdb:cannotaccessdirectory”/var/lib/postgresql/data:权限被拒绝 我尝试了各种各样的技巧,如:为pod设置安全上下文或在initConta

我有一个azure容器服务(aks)集群。它已迁移到1.8.1版。我正在尝试部署postgres数据库,并使用
AzureFileVolume
将postgres数据持久化

默认情况下,如果我部署postgres数据库而不装入卷,则一切正常,即创建pod并初始化数据库

当我尝试使用下面的yaml装载卷时,我得到initdb:cannotaccessdirectory”/var/lib/postgresql/data:权限被拒绝

我尝试了各种各样的技巧,如:为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

我们遇到了同样的问题,并找到了以下解决方案:

我们没有使用AzureFileVolume,而是使用了AzureDisk。所以我们在库伯内特斯需要的是

存储类

使用您的Azure帐户名

持续性批量索赔

PostgreSQL部署 在Kubernetes部署中包括PVC

- name: postgres-db
  persistentVolumeClaim:
      claimName: pvc-postgresdb
此外,我们需要将PGDATA变量指向挂载目录的子目录。因为Azure正在基本目录中创建AzureDisk类型的一些问题

#... evn definitions... 
- name: PGDATA
  value: /var/lib/postgresql/data/pgdata
volumeMounts:
- mountPath: /var/lib/postgresql/data/
  name: postgres-db

如果您需要使用azure磁盘,这将不起作用,因为postgres使用azure文件不支持的硬链接

您指定了
runAsUser:999
,但请记住,所有Docker卷都将被删除。这可能会导致权限问题。此外,我还体验到kubernetes有时会重新装载卷,因此初始的
chmod
可能不够。是的,我从不同的地方听说应该使用AzureBlob/磁盘而不是文件存储。我将在未来几天再试一次。感谢您在twitter(@lennartblom)上给我发消息,了解详细信息(YAMLs、Azure设置)。我们在过去的5天里一直在想这个问题。。。我们很乐意帮忙@LennartBlom你在运行多个postgres副本吗?