ProHoster > Blog > Pulega > Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI
Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI
I tua a o iai pea Kubernetes v1.0.0, sa i ai le tele o plugins. Sa mana'omia e fa'afeso'ota'i faiga i Kubernetes mo le teuina o fa'amaumauga tumau (tumau). E laʻititi la latou numera, ma o loʻo i ai muamua i latou na tuʻuina atu mea e teu ai e pei o GCE PD, Ceph, AWS EBS ma isi.
O plugini na tuʻuina atu faʻatasi ma Kubernetes, o le mafuaʻaga lea na maua ai o latou igoa - in-tree. Ae ui i lea, mo le toʻatele, o le seti o loʻo i ai nei plugins na foliga mai e le lava. Na fa'aopoopoina e le au tufuga ni fa'apipi'i faigofie i le Kubernetes core e fa'aaoga ai patches, mulimuli ane na latou fa'apotopotoina a latou lava Kubernetes ma fa'apipi'i i luga o latou 'au'aunaga. Ae i le aluga o taimi, na iloa e le au atinaʻe Kubernetes lena mea iʻa e le mafai ona foia le faafitauli. Manaomia e tagata tootoo. Ma i le tatalaina o Kubernetes v1.2.0 na aliali mai ...
Flexvolume plugin: la'ititi la'au fagota
Na faia e le au atinaʻe Kubernetes le FlexVolume plugin, o se faʻavae talafeagai o fesuiaiga ma metotia mo le galulue ai ma avetaavale Flexvolume na faʻatinoina e le au atinaʻe lona tolu.
Se'i o tatou tu ma va'ai toto'a po'o le a le ta'avale FlexVolume. E mautinoa lenei faila faila (faila faila, Python script, Bash script, ma isi), lea, pe a faʻataunuʻuina, e faʻaaogaina finauga laina faʻatonu e fai ma faʻaoga ma toe faʻafoʻi mai se feʻau faʻatasi ai ma fanua masani i le JSON format. E ala i le faʻasalalauga, o le finauga muamua o le laina o le faʻatonuga e masani lava o se metotia, ma o finauga o loʻo totoe o ona faʻamau.
Fa'afanua feso'ota'iga mo CIFS Shares i OpenShift. Flexvolume Avetaavale - Taumatau i le Nofoaga Tutotonu
Seti aupito maualalo o metotia foliga faapenei:
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}
}
Fa'aaogaina Metotia attach и detach o le a faʻamatalaina le faʻaaliga o le a galue ai le kubelet i le lumanaʻi pe a valaʻau le avetaavale. E iai foʻi auala faʻapitoa expandvolume и expandfs, lea e nafa ma le dynamically resizing le leo.
Mo se faʻataʻitaʻiga o suiga e faʻaopoopo e le metotia expandvolume, ma faʻatasi ai ma le malosi e toe faʻaleleia ai voluma i le taimi moni, e mafai ona e masani ai la matou toso talosaga i Rook Ceph Operator.
Ma o se faʻataʻitaʻiga lenei o le faʻatinoina o le avetaavale Flexvolume mo le galulue ma le 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
O lea la, a maeʻa ona saunia le faila faila moni, e te manaʻomia tu'u le aveta'avale ile fuifui Kubernetes. O le aveta'avale e tatau ona tu i luga o node fuifui ta'itasi e tusa ai ma se ala na mua'i fuafuaina. E ala i le faaletonu na filifilia ai:
... ae a faʻaaogaina faʻasalalauga eseese Kubernetes (OpenShift, Rancher...) atonu e ese le ala.
Fa'afitauli Flexvolume: fa'afefea ona lafo sa'o le tootoo?
O le fa'auluina o le aveta'avale Flexvolume i nodes fuifui na fa'aalia o se galuega e le fa'atauva'a. O le faia o le taʻaloga ma le lima faʻatasi, e faigofie ona faʻafeiloaʻi i se tulaga e aliali mai ai ni node fou i le fuifui: ona o le faʻaopoopoina o se node fou, faʻasolosolo faʻasolosolo faʻasolosolo, pe - o le a le mea e sili atu ona leaga - suia o se node ona o se faaletonu. I lenei tulaga, e tatau ona faia galuega ma le teuina i luga o nei nodes e le mafai, se'ia e fa'aopoopo pea ma le lima le ta'avale Flexvolume ia i latou.
O le fofo i lenei faʻafitauli o se tasi o Kubernetes primitives - DaemonSet. A aliali mai se node fou i le fuifui, e otometi lava ona i ai se pod mai le tatou DaemonSet, lea e faʻapipiʻi ai se voluma faʻapitonuʻu i luga o le ala e suʻe ai avetaavale Flexvolume. I le manuia o le fausiaina, e kopiina e le pod faila e manaʻomia mo le avetaavale e galue i le tisiki.
O se faʻataʻitaʻiga lea o se DaemonSet mo le tuʻuina atu o se Flexvolume plugin:
... ma se faʻataʻitaʻiga o le Bash script mo le tuʻuina atu o le avetaavale 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
E taua le aua neʻi galo o le gaioiga kopi e le atomic. E maualuga le avanoa e amata ai e le kubelet ona faʻaaoga le avetaʻavale aʻo leʻi maeʻa lana faʻagaioiga tuʻuina atu, ma mafua ai ona faʻalavelave le faiga. O le auala saʻo o le kopi muamua o faila avetaʻavale i lalo o se igoa ese, ona faʻaaoga lea o le faʻaogaina o le igoa atomic.
Ata o le galulue faatasi ma Ceph i le Rook operator: o le avetaavale Flexvolume i le ata o loʻo i totonu o le Rook agent
O le isi fa'afitauli pe a fa'aaogaina ta'avale Flexvolume o le tele lea o le teuina i luga o se node fuifui e tatau ona fa'apipi'i le polokalama talafeagai mo lenei mea (mo se faʻataʻitaʻiga, o le ceph-common package mo Ceph). I le taimi muamua, o le Flexvolume plugin e leʻi fuafuaina e faʻatino ia faiga faʻalavelave.
O se fofo muamua i lenei faʻafitauli e mafai ona vaʻaia i le Flexvolume avetaʻavale faʻatinoga a le Rook operator:
O le avetaavale lava ia ua mamanuina e avea o se tagata faʻatau RPC. O le IPC socket mo fesoʻotaʻiga o loʻo i totonu o le lisi tutusa ma le avetaavale lava ia. Matou te manatua o le kopiina o faila avetaʻavale e lelei le faʻaogaina o le DaemonSet, lea e faʻafesoʻotaʻi le lisi ma le avetaavale o se voluma. A maeʻa ona kopiina faila taʻavale taʻavale, e le mate lenei pod, ae faʻafesoʻotaʻi i le socket IPC e ala i le voluma faʻapipiʻi e avea o se server RPC atoa. O le ceph-common package ua uma ona faʻapipiʻiina i totonu o le pusa pusa. O le IPC socket e fa'amautinoaina o le kubelet o le a feso'ota'i tonu ma le pod o lo'o tu i luga o le node lava e tasi. O mea uma atamai e faigofie! ..
Tofa, lo matou alofa... in-tree plugins!
Na iloa e le au atinaʻe Kubernetes o le numera o plugini mo le teuina i totonu ole autu e luasefulu. Ma o se suiga i latou taʻitoʻatasi, i se tasi auala poʻo se isi, e alu atu i le taamilosaga atoa o le Kubernetes.
E foliga mai o le faʻaaogaina o le lomiga fou o le faʻapipiʻi faʻapipiʻi, e mana'omia le fa'afouina o le fuifui atoa. I le faaopoopo atu i lenei mea, atonu e te ofo i le fou o Kubernetes o le a faʻafuaseʻi ona le fetaui ma le Linux kernel o loʻo e faʻaaogaina ... O lea e te soloiesea ou loimata ma, eli ou nifo, faʻamaopoopo ma lau pulega ma tagata faʻaoga le taimi e faʻafou le Linux kernel ma le Kubernetes cluster. Fa'atasi ai ma taimi fa'aletonu i le tu'uina atu o auaunaga.
O le tulaga e sili atu nai lo le malie, e te le manatu? Na manino i le nuu atoa e le o aoga lea faiga. E ala i se filifiliga ma le loto i ai, ua faʻailoa mai e le au atinaʻe Kubernetes o le a le toe taliaina ni faʻapipiʻi fou mo le galue ma le teuina i totonu o le fatu. E le gata i lea, e pei ona tatou iloa, o le tele o faʻaletonu na faʻaalia i le faʻatinoga o le Flexvolume plugin...
O le mea fou faʻaopoopo faʻapipiʻi mo voluma i Kubernetes, CSI, na valaʻauina e tapunia le mataupu i le teuina pea o faʻamaumauga i taimi uma. O lona faʻasologa o le alpha, sili atu ona taʻua o Out-of-Tree CSI Volume Plugins, na faʻasalalau i le faʻasalalauga. Kubernetes 1.9.
Feso'ota'iga Teuina o Container, po'o le CSI 3000 la'au taamilo!
Muamua lava, ou te fia maitauina o le CSI e le naʻo se masini faʻapipiʻi, ae o se mea moni tulaga masani i le fatuina o vaega masani mo le galulue faatasi ma faleteuoloa faʻamaumauga. O faiga fa'apipi'i e pei o Kubernetes ma Mesos e tatau ona "a'oa'o" pe fa'apefea ona galulue fa'atasi ma vaega fa'atino e tusa ai ma lenei tulaga. Ma o lea ua uma ona ou aʻoaʻoina Kubernetes.
O le a le fausaga o le CSI plugin i Kubernetes? O le CSI plugin e galue ma avetaʻavale faʻapitoa (avetaavale CSI) tusia e isi tagata atiaʻe vaega. O se aveta'avale CSI i Kubernetes e tatau ona la'ititi ona aofia ai ni vaega se lua (pods):
e pulea — pulea le teuina faifai pea i fafo. O loʻo faʻatinoina o se gRPC server, lea e faʻaaogaina ai le mea muamua StatefulSet.
Node - e nafa ma le faʻapipiʻiina o le teuina faifai pea i nodes fuifui. O loʻo faʻatinoina foi o se gRPC server, ae faʻaaogaina le mea muamua DaemonSet.
E faʻafefea ona galue le CSI plugin i Kubernetes
E mafai ona e aʻoaʻoina e uiga i nisi faʻamatalaga o galuega a le CSI, mo se faʻataʻitaʻiga, mai le tusiga "Malamalama i le C.S.I.», faaliliuga o lea na matou lolomiina i le tausaga talu ai.
Le lelei o sea fa'atinoga
Mo mea masani e pei o le resitalaina o se avetaavale mo se node, na faʻatinoina e le au Kubernetes se seti o pusa. E te le toe manaʻomia le faʻatupuina o se tali a le JSON ma lou malosi, e pei ona faia mo le Flexvolume plugin.
Nai lo le "fa'ase'e" faila fa'atino i nodes, matou te tu'uina atu fo'i i le fuifui. O le mea lea matou te fa'amoemoe muamua mai Kubernetes: o fa'agasologa uma e tutupu i totonu o koneteina o lo'o fa'aogaina e fa'aaoga ai Kubernetes primitives.
E te le toe manaʻomia le fausiaina o se RPC server ma le RPC client e faʻatino ai avetaavale lavelave. O le kalani na faʻatinoina mo i matou e Kubernetes developers.
O le tu'uina atu o finauga e galue i luga o le gRPC protocol e sili atu ona faigofie, fetu'una'i ma fa'atuatuaina nai lo le tu'uina atu e ala i finauga laina fa'atonu. Ina ia malamalama pe faʻafefea ona faʻaopoopo le lagolago mo le faʻaogaina o fua faʻaoga i le CSI e ala i le faʻaopoopoina o se metotia gRPC faʻavasegaina, e mafai ona e faitau: la matou toso talosaga mo vsphere-csi avetaavale.
Feso'ota'iga e tupu i sockets IPC, ina ia aua ne'i fenumia'i pe na lafo e le kubelet le talosaga i le pod sa'o.
E faamanatu atu e lenei lisi ia te oe se mea? O le lelei o le CSI o foia na lava faafitauli, e leʻi amanaia pe a atiaʻe le Flexvolume plugin.
sailiiliga
CSI o se faʻataʻitaʻiga mo le faʻatinoina o faʻapipiʻi faʻapitoa mo le fegalegaleai ma fale teu oloa faʻamaumauga na matua talia fiafia e le alalafaga. E le gata i lea, ona o latou lelei ma agavaʻa, ua faia ai avetaavale CSI e oʻo lava mo le teuina o faiga e pei o Ceph poʻo AWS EBS, faʻapipiʻi mo le galulue faʻatasi ma na faʻaopoopoina i le uluai kopi o Kubernetes.
I le amataga o le 2019, in-tree plugins ua fa'ailoa mai ua le toe aoga. Matou te fuafua e faʻaauau pea ona lagolagoina le Flexvolume plugin, ae o le a le atiina ae ni galuega fou mo ia.
O matou lava ua iai le poto masani i le faʻaaogaina o le ceph-csi, vsphere-csi ma ua sauni e faʻaopoopo i lenei lisi! E oʻo mai i le taimi nei, o loʻo feagai le CSI ma galuega na tuʻuina atu i ai ma se pa, ae o le a tatou faʻatali ma vaʻai.
Aua nei galo o mea fou uma o se toe mafaufau lelei i mea tuai!