flexvolume_driver mount # отвечает за присоединение тома к pod'у
# Формат возвращаемого сообщения:
{
"status": "Success"/"Failure"/"Not supported",
"message": "По какой причине был возвращен именно такой статус",
}
flexvolume_driver unmount # отвечает за отсоединение тома от pod'а
# Формат возвращаемого сообщения:
{
"status": "Success"/"Failure"/"Not supported",
"message": "По какой причине был возвращен именно такой статус",
}
flexvolume_driver init # отвечает за инициализацию плагина
# Формат возвращаемого сообщения:
{
"status": "Success"/"Failure"/"Not supported",
"message": "По какой причине был возвращен именно такой статус",
// Определяет, использует ли драйвер методы attach/deatach
"capabilities":{"attach": True/False}
}
Истифодаи усулҳо attach и detach сенарияеро муайян мекунад, ки кубелет дар оянда ҳангоми занг задан ба ронанда амал мекунад. Усулҳои махсус низ мавҷуданд expandvolume и expandfs, ки барои ба таври динамикӣ тағир додани ҳаҷми ҳаҷм масъуланд.
Ҳамчун мисоли тағйироте, ки усул илова мекунад expandvolume, ва бо он қобилияти тағир додани андозаи ҳаҷмҳо дар вақти воқеӣ, шумо метавонед бо худ шинос шавед дархости ҷалби мо дар оператори Rook Ceph.
Ва ин аст мисоли татбиқи драйвери Flexvolume барои кор бо NFS:
usage() {
err "Invalid usage. Usage: "
err "t$0 init"
err "t$0 mount <mount dir> <json params>"
err "t$0 unmount <mount dir>"
exit 1
}
err() {
echo -ne $* 1>&2
}
log() {
echo -ne $* >&1
}
ismounted() {
MOUNT=`findmnt -n ${MNTPATH} 2>/dev/null | cut -d' ' -f1`
if [ "${MOUNT}" == "${MNTPATH}" ]; then
echo "1"
else
echo "0"
fi
}
domount() {
MNTPATH=$1
NFS_SERVER=$(echo $2 | jq -r '.server')
SHARE=$(echo $2 | jq -r '.share')
if [ $(ismounted) -eq 1 ] ; then
log '{"status": "Success"}'
exit 0
fi
mkdir -p ${MNTPATH} &> /dev/null
mount -t nfs ${NFS_SERVER}:/${SHARE} ${MNTPATH} &> /dev/null
if [ $? -ne 0 ]; then
err "{ "status": "Failure", "message": "Failed to mount ${NFS_SERVER}:${SHARE} at ${MNTPATH}"}"
exit 1
fi
log '{"status": "Success"}'
exit 0
}
unmount() {
MNTPATH=$1
if [ $(ismounted) -eq 0 ] ; then
log '{"status": "Success"}'
exit 0
fi
umount ${MNTPATH} &> /dev/null
if [ $? -ne 0 ]; then
err "{ "status": "Failed", "message": "Failed to unmount volume at ${MNTPATH}"}"
exit 1
fi
log '{"status": "Success"}'
exit 0
}
op=$1
if [ "$op" = "init" ]; then
log '{"status": "Success", "capabilities": {"attach": false}}'
exit 0
fi
if [ $# -lt 2 ]; then
usage
fi
shift
case "$op" in
mount)
domount $*
;;
unmount)
unmount $*
;;
*)
log '{"status": "Not supported"}'
exit 0
esac
exit 1
Пас, пас аз омода кардани файли иҷрошавандаи воқеӣ, шумо бояд драйверро ба кластери Kubernetes бор кунед. Драйвер бояд дар ҳар як гиреҳи кластер мувофиқи роҳи пешакӣ муайяншуда ҷойгир бошад. Бо нобаёнӣ он интихоб карда шуд:
Бор кардани драйвери Flexvolume ба гиреҳҳои кластерӣ як кори ғайриоддӣ буд. Пас аз анҷом додани амалиёт як маротиба, бо вазъияте дучор шудан осон аст, ки гиреҳҳои нав дар кластер пайдо мешаванд: аз ҳисоби илова кардани гиреҳи нав, миқёси уфуқии автоматӣ ё бадтараш - иваз кардани гиреҳ аз сабаби корношоямӣ. Дар ин ҳолат, кор бо анбор дар ин гиреҳҳо бояд анҷом дода шавад имконнопазир аст, то он даме, ки шумо ба таври дастӣ драйвери Flexvolume-ро ба онҳо илова кунед.
Ҳалли ин мушкилот яке аз ибтидоии Кубернетес буд - DaemonSet. Вақте ки гиреҳи нав дар кластер пайдо мешавад, он ба таври худкор як pod аз DaemonSet-и моро дар бар мегирад, ки ба он ҳаҷми маҳаллӣ дар роҳ барои дарёфти драйверҳои Flexvolume замима карда мешавад. Пас аз эҷоди бомуваффақият, pod файлҳои заруриро барои кор кардани драйвер ба диск нусхабардорӣ мекунад.
... ва намунаи скрипти Bash барои ҷойгиркунии драйвери Flexvolume:
#!/bin/sh
set -o errexit
set -o pipefail
VENDOR=k8s.io
DRIVER=nfs
driver_dir=$VENDOR${VENDOR:+"~"}${DRIVER}
if [ ! -d "/flexmnt/$driver_dir" ]; then
mkdir "/flexmnt/$driver_dir"
fi
cp "/$DRIVER" "/flexmnt/$driver_dir/.$DRIVER"
mv -f "/flexmnt/$driver_dir/.$DRIVER" "/flexmnt/$driver_dir/$DRIVER"
while : ; do
sleep 3600
done
Муҳим аст, ки фаромӯш накунед, ки амалиёти нусхабардорӣ атом нест. Эҳтимоли зиёд вуҷуд дорад, ки kubelet пеш аз ба итмом расидани раванди таъминоти он драйверро истифода мебарад ва боиси садамаи система мегардад. Муносибати дуруст ин аст, ки аввал файлҳои драйверро бо номи дигар нусхабардорӣ кунед ва сипас амалиёти тағир додани номи атомиро истифода баред.
Нод — барои насб кардани нигоҳдории доимӣ ба гиреҳҳои кластер масъул аст. Он инчунин ҳамчун сервери gRPC амалӣ карда мешавад, аммо он ибтидоиро истифода мебарад DaemonSet.
Чӣ тавр плагини CSI дар Kubernetes кор мекунад
Шумо метавонед дар бораи баъзе ҷузъиёти дигари кори CSI маълумот гиред, масалан, аз мақолаи "Фаҳмидани C.S.I.», тарҷумаи он як сол пеш нашр карда будем.
Мо худамон аллакай таҷрибаи истифодаи ceph-csi, vsphere-csi дорем ва омодаем ба ин рӯйхат илова кунем! То ба ҳол, CSI вазифаҳои ба он гузошташударо бо як таркиш иҷро мекунад, аммо мо интизор мешавем ва мебинем.