我有一个在两个 Kubernetes 服务之间共享的 PD。一旦服务在当前容器内运行服务器应用程序root
(我可能会将其更改为,比如说,user1
),其他服务运行 Docker 的Postgres 映像为postgres
. 我想确保root
(最终user1
)和postgres
对 PD 挂载点下方的某些目录具有读写访问权限,例如postgres
应该“拥有”该目录/mnt/disk/my-pd/pgdata
。
这可以在 Kubernetes 规范级别进行配置吗?如果不是,并且如果我必须在“外部”手动配置它,我是否可以假设 UID 和 GID 在整个集群中如何相互关联,即 Kubernetes(或标准 Docker 映像,例如postgres
)是否包含某种目录服务将保持UID 例如postgres
在整个集群中同步?
这是我的规范中与 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
该解决方案包括指定引用 GID 999(附加到原始规范)的安全上下文:
官方Docker 镜像的Dockerfile
postgres
明确设置了 GID 999。