我有一个由两个 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对于官方postgres
Docker 镜像明确设置了 GID 999。