如何让 kubernetes 以日志模式(而不是有序模式)通过 iscsi 挂载 ext4 卷

如何让 kubernetes 以日志模式(而不是有序模式)通过 iscsi 挂载 ext4 卷

我在 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

相关内容