Я настроил небольшой кластер Kubernetes для тестирования, а в качестве хранилища использую glusterfs. Нет CSI, я пока просто создаю тома вручную.
Теперь я добавил в кластер узел Windows. Пока он работает нормально, но я не могу установить какие-либо тома в контейнер.
Я сделал очень простое определение модуля:
---
apiVersion: v1
kind: Pod
metadata:
name: windows-test
labels:
name: windows-test
spec:
containers:
- name: sample
image: mcr.microsoft.com/windows/servercore:ltsc2019
resources:
limits:
cpu: "1.0"
memory: "1Gi"
command:
- cmd
- "/c"
- "dir"
- "/s"
- 'c:\'
volumeMounts:
- mountPath: "foo"
name: testvol
nodeSelector:
"kubernetes.io/os": windows
volumes:
- name: testvol
glusterfs:
path: wintest
endpoints: glusterfs-cluster
readOnly: false
Когда я запускаю это, модуль никогда не запускается, и когда я его описываю, я получаю:
Warning FailedMount <invalid> kubelet, node09 MountVolume.SetUp failed for volume "testvol" : mount failed: only cifs mount is supported now, fstype: "glusterfs", mounting source ("10.93.111.35:wintest"), target ("c:\\var\\lib\\kubelet\\pods\\6d207138-09fb-4e1f-86e7-6a71cef5ce7e\\volumes\\kubernetes.io~glusterfs\\testvol"), with options (["auto_unmount" "backup-volfile-servers=10.93.111.31:10.93.111.32:10.93.111.33:10.93.111.34:10.93.111.35:10.93.111.36:10.93.111.37:10.93.111.38" "log-file=\\var\\lib\\kubelet\\plugins\\kubernetes.io\\glusterfs\\testvol\\windows-test-glusterfs.log" "log-level=ERROR"]), the following error information was pulled from the glusterfs log to help diagnose this issue: could not open log file for pod windows-test
Кажется, что поды Windows не поддерживают glusterfs, а только cifs. Может ли кто-нибудь подсказать мне, как смонтировать том через cifs? Единственная информация, которую я нашел в документации, касалась azure-file
хранилище, но я не мог понять, может ли он также монтировать общие ресурсы CIFS локально.
Я думаю, ты мог бы начать с этот.
Установка
Плагин flexvolume представляет собой скрипт с одной оболочкой с именем cifs. Этот сценарий оболочки должен быть доступен на мастере Kubernetes и на каждом из узлов Kubernetes. По умолчанию Kubernetes ищет сторонние плагины томов в / usr / libexec / kubernetes / kubelet-plugins / volume / exec /. Каталог плагинов можно настроить с помощью параметра kubelet --volume-plugin-dir, запустите ps aux | grep kubelet, чтобы узнать расположение каталога плагина в вашей системе (см. №1). Скрипт cifs должен находиться в подкаталоге с именем fstab ~ cifs /. Имя каталога fstab ~ cifs / будет сопоставлено с именем драйвера Flexvolume fstab / cifs.
На мастере Kubernetes и на каждом узле Kubernetes выполните следующие команды:
VOLUME_PLUGIN_DIR="/usr/libexec/kubernetes/kubelet-plugins/volume/exec"
mkdir -p "$VOLUME_PLUGIN_DIR/fstab~cifs"
cd "$VOLUME_PLUGIN_DIR/fstab~cifs"
curl -L -O https://raw.githubusercontent.com/fstab/cifs/master/cifs
chmod 755 cifs
Скрипту cifs необходимо, чтобы на каждой хост-системе было доступно несколько исполняемых файлов:
mount.cifs, в Ubuntu он находится в cifs-utils пакет. jq, в Ubuntu это находится в jq пакет. точка монтирования, в Ubuntu это утилита-Linux пакет. base64, в Ubuntu это coreutils пакет. Чтобы проверить, прошла ли установка успешно, выполните следующую команду:
VOLUME_PLUGIN_DIR="/usr/libexec/kubernetes/kubelet-plugins/volume/exec"
$VOLUME_PLUGIN_DIR/fstab~cifs/cifs init
Он должен вывести строку JSON, содержащую «status»: «Success». Эта команда также запускается самим Kubernetes, когда плагин cifs обнаруживается в файловой системе.
Бег
Плагин берет имя пользователя и пароль CIFS из Kubernetes Secret. Чтобы создать секрет, вам сначала нужно преобразовать ваше имя пользователя и пароль в кодировку base64:
echo -n username | base64
echo -n password | base64
Затем создайте файл secret.yml и используйте вывод вышеуказанных команд в качестве имени пользователя и пароля:
apiVersion: v1
kind: Secret
metadata:
name: cifs-secret
namespace: default
type: fstab/cifs
data:
username: 'ZXhhbXBsZQ=='
password: 'bXktc2VjcmV0LXBhc3N3b3Jk'
Примените секрет:
kubectl apply -f secret.yml
Вы можете проверить, успешно ли был установлен секрет, используя kubectl describe secret cifs-secret.
Затем создайте файл pod.yml с тестовым модулем (замените // server / share на сетевой путь вашего общего ресурса CIFS):
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "fstab/cifs"
fsType: "cifs"
secretRef:
name: "cifs-secret"
options:
networkPath: "//server/share"
mountOptions: "dir_mode=0755,file_mode=0644,noperm"
Запустите модуль:
kubectl apply -f pod.yml
Вы можете убедиться, что том был успешно смонтирован, используя kubectl describe pod busybox.
Дополнительно есть еще один руководство по github с помощью Kubernetes CIFS Volume Driver.
Надеюсь, вы найдете это полезным.