我在 Ubuntu 18.04.1 上运行 kubernetes,通过 ISCSI 运行一些带有挂载的 pod。我最近注意到(可能是由于不正确卸载 iscsi 卷或其他原因)至少一个 iscsi 扩展(ext4 fs)有时损坏。为了尝试修复此问题,我想将挂载更改为日志式而不是有序式。我在节点的系统日志中看到以下内容:
Dec 29 11:45:29 mira-b systemd[1]: Started Kubernetes transient mount for /var/lib/kubelet/plugins/kubernetes.io/iscsi/iface-default/192.168.xx.yy:3260-iqn.2005-10.home.mediastore:container-lun-0.
Dec 29 11:45:29 mira-b kubelet[27086]: I1229 11:45:29.988889 27086 operation_generator.go:506] MountVolume.WaitForAttach succeeded for volume "container-data-folder" (UniqueName: "kubernetes.io/iscsi/192.168.xx.yy:iqn.2005-10.home.mediastore:container:0") pod "container-65d6d65b75-z5l94" (UID: "41ef97fd-0ba2-11e9-ba38-0cc47abd5a26") DevicePath "/dev/disk/by-path/ip-192.168.xx.yy:3260-iscsi-iqn.2005-10.home.mediastore:container-lun-0"
Dec 29 11:45:29 mira-b kubelet[27086]: I1229 11:45:29.988951 27086 operation_generator.go:527] MountVolume.MountDevice succeeded for volume "container-data-folder" (UniqueName: "kubernetes.io/iscsi/192.168.xx.yy:iqn.2005-10.home.mediastore:container:0") pod "container-65d6d65b75-z5l94" (UID: "41ef97fd-0ba2-11e9-ba38-0cc47abd5a26") device mount path "/var/lib/kubelet/plugins/kubernetes.io/iscsi/iface-default/192.168.xx.yy:3260-iqn.2005-10.home.mediastore:container-lun-0"
Dec 29 11:45:29 mira-b kernel: [ 389.683464] EXT4-fs (sdi): mounted filesystem with ordered data mode. Opts: (null)
最后一行告诉我 ext4 fs 正在按顺序挂载,但在 k8s 文档中,我没有看到任何方法指定如何挂载 FS,只有 iscsi 卷选项中的“fs:ext4”。
在容器/容器内部,我看到了这个
/dev/sdi on /config type ext4 (rw,relatime,stripe=256,data=ordered)
有没有办法明确让 kubernetes 使用 data=journaled 而不是 ordered 来挂载 ext4 fs?FWIW,我的 ISCSI 后备存储是 ZFS,我已经为该范围所在的数据集启用了同步写入,但为了排除其他任何可能,我希望容器也挂载日志,以尝试确保在关闭电源/卸载等操作之前完成所有写入。
PS:Kubernetes 版本 1.13.0
更新:忘记了我的 yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: pod
spec:
replicas: 1
template:
metadata:
labels:
app: pod
spec:
hostNetwork: true
volumes:
- name: pod-data-folder
iscsi:
targetPortal: 192.168.xx.yy
iqn: iqn.2005-10.home.mediastore:pod
lun: 0
fsType: ext4
查看@VAS的回答,似乎在内联指定iscsi卷时挂载选项无效,并且需要将其作为类似于NFS挂载的PV提供。我会尝试一下。
答案1
我还没有测试过,但基于ISCSI 示例并在 PR 中编写代码实现对 PV 中挂载选项的支持 #41906我猜测挂载选项只是添加到插件挂载命令中,所以 YAML 应该是这样的:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: iscsi
provisioner: kubernetes.io/iscsi
mountOptions:
- rw
- relatime
- stripe=256
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: iscsi
mountOptions:
- data=journaled
iscsi:
targetPortal: 10.16.1.10
iqn: example.server:storage.target00
lun: 0
fsType: 'ext4'
readOnly: false