[英]How to make XFS quotas work in Kubernetes volumes on DigitalOcean?
我需要幫助使 XFS 配額在 DigitalOcean 上的 Kube.netes 中工作。
我的問題本質上是xfs_quota
工具似乎只有當一個人也可以訪問磁盤設備時才工作,而不僅僅是掛載的卷。 但是,無論我嘗試什么,我似乎都無法同時訪問設備和安裝座。
我嘗試了卷掛載和原始塊卷。
這是我的存儲 class:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: block-storage-retain-xfs-prjquota
provisioner: dobs.csi.digitalocean.com
parameters:
fsType: xfs
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
mountOptions:
- prjquota
然后我聲明一個新卷並將其添加到 pod 中,如下所示:
volumeClaimTemplates:
- metadata:
name: my-storage
namespace: my-namespace
spec:
accessModes:
- ReadWriteOnce
storageClassName: block-storage-retain-xfs-prjquota
resources:
requests:
storage: 1Gi
並安裝它:
volumeMounts:
- name: my-storage
mountPath: "/var/www"
在 pod 中,一切都正確安裝,我可以訪問該卷(我可以在其中創建內容)並且安裝標志設置正確:
$ mount | grep -i www
/dev/disk/by-id/scsi-0DO_Volume_pvc-650ccba6-3177-45b5-9ffb-0ac2a931fddc on /var/www type xfs (rw,relatime,attr2,inode64,prjquota)
但是,磁盤設備在 pod 中不可用:
$ ls -la /dev/disk/by-id/scsi-0DO_Volume_pvc-650ccba6-3177-45b5-9ffb-0ac2a931fddc
ls: cannot access '/dev/disk/by-id/scsi-0DO_Volume_pvc-650ccba6-3177-45b5-9ffb-0ac2a931fddc': No such file or directory
(實際上整個/dev/disk/
目錄都不可用)
根據我的調查,無法訪問設備是導致 XFS 工具失敗的原因:
$ xfs_quota -x -c 'report -h' /var/www
xfs_quota: cannot setup path for mount /var/www: No such device or address
我也嘗試改用原始塊卷:
volumeClaimTemplates:
- metadata:
name: my-storage
namespace: my-namespace
spec:
accessModes:
- ReadWriteOnce
volumeMode: Block
storageClassName: block-storage-retain-xfs-prjquota
resources:
requests:
storage: 1Gi
並將其添加為:
volumeDevices:
- name: my-storage
devicePath: /dev/my-storage
這給了我設備,但由於某種原因我無法格式化/安裝它(實際上既不是 XFS 也不是 ext4):
$ mkfs.xfs /dev/my-storage
mkfs.xfs: error - cannot set blocksize 512 on block device /dev/my-storage: Permission denied
$ mkfs.ext4 /dev/my-storage
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 18f07181-737c-4b68-a5fe-ccd7f2c50ff8
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
$ mount /dev/my-storage /var/www
mount: /var/www: cannot mount /dev/my-storage read-only.
使用SYS_ADMIN
Linux 功能,我實際上可以格式化它,但我仍然無法安裝它:
$ mkfs.xfs -f /dev/my-storage
meta-data=/dev/my-storage isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
$ mount /dev/my-storage /var/www
mount: /var/www: cannot mount /dev/my-storage read-only.
(為什么磁盤設備是只讀的?)
好的,所以我嘗試創建一個分區並對其進行格式化。 分區創建成功,但我無權訪問分區設備:
$ fdisk -l /dev/my-storage
Disk /dev/my-storage: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: Volume
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb4a24142
Device Boot Start End Sectors Size Id Type
/dev/my-storage1 2048 2097151 2095104 1023M 83 Linux
但是, /dev/my-storage1
不存在:
$ ls -la /dev/my-storage*
brw-rw---- 1 root disk 8, 48 Oct 25 14:42 /dev/my-storage
我嘗試以privileged
方式運行容器,這讓我可以訪問/dev
中的更多設備,但后來我根本看不到我的原始塊卷設備。
如我所見,其中任何一個都適合我:
xfs_quota
工具不需要底層設備。我相信我在幾個月前使用帶分區的原始塊卷使其工作,但是我忘記了 DigitalOcean 上的更改方式或某些更改,我似乎無法再創建和訪問分區。
非常感謝任何幫助,謝謝!
來自 DigitalOcean 的 Managed Kube.netes (DOKS) 團隊的 Timo。
您缺少的是/dev
目錄的主機系統掛載。 如果你同時添加
volumes:
- name: device-dir
hostPath:
path: /dev
和
volumeMounts:
- name: device-dir
mountPath: /dev
在正確的地方顯示清單,事情應該按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.