Я запускаю kubernetes на Ubuntu 18.04.1, а некоторые из моих модулей запускаю с монтированием через ISCSI. Недавно я заметил (возможно, из-за неправильного отключения тома 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, только "fs: ext4" в параметрах тома iscsi.
внутри контейнера / контейнера я вижу это
/dev/sdi on /config type ext4 (rw,relatime,stripe=256,data=ordered)
Есть ли способ явно заставить кубернеты монтировать ext4 fs, используя data = journaled вместо order? 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 и что он должен быть предоставлен как PV, аналогичный монтированию NFS. Я попробую.
Я не тестировал, но на основе Примеры 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