我在 Azure 上运行 Kubernetes 1.8.4 集群(装有 acs-engine v0.10)。
我需要运行具有数据持久性的 Redis pod,因此我使用带有azurefile
storageClass 的 persistentVolume / persistentVolumeClaim,以便 Redis 可以保存到该卷。
问题在于 Redis 容器以 redis:redis 用户身份运行,并且 Kubernetes 以 root:root 所有权和 0700 访问模式挂载卷。
=> 因此 Redis 无法写入该卷并因此死亡。
通常我会用 mountOptions 来解决这个问题,但我担心 AzureFiles 不支持这个选项Kubernetes 文档:
注意:并非所有持久卷类型都支持挂载选项。
有没有人曾经在非 root 访问权限下成功将 AzureFiles 卷挂载到 Kubernetes pod 中?如果有,我会爱知道如何:-)
短暂性失眠!
答案1
在回顾了这一天赐之物后CloudBees 博客文章,事实证明 mountOptions是支持 azurefile,只是我需要创建一个专用的 StorageClass 并通过 PersistentVolumeClaim 使用它。
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: redis-sc
annotations:
labels:
kubernetes.io/cluster-service: 'true'
provisioner: kubernetes.io/azure-file
parameters:
reclaimPolicy: 'Delete'
mountOptions:
- "uid=999,gid=999"
答案2
Azure 提供的另一种解决方案是将 azurefile 作为持久卷声明挂载。 https://docs.microsoft.com/en-us/azure/aks/azure-files-volume#mount-file-share-as-an-persistent-volume
uid, gid
以及文件系统权限都可以传递(0777)。
亲自尝试过并且测试过!