Kare apo Kubernetes yakanga ichiri v1.0.0, paiva nevhoriyamu plugins. Ivo vaidiwa kubatanidza masisitimu kuKubernetes kuchengetedza inoenderera (yechigarire) mudziyo data. Huwandu hwavo hwaive hudiki, uye pakati pekutanga vaive vakadai vekuchengetedza seGCE PD, Ceph, AWS EBS nevamwe.
Iwo mapulagi akaunzwa pamwe chete naKubernetes, ndosaka vakawana zita ravo - mu-muti. Nekudaro, kune vazhinji, iyo iripo seti yemapulagi akadaro yakave isina kukwana. Vagadziri vakawedzera mapulagi akareruka kuKubernetes musimboti vachishandisa zvigamba, mushure mezvo vakaunganidza yavo Kubernetes ndokuiisa pamaseva avo. Asi nekufamba kwenguva, vagadziri veKubernetes vakazviona hove dambudziko harigone kugadziriswa. Vanhu vanoda chirauro. Uye mukuburitswa kweKubernetes v1.2.0 yakaonekwa...
Flexvolume plugin: shoma tsvimbo yekuredza
Kubernetes Vagadziri vakagadzira iyo FlexVolume plugin, yaive inonzwisisika chimiro chezvinosiyana uye nzira dzekushanda nemadhiraivha eFlexvolume akaiswa nevagadziri vebato rechitatu.
Ngatimbomirai tinyatsotarisa kuti FlexVolume driver chii. Ichi ndicho chokwadi executable file (bhinary file, Python script, Bash script, etc.), iyo, kana yaitwa, inotora mitsetse yemirairo semapindiro uye inodzosera meseji ine ndima dzinozivikanwa kare muJSON fomati. Negungano, yekutanga mutsara mutsara nharo inogara iri nzira, uye nharo dzakasara ndiwo maparamita ayo.
Yekubatanidza dhizaini yeCIFS Shares muOpenShift. Flexvolume Driver - Mukati chaimo
Minimum seti yenzira rinotarisa seizvi:
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}
}
Kushandisa Nzira attach
ΠΈ detach
ichatsanangura mamiriro ayo kubelet achaita mune ramangwana kana achidaidza mutyairi. Kunewo nzira dzakakosha expandvolume
ΠΈ expandfs
, izvo zvine basa rekuchinja saizi yevhoriyamu zvine simba.
Semuenzaniso wekuchinja uko nzira inowedzera expandvolume
, uye nekugona kudzoreredza mavhoriyamu munguva chaiyo, unogona kuzvijaira
Uye heino muenzaniso wekushandiswa kweFlexvolume mutyairi wekushanda neNFS:
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
Saka, mushure mekugadzirira iyo chaiyo inogoneka faira, iwe unofanirwa rodha mutyairi kuKubernetes cluster. Mutyairi anofanira kunge ari pane imwe neimwe cluster node zvinoenderana neyakafanorongwa nzira. Nekusarudzika yakasarudzwa:
/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ΠΈΠΌΡ_ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°_Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°~ΠΈΠΌΡ_Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°/
... asi kana uchishandisa Kubernetes kugovera kwakasiyana (OpenShift, Rancher...) nzira inogona kunge yakasiyana.
Matambudziko eFlexvolume: nzira yekukanda tsvimbo yekubata hove nenzira kwayo?
Kuisa mutyairi weFlexvolume kuma cluster node rakazove basa risiri diki. Kana waita oparesheni yacho nemaoko kamwe chete, zviri nyore kusangana nemamiriro ezvinhu apo node itsva dzinoonekwa musumbu: nekuda kwekuwedzera kweiyo node itsva, otomatiki yakatwasuka scaling, kana - chii chakaipisisa - kutsiva node nekuda kwekusashanda zvakanaka. Muchiitiko ichi, kushanda nekuchengetedza pane node idzi kunofanira kuitwa hazvigoneki, kusvikira iwe uchiri kuwedzera mutyairi weFlexvolume kwavari.
Mhinduro yedambudziko iri yaive imwe yeKubernetes primitives - DaemonSet
. Kana node nyowani ikaonekwa musumbu, inongoerekana iine pod kubva kuDaemonSet yedu, iyo vhoriyamu yemunharaunda inosungirirwa munzira yekutsvaga madhiraivha eFlexvolume. Pakusikwa kwakabudirira, iyo pod inokopa mafaera anodiwa kuti mutyairi ashande kudhisiki.
Heino muenzaniso weiyo DaemonSet yekuisa kunze Flexvolume plugin:
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: flex-set
spec:
template:
metadata:
name: flex-deploy
labels:
app: flex-deploy
spec:
containers:
- image: <deployment_image>
name: flex-deploy
securityContext:
privileged: true
volumeMounts:
- mountPath: /flexmnt
name: flexvolume-mount
volumes:
- name: flexvolume-mount
hostPath:
path: <host_driver_directory>
... uye muenzaniso weBash script yekuisa kunze Flexvolume driver:
#!/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
Zvakakosha kuti usakanganwa kuti kopi kushanda haisi atomiki. Pane mukana wakakura wekuti kubelet itange kushandisa mutyairi nzira yayo yekupa isati yapera, zvichiita kuti sisitimu iparare. Nzira chaiyo ndeyekutanga kukopa mafaera emutyairi pasi pezita rakasiyana, wobva washandisa atomic rename operation.
Dhiagiramu yekushanda neCeph muRook opareta: mutyairi weFlexvolume mudhiyagiramu ari mukati meRook agent.
Dambudziko rinotevera kana uchishandisa madhiraivha eFlexvolume nderekuchengetedza kwakawanda pane cluster node iyo software inodiwa yeiyi inofanirwa kuiswa (semuenzaniso, iyo ceph-yakajairika package yeCeph). Pakutanga, Flexvolume plugin haina kugadzirwa kuti ishandise masisitimu akaoma kudaro.
Mhinduro yepakutanga yedambudziko iri inogona kuoneka muFlexvolume mutyairi kuita kweRook opareta:
Mutyairi pachawo akagadzirwa seRPC mutengi. Iyo IPC socket yekutaurirana iri mune imwechete dhairekitori semutyairi pachayo. Isu tinorangarira kuti kukopa mafaera emutyairi zvingave zvakanaka kushandisa DaemonSet, iyo inobatanidza dhairekitori nemutyairi sevhoriyamu. Mushure mekukopa mafaera anodiwa emutyairi, iyi podhi haife, asi inobatana neiyo IPC socket kuburikidza nevhoriyamu yakabatanidzwa seyakazara-yakazara RPC server. Iyo ceph-yakajairika package yakatoiswa mukati mepod mudziyo. Iyo IPC socket inova nechokwadi chekuti kubelet inotaurirana neicho pod iri panzvimbo imwecheteyo. Zvese zvine hungwaru zviri nyore! ..
Zvakanaka, rudo rwedu ... mu-muti plugins!
Kubernetes Vagadziri vakawana kuti nhamba yemaplugins ekuchengetedza mukati mepakati makumi maviri. Uye shanduko mune imwe neimwe yadzo, imwe nzira kana imwe, inopfuura nekuzara Kubernetes kuburitswa kutenderera.
Zvinoitika kuti kushandisa iyo nyowani vhezheni yekuchengetedza plugin, unofanira kuvandudza sumbu rose. Mukuwedzera kune izvi, unogona kushamisika kuti shanduro itsva yeKubernetes ichangoerekana yave isingaenderani neLinux kernel yauri kushandisa ... Saka iwe unopukuta misodzi yako uye, uchigeda mazino ako, unobatanidza nevatungamiri vako uye vashandisi nguva gadziridza iyo Linux kernel uye Kubernetes cluster. Nekugoneka kunonoka mukupihwa kwesevhisi.
Mamiriro acho ezvinhu anopfuura kusekesa, haufungi here? Zvakava pachena kunharaunda yese kuti nzira yacho yaisashanda. Nechisarudzo cheune, Vagadziri veKubernetes vanozivisa kuti mapulagi matsva ekushanda nekuchengetedza haazogamuchirwi mukernel. Mukuwedzera, sezvatinotoziva, huwandu hwekukanganisa hwakaonekwa mukuitwa kweFlexvolume plugin...
Iyo ichangoburwa yakawedzerwa plugin yemavhoriyamu muKubernetes, CSI, yakadanwa kuti ivhare nyaya yacho nekuramba ichichengeterwa data kamwe zvachose. Yayo alpha vhezheni, inonyanya kunzi Out-of-Muti CSI Vhoriyamu Plugins, yakaziviswa mukuburitswa.
Container Storage Interface, kana CSI 3000 inotenderera tsvimbo!
Chekutanga pane zvese, ndinoda kuona kuti CSI haingori vhoriyamu plugin, asi ndeyechokwadi
Chii chimiro cheCSI plugin muKubernetes? Iyo CSI plugin inoshanda nemadhiraivha akakosha (CSI vatyairi) yakanyorwa nevagadziri vebato. Mutyairi weCSI muKubernetes anofanirwa kunge aine zvikamu zviviri (mapodhi):
- Controller - inotarisira kunze kwekuchengetedza kuchengetedza. Inoitwa se gRPC server, iyo yekutanga inoshandiswa
StatefulSet
. - Node -Inoita basa rekukwirisa kuchengetedza kunoramba kuchiita kune cluster node. Iyo inoshandiswawo se gRPC server, asi inoshandisa yekutanga
DaemonSet
.
Iyo CSI plugin inoshanda sei muKubernetes
Unogona kudzidza nezve mamwe maidi ebasa reCSI, semuenzaniso, kubva kuchinyorwa "
Zvakanakira kuita kwakadaro
- Kune zvinhu zvakakosha sekunyoresa mutyairi wenode, ivo vanogadzira Kubernetes vakaisa seti yemidziyo. Iwe hauchadi kugadzira mhinduro yeJSON ine hunyanzvi pachako, sezvakaitirwa Flexvolume plugin.
- Panzvimbo pe "kutsvedza" mafaera anogoneka pane node, isu ikozvino tinorodha mapodhi kune sumbu. Izvi ndizvo zvatinotarisira kubva kuKubernetes: ese maitirwo anoitika mukati memidziyo yakatumirwa uchishandisa Kubernetes primitives.
- Iwe hauchadi kugadzira RPC server uye RPC mutengi kuti aite madhiraivha akaomarara. Mutengi akaitirwa isu nevagadziri veKubernetes.
- Kupfuura nharo dzekushanda pamusoro peiyo gRPC protocol iri nyore, inochinjika uye yakavimbika pane kuapfuudza kuburikidza nemirairo mitsetse nharo. Kuti unzwisise kuti ungawedzera sei rutsigiro rwevhoriyamu yekushandisa metrics kuCSI nekuwedzera yakamisikidzwa gRPC nzira, unogona kuverenga:
chikumbiro chedu chekudhonza ye vsphere-csi mutyairi. - Kukurukurirana kunoitika kuburikidza neIPC sockets, kuti usakanganiswe kana kubelet yakatumira chikumbiro kune chaiyo pod.
Rondedzero iyi inokuyeuchidza nezvechimwe chinhu here? Zvakanakira zveCSI ndezve kugadzirisa matambudziko mamwe chete iwayo, izvo zvisina kuverengerwa pakugadzira iyo Flexvolume plugin.
zvakawanikwa
CSI seyakajairwa kuita tsika plugins yekudyidzana nematura data yakagamuchirwa neushamwari nenharaunda. Uyezve, nekuda kwezvakanakira uye kuita zvakasiyana-siyana, madhiraivha eCSI anogadzirwa kunyangwe ekuchengetedza masisitimu akadai seCeph kana AWS EBS, maplugins ekushanda nawo akawedzerwa mune yekutanga vhezheni yeKubernetes.
Pakutanga kwa2019, mu-muti plugins
Isu pachedu tatova neruzivo rwekushandisa ceph-csi, vsphere-csi uye takagadzirira kuwedzera kune iyi runyorwa! Kusvika pari zvino, CSI iri kubata nemabasa ayakapihwa ne bang, asi isu tichamirira toona.
Usakanganwa kuti zvese zvitsva ndeye kufunga patsva kwekare!
PS
Verenga zvakare pablog yedu:
- Β«
Isu tinonzwisisa iyo Container Storage Interface (muKubernetes uye kwete chete) "; - Β«
Rook kana kwete Rook, ndiwo mubvunzo "; - Β«
Kuunza iyo alpha vhezheni yevhoriyamu snapshots muKubernetes ".
Source: www.habr.com