控制多个 Kubernetes 服务之间共享的 PD 的访问权限

控制多个 Kubernetes 服务之间共享的 PD 的访问权限

我有一个由两个 Kubernetes 服务共享的 PD。一旦服务在容器内运行服务器应用程序(当前为)root(我可能会将其更改为,例如user1),另一个服务就会运行 Docker 的Postgres 映像作为postgres。我想确保root(最终user1)和都postgres对 PD 挂载点下的某些目录具有读写访问权限,例如postgres应该“拥有”目录/mnt/disk/my-pd/pgdata

可以在 Kubernetes 规范级别上配置吗?如果不能,并且我必须在“外部”手动配置它,我是否可以假设 UID 和 GID 在整个集群中如何相互关联,即 Kubernetes(或标准 Docker 镜像,例如postgres)是否包含某种目录服务,以使 UIDpostgres在整个集群中保持同步?

以下是我的规范中与 Postgres 相关的部分(当前形式):

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: postgres-deployment
spec:
  template:
    metadata:
      labels:
        app: postgres-app
    spec:
      containers:
      - name: postgres-container
        image: postgres
        env:
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: postgres-password.txt
        - name: PGDATA
          value: /mnt/disk/my-pd/pgdata
        - name: POSTGRES_DB
          value: mydb
        ports:
        - protocol: TCP
          containerPort: 5432
        volumeMounts:
        - name: my-volume
          mountPath: /mnt/disk/my-pd
      volumes:
      - name: my-volume
        gcePersistentDisk:
          pdName: my-pd
          fsType: ext4

答案1

解决方案包括指定引用 GID 999(附加到原始规范)的安全上下文:

      securityContext:
        fsGroup: 999

Dockerfile对于官方postgresDocker 镜像明确设置了 GID 999。

相关内容