ProHoster > Блог > Whakahaerenga > Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI
Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI
I te wa e v1.0.0 tonu ana a Kubernetes, he whakaurunga rōrahi. I hiahiatia hei hono i nga punaha ki nga Kubernetes mo te pupuri i nga raraunga ipu pumau (tuuturu). He iti to ratou tokomaha, a, i roto i te tuatahi ko nga kaiwhakarato rokiroki penei i a GCE PD, Ceph, AWS EBS me etahi atu.
I tukuna nga taputapu me nga Kubernetes, na reira i tapaina ai o raatau ingoa - in-tree. Heoi, mo te nuinga, ko te huinga o enei monomai i kitea he iti rawa. I taapirihia e nga Kaihanga Kaihanga etahi monomai ngawari ki te matua o Kubernetes ma te whakamahi i nga papanga, i muri iho ka whakahiatohia e ratou a ratou ake Kubernetes me te whakauru ki runga i o raatau tūmau. Engari i te roanga o te wa, kua mohio nga kaihanga Kubernetes ika e kore e taea te whakaoti rapanga. Kei te hiahia te tangata tohi ika. A, i te tukunga o Kubernetes v1.2.0 ka puta...
Flexvolume mono: iti rawa te rakau ika
I hangaia e nga kaihanga Kubernetes te mono FlexVolume, he anga arorau o nga taurangi me nga tikanga mo te mahi me nga taraiwa Flexvolume i whakatinanahia e nga kaihanga tuatoru.
Ka mutu ka ata titiro he aha te taraiwa FlexVolume. He pono tenei kōnae kawe (kōnae rua, tuhi Python, tuhi Bash, me etahi atu), ka mahia, ka tango i nga tautohetohe raina whakahau hei whakaurunga ka whakahoki mai i tetahi panui me nga mara kua mohiotia i mua i te whakatakotoranga JSON. Ma te tikanga, ko te tohenga rarangi whakahau tuatahi he tikanga tonu, ko nga toenga tohenga ko ona tawhā.
Hoahoa hononga mo nga Tiri CIFS i OpenShift. Atekōkiri Flexvolume - Matau ki te Pokapū
He huinga tikanga iti rawa penei te ahua:
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}
}
Te whakamahi tikanga attach и detach ka tautuhi i te ahuatanga e mahi ai te kubelet a muri ake nei ina waea ana te taraiwa. He tikanga motuhake ano expandvolume и expandfs, kei a raatau te kawenga mo te whakarereke i te rahi o te rōrahi.
Hei tauira o nga huringa ka taapirihia e te tikanga expandvolume, me te kaha ki te whakarereke i te rahi o nga pukapuka i te waa tuuturu, ka taea e koe te mohio ki a koe ta matou tono toia i roto i te Rook Ceph Kaiwhakahaere.
Anei tetahi tauira o te whakatinanatanga o te taraiwa Flexvolume mo te mahi me te 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
Na, i muri i te whakarite i te konae ka taea te whakahaere, me mahi koe tukua atu te atekōkiri ki te kāhui Kubernetes. Me noho te atekōkiri ki ia kōpuku kāhui kia rite ki te ara kua whakaritea. Na taunoa i tohua:
... engari ina whakamahi i nga tohatoha Kubernetes rereke (OpenShift, Rancher...) ka rereke pea te huarahi.
Nga raruraru Flexvolume: me pehea te maka tika i te rakau ika?
Ko te tuku ake i te taraiwa Flexvolume ki nga pona kahui i puta he mahi kore noa. I muri i te mahi a-ringa kotahi, he ngawari ki te pa ki tetahi ahuatanga ka puta mai nga pona hou i roto i te kohinga: na te taapiri o te node hou, te whakatauira whakapae aunoa, ko - he aha te mea kino - te whakakapi i te node na te kino o te mahi. I roto i tenei take, me mahi ki te rokiroki i runga i enei pona kaore e taea, kia taapirihia e koe te taraiwa Flexvolume ki a raatau.
Ko te otinga ki tenei raru ko tetahi o nga Kubernetes taketake - DaemonSet. Ka puta mai he node hou i roto i te kahui, kei roto i a ia he putunga mai i to tatou DaemonSet, e piri ana he rōrahi rohe ki te huarahi ki te kimi i nga taraiwa Flexvolume. Kia angitu te hanganga, ka kapehia e te pod nga konae e tika ana mo te taraiwa ki te mahi ki te kōpae.
Anei tetahi tauira o taua DaemonSet mo te whakatakoto i tetahi mono Flexvolume:
... me tetahi tauira o te tuhinga Bash mo te whakatakoto i te taraiwa 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
He mea nui kia kaua e wareware ko te mahi kape ehara i te ngota. He nui te tupono ka timata te kubelet ki te whakamahi i te taraiwa i mua i te otinga o tana mahi tuku, ka pakaru te punaha. Ko te huarahi tika ko te kape tuatahi i nga konae taraiwa i raro i tetahi ingoa rereke, katahi ka whakamahi i te mahi whakaingoa ngota.
Hoahoa mo te mahi tahi me Ceph i te Rook operator: ko te taraiwa Flexvolume kei te hoahoa kei roto i te kaihoko Rook
Ko te raru e whai ake nei i te wa e whakamahi ana i nga taraiwa Flexvolume ko tera mo te nuinga o te rokiroki i runga i te node tautau me whakauru nga rorohiko e tika ana mo tenei (hei tauira, te kete ceph-noa mo Ceph). I te timatanga, kaore i hangaia te mono Flexvolume ki te whakatinana i enei punaha uaua.
Ko te otinga taketake mo tenei raru ka kitea i roto i te whakatinanatanga taraiwa Flexvolume o te kaiwhakahaere Rook:
Ko te taraiwa ano i hangaia hei kaihoko RPC. Ko te turanga IPC mo te whakawhitiwhiti korero kei roto i te raarangi rite ki te taraiwa. Ka mahara matou ki te kape i nga konae taraiwa he pai ki te whakamahi i te DaemonSet, e hono ana i te whaiaronga me te taraiwa hei rōrahi. Whai muri i te kape i nga konae taraiwa rook e tika ana, kaore e mate tenei pod, engari ka hono ki te turanga IPC na roto i te rōrahi piri hei tūmau RPC katoa. Ko te kete ceph-common kua whakauruhia ki roto i te ipu putea. Ko te turanga IPC ka whakarite kia korero te kubelet ki te putunga e tu ana i runga i te pona kotahi. He ngawari nga mea mohio katoa!..
Kia ora, to tatou aroha... i roto i te rakau monomai!
I kitea e nga Kaihanga Kubernetes ko te maha o nga monomai mo te rokiroki i roto i te matua he rua tekau. A ko te whakarereketanga o ia waahanga, tetahi huarahi, tetahi atu ranei, ka haere i roto i te huringa tuku katoa o Kubernetes.
Te ahua nei ki te whakamahi i te putanga hou o te mono rokiroki, me whakahou e koe te huinga katoa. I tua atu i tenei, ka miharo pea koe ko te putanga hou o Kubernetes ka kore e hototahi ki te kakano Linux e whakamahia ana e koe... Na ka murua e koe ou roimata me te, ka ngau o ou niho, ka whakarite me o kaiwhakahaere me nga kaiwhakamahi te wa ki te whakahōu i te kākano Linux me te kāhui Kubernetes. Me te wa heke i roto i te whakarato ratonga.
Ko te ahuatanga he nui atu i te katakata, kaore koe e whakaaro? I tino marama ki te hapori katoa kaore i te pai te huarahi. Na roto i te tino whakatau, ka kii nga kaiwhakawhanake Kubernetes ko nga taputapu hou mo te mahi me te rokiroki ka kore e whakaaetia ki roto i te kernel. I tua atu, kua mohiohia e matou, he maha nga hapa i kitea i roto i te whakatinanatanga o te Flexvolume mono...
Ko te taapiri hou mo nga pukapuka i Kubernetes, CSI, i karangahia ki te kati i te take me te rokiroki raraunga tohe kotahi mo te katoa. Ko tana putanga alpha, e kiia ana ko Out-of-Tree CSI Volume Plugins, i panuitia i te tukunga. Kubernetes 1.9.
Tuatahi, e hiahia ana ahau ki te kite ko te CSI ehara i te mea he mono rōrahi anake, engari he tino paerewa i runga i te hanga i nga waahanga ritenga mo te mahi me nga whare putunga raraunga. Ko nga punaha whakahaere ipu penei i a Kubernetes me Mesos me "ako" me pehea te mahi me nga waahanga kua whakatinanahia i runga i tenei paerewa. Na inaianei kua ako ahau i nga Kubernetes.
He aha te hanganga o te mono CSI i Kubernetes? Ka mahi te mono CSI me nga taraiwa motuhake (Nga taraiwa CSI) i tuhia e nga kaihanga tuatoru. Ko te taraiwa CSI i Kubernetes kia rua nga waahanga (pods):
pūmana - te whakahaere i nga rokiroki o waho. Ka whakatinanahia hei tūmau gRPC, e whakamahia ana te taketake StatefulSet.
Node — ko te kawenga mo te whakapuru rokiroki ki nga pona kapopu. Ka whakatinanahia ano he tūmau gRPC, engari kei te whakamahi i te mea taketake DaemonSet.
Mo nga mea taketake penei i te rehita taraiwa mo te node, i whakatinanahia e nga kaihanga Kubernetes he huinga ipu. Kaore koe e hiahia ki te whakaputa i tetahi urupare JSON me o koe kaha, pera i mahia mo te mono Flexvolume.
Engari ki te "whakaheke" i nga konae ka taea te kawe ki runga i nga kohanga, ka tukuna e matou nga pene ki te tautau. Koinei te mea e tumanakohia ana e matou i te tuatahi mai i nga Kubernetes: ka puta nga tukanga katoa i roto i nga ipu ka horahia ma te whakamahi i nga tikanga o mua o Kubernetes.
Kaore koe e hiahia ki te whakawhanake i tetahi RPC tūmau me RPC kiritaki ki te whakatinana i nga taraiwa uaua. I whakatinanahia te kiritaki mo matou e nga kaihanga Kubernetes.
Ko te tuku tohenga ki te mahi i runga i te kawa gRPC he watea ake, he ngawari me te pono atu i te tuku i nga tohenga rarangi whakahau. Kia mohio ai koe me pehea te taapiri i te tautoko mo nga inenga whakamahi rōrahi ki te CSI ma te taapiri i te tikanga gRPC paerewa, ka taea e koe te panui: ta matou tono toia mo te taraiwa vsphere-csi.
Ka puta te whakawhitiwhiti korero ma nga turanga IPC, kia kore ai e poauau mena ka tukuna e te kubelet te tono ki te peera tika.
Kei te whakamahara tenei rarangi ki a koe mo tetahi mea? Ko nga painga o CSI ko te whakaoti i aua raruraru ano, kaore i whakaarohia i te wa e whakawhanake ana i te mono Flexvolume.
kitenga
Ko te CSI hei paerewa mo te whakatinana i nga taapiri ritenga mo te taunekeneke me nga whare putunga raraunga i tino manakohia e te hapori. I tua atu, na o raatau painga me te whai kiko, ka hangaia nga taraiwa CSI mo nga punaha rokiroki penei i a Ceph, AWS EBS ranei, nga taputapu mo te mahi i whakauruhia ki te putanga tuatahi o Kubernetes.
I te timatanga o 2019, i roto i te rakau monomai kua kiia kua tawhitotia. Kei te whakamahere matou ki te tautoko tonu i te mono Flexvolume, engari kaore e whakawhanake i nga mahi hou mo taua mea.
Ko matou ake kua whai wheako ki te whakamahi ceph-csi, vsphere-csi a kua rite ki te taapiri atu ki tenei rarangi! I tenei wa, kei te kaha a CSI ki nga mahi kua tohua ki a ia me te pupuhi, engari ka tatari tatou ka kite.
Kaua e wareware ko nga mea hou katoa he whakaaro pai mo nga mea tawhito!