使用带有kubernetes和azure容器服务(aks)的azure文件存储 - 权限被拒绝

问题描述 投票:3回答:2

我有一个天蓝色的容器服务(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
postgresql azure kubernetes azure-storage azure-container-service
2个回答
1
投票

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

我们使用AzureDisk而不是使用AzureFileVolume。所以我们在Kubernetes所需要的是以下......

存储类

enter image description here

使用您的Azure帐户名称

持续量索赔

Persistent Volume Claim

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

1
投票

这不起作用你需要使用azure磁盘,因为postgres使用azure文件不支持的硬链接https://github.com/docker-library/postgres/issues/548

© www.soinside.com 2019 - 2024. All rights reserved.