在AKS中无法获取Postgres权限或PVC工作

109次阅读
没有评论

问题描述

在使用AKS时遇到了问题,他无法在AKS中获取到Postgres的权限或者使PVC工作。他已经按照文档中的步骤进行了操作,但仍然无法解决问题。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据最佳回答,以下设置对我来说是有效的。当在volumeMounts中使用subPath时,权限问题会自动解决,因为用户postgres拥有与subPath对应的文件夹。
以下是一个示例配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  ...
  template:
    ...
    spec:
      ...
      containers:
        - ...
          volumeMounts:
            # 需要一个subpath,因为postgres需要一个空文件夹(挂载的文件夹`/var/lib/postgresql/data`有一个`lost+found`目录)
            # 参考:https://stackoverflow.com/questions/51168558/how-to-mount-a-postgresql-volume-using-aws-ebs-in-kubernete
            # 这与下面的环境变量PGDATA = /var/lib/postgresql/data/pgdata一起使用
            # 这个文件夹的所有者和组是70:70(postgres:postgres),由docker镜像中的这一步完成:
            # https://github.com/docker-library/postgres/blob/master/Dockerfile-alpine.template#L146
            - mountPath: /var/lib/postgresql/data
              subPath: pgdata
              name: my-postgres-pv
          ...
          env:
            # 需要定义PGDATA环境变量,因为不使用默认的/var/lib/postgresql/data,而是其下的一个子路径
            - name: PGDATA
              value: /var/lib/postgresql/data/pgdata
          ...

方案2

请注意,这是一种可能的解决方案,但可能会增加安全风险。请在使用之前评估风险并做好备份。
根据用户的评论,您可以尝试更改POD运行的用户。例如,尝试使用与数据库文件所有者匹配的特权用户。
以下是一个示例配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  ...
  template:
    ...
    spec:
      securityContext:
        runAsUser: 70  # 更改为与数据库文件所有者匹配的用户ID
      ...
      containers:
        - ...
          volumeMounts:
            ...
          ...
          env:
            ...
          ...

以上是两种可能的解决方案,您可以根据您的需求选择其中一种。希望能帮助到您解决问题。

正文完