
Air ais nuair a bha Kubernetes fhathast aig v1.0.0, bha plugins toirte ann. Bha feum orra gus siostaman stòraidh dàta container maireannach a cheangal ri Kubernetes. Cha robh mòran dhiubh ann, agus bha solaraichean stòraidh mar GCE PD, Ceph, AWS EBS, agus feadhainn eile am measg a’ chiad fheadhainn a ghabh riutha.
Chaidh plugain a chur còmhla ri Kubernetes, agus mar sin an t-ainm "in-tree". Ach, bha mòran den bheachd nach robh an seata plugain a bh’ ann mar-thà iomchaidh. Chuir cuid de luchd-dèanaidh DIY plugain sìmplidh ri cridhe Kubernetes a’ cleachdadh badan, an uairsin thog iad an Kubernetes fhèin agus chuir iad an sàs e air na frithealaichean aca. Ach thar ùine, thuig luchd-leasachaidh Kubernetes sin iasg Chan urrainnear an duilgheadas fhuasgladh. Feumaidh daoine slat-iasgaichAgus anns an fhoillseachadh Kubernetes v1.2.0, nochd e…
Plugin Flexvolume: Slat Iasgaich le Roghainnean as Glè Mhionaideach
Chruthaich luchd-leasachaidh Kubernetes am plugan FlexVolume, a bha na phasgan loidsigeach de chaochladairean agus dhòighean airson obrachadh le draibhearan Flexvolume a chuir luchd-leasachaidh treas-phàrtaidh an gnìomh.
Stadamaid agus thoireamaid sùil nas mionaidiche air dè a th’ ann an draibhear FlexVolume. ’S e seòrsa de… faidhle so-ghnìomhaichte (faidhle dà-chànanach, sgriobt Python, sgriobt Bash, msaa.) a bhios, nuair a thèid a chur an gnìomh, a’ gabhail ri argamaidean loidhne-àithne agus a’ tilleadh teachdaireachd le raointean ro-mhìnichte ann an cruth JSON. A rèir gnàthasan, is e an dòigh an-còmhnaidh a’ chiad argamaid loidhne-àithne, agus is e na paramadairean aige na h-argamaidean a tha air fhàgail.

Diagram ceangail CIFS Shares ann an OpenShift. Tha an draibhear Flexvolume ceart sa mheadhan.
Seata as ìsle de dhòighean-obrach coltas mar seo:
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}
} A’ cleachdadh dhòighean attach и detach mìnichidh e an suidheachadh a leanas kubelet san àm ri teachd nuair a bhios e a’ gairm an draibhear. Tha dòighean sònraichte ann cuideachd expandvolume и expandfs, a tha an urra ri atharrachadh fiùghantach meud an tomhas-lìonaidh.
Mar eisimpleir de na h-atharrachaidhean a chuireas an dòigh-obrach ris expandvolume, agus còmhla ris a’ chomas meud-lìonaidh atharrachadh ann an àm fìor, faodaidh tu sùil a thoirt air ann an Obraiche Ceph Rook.
Seo eisimpleir de chur an gnìomh draibhear Flexvolume airson obrachadh 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 1Mar sin, às dèidh dhut am faidhle gnìomhach fhèin ullachadh, tha e riatanach cuir an draibhear a-steach don chruinneachadh KubernetesFeumaidh an draibhear a bhith suidhichte air gach nód cruinneachaidh a rèir slighe ro-shònraichte. Gu gnàthach, chaidh an leanas a thaghadh:
/usr/libexec/kubernetes/kubelet-plugins/volume/exec/имя_поставщика_хранилища~имя_драйвера/
…ach nuair a bhios tu a’ cleachdadh diofar sgaoilidhean Kubernetes (OpenShift, Rancher…) is dòcha gum bi an t-slighe eadar-dhealaichte.
Duilgheadasan Flexvolume: Ciamar a thilgeas tu slat gu ceart?
Cha robh cleachdadh an draibhear Flexvolume gu nódan cruinneachaidh na obair shìmplidh. Às dèidh dhut an obair a dhèanamh le làimh aon uair, tha e furasta tachairt gu bheil nódan ùra gan cur ris a’ chruinneachadh: air sgàth nód ùr a chur ris, sgèileadh còmhnard fèin-ghluasadach, no - nas miosa fhathast - nód ga chur na àite air sgàth mearachd. Anns a’ chùis seo, bidh ruigsinneachd stòraidh air na nódan sin cuibhrichte. neo-dhligheach, gus an cuir thu an draibhear Flexvolume riutha le làimh.
B’ e am fuasgladh don duilgheadas seo aon de na prìomh eileamaidean aig Kubernetes - DaemonSetNuair a nochdas nód ùr anns a’ chruinneachadh, thèid pod bhon DaemonSet againn a chruthachadh air gu fèin-ghluasadach, a’ ceangal tomhas-lìonaidh ionadail ris air an t-slighe airson draibhearan FlexVolume a lorg. Às dèidh cruthachadh soirbheachail, nì am pod lethbhreac de na faidhlichean riatanach airson an draibhear chun diosg.
Seo eisimpleir de DaemonSet mar sin airson am plugan Flexvolume a chleachdadh:
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>...agus eisimpleir de sgriobt Bash airson an draibhear Flexvolume a chleachdadh:
#!/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
doneTha e cudromach cuimhneachadh gu bheil an obair lethbhreac chan eil e atamachTha cunnart mòr ann gun tòisich an kubelet a’ cleachdadh an draibhear mus bi am pròiseas ullachaidh deiseil, agus dh’adhbharaicheas seo mearachd siostaim. Is e an dòigh-obrach cheart na faidhlichean draibhear a chopaigeadh an toiseach fo ainm eadar-dhealaichte, agus an uairsin an obrachadh ath-ainmeachaidh atamach a chleachdadh.

Diagram obrachaidh Ceph anns an obraiche Rook: tha an draibhear Flexvolume san diagram suidhichte taobh a-staigh àidseant Rook
Is e an ath dhuilgheadas le bhith a’ cleachdadh draibhearan Flexvolume, airson a’ mhòr-chuid de stòradh air nód cruinneachaidh feumar am bathar-bog riatanach a stàladh airson seo (mar eisimpleir, am pasgan ceph-common airson Ceph). Cha deach am plugan Flexvolume a dhealbhadh an toiseach gus siostaman cho iom-fhillte a chur an gnìomh.
Chithear fuasgladh tùsail air an duilgheadas seo ann an cur an gnìomh draibhear Flexvolume an obraiche Rook:
Tha an draibhear fhèin air a chur an gnìomh mar neach-dèiligidh RPC. Tha an socaid IPC airson conaltraidh suidhichte san aon eòlaire ris an draibhear fhèin. Tha sinn a’ cuimhneachadh, airson faidhlichean draibhear a chopaigeadh, gur e DaemonSet as fheàrr a chleachdadh, a bhios a’ cur suas eòlaire an draibhear mar leabhar. Às deidh na faidhlichean draibhear riatanach a chopaigeadh, chan eil am pod rook a’ bàsachadh, ach a’ ceangal ris an t-socaid IPC tron leabhar ceangailte mar fhrithealaiche RPC làn-chuimsichte. Tha am pasgan ceph-common air a stàladh mu thràth taobh a-staigh soitheach a’ phoid. Tha an socaid IPC a’ dèanamh cinnteach gun conaltradh an kubelet leis a’ phod a tha a’ fuireach air an aon nód. Gu math sìmplidh!
Mar sin leibh, ar plugain milis… sa chraoibh!
Lorg luchd-leasachaidh Kubernetes gu bheil fichead plugain stòraidh taobh a-staigh a’ chridhe. Bidh atharrachaidhean air gach aon dhiubh, aon dòigh no dòigh eile, air an giùlan tron chearcall fuasglaidh Kubernetes gu lèir.
Tha e coltach, gus an dreach ùr den plugan stòraidh a chleachdadh, feumar an cruinneachadh gu lèir ùrachadhA bharrachd air an sin, is dòcha gum bi iongnadh ort gu bheil dreach ùr de Kubernetes gu h-obann a’ fàs neo-fhreagarrach leis an eithne a tha thu a’ cleachdadh. Linux…Agus mar sin bidh thu a’ sguabadh do dheòir agus, a’ greimeachadh do fhiaclan, a’ co-òrdanachadh leis na h-uachdarain agad agus an luchd-cleachdaidh an t-àm airson ùrachadh an eithne. Linux agus cruinneachadh Kubernetes. Dh’fhaodadh seo leantainn gu ùine downt seirbheis.
Tha an suidheachadh nas motha na èibhinn, nach eil thu a’ smaoineachadh? Tha e air fàs soilleir don choimhearsnachd gu lèir nach eil an dòigh-obrach seo ag obair. Ann an gluasad cinnteach, dh’ainmich luchd-leasachaidh Kubernetes nach tèid plugins stòraidh ùra a ghabhail a-steach don chridhe tuilleadh. A bharrachd air an sin, mar a tha fios againn mu thràth, chaidh grunn lochdan a chomharrachadh ann an cur an gnìomh plugan Flexvolume…
B’ e an rud a chaidh a chur ris as ùire ann an Kubernetes, am plugan CSI Volume, an dùil fuasgladh fhaighinn air a’ chùis stòraidh dàta leantainneach uair is uair. Chaidh an dreach alpha aige, ris an canar Out-of-Tree CSI Volume Plugins nas coileanta, ainmeachadh ann am brath-naidheachd. .
Eadar-aghaidh Stòraidh Container, no slat snìomh CSI 3000!
An toiseach, bu mhath leam a chomharrachadh nach e dìreach plugan toirte a th’ ann an CSI, ach fear fìor. air co-phàirtean gnàthaichte a chruthachadh airson obrachadh le taighean-stòir dàtaBha dùil gum biodh siostaman orchestrachaidh container mar Kubernetes agus Mesos ag “ionnsachadh” mar a dh’obraicheadh iad le co-phàirtean a chaidh a chur an gnìomh a rèir an inbhe seo. Agus a-nis tha Kubernetes air sin a dhèanamh.
Ciamar a tha am plugan CSI ag obair ann an Kubernetes? Bidh am plugan CSI ag obair le draibhearan sònraichte (Draibhearan CSI), air a sgrìobhadh le luchd-leasachaidh treas-phàrtaidh. Feumaidh draibhear CSI ann an Kubernetes a bhith air a dhèanamh suas de co-dhiù dà phàirt (pods):
- rianadair — a’ riaghladh stòradh maireannach taobh a-muigh. Tha e air a chur an gnìomh mar fhrithealaiche gRPC, a bhios a’ cleachdadh prìomhadail
StatefulSet. - Node — tha e an urra ri stòradh maireannach a chuir air nódan cruinneachaidh. Tha e cuideachd air a chur an gnìomh mar fhrithealaiche gRPC, ach bidh e a’ cleachdadh prìomhaideach.
DaemonSet.

Mar a tha am plugan CSI ag obair ann an Kubernetes
Faodaidh tu ionnsachadh mu chuid de mhion-fhiosrachadh eile mu obair CSI, mar eisimpleir, bhon artaigil “" Dh’fhoillsich sinn e bliadhna air ais.
Na buannachdan a tha an lùib a leithid de chur an gnìomh
- Airson gnìomhan bunaiteach—mar eisimpleir, clàradh draibhear airson nód—chuir luchd-leasachaidh Kubernetes seata de shoithichean an gnìomh. Chan fheum thu freagairt JSON a chruthachadh le làimh le comasan tuilleadh, mar a chaidh a dhèanamh airson plugan Flexvolume.
- An àite a bhith a’ cur faidhlichean a ghabhas ruith air nódan, bidh sinn a-nis a’ cur pods a-mach chun a’ chruinneachaidh. Is e seo a bha sinn an-còmhnaidh an dùil bho Kubernetes: bidh a h-uile pròiseas a’ gabhail àite taobh a-staigh soithichean a chaidh a chleachdadh a’ cleachdadh prìomh eileamaidean Kubernetes.
- Chan eil feum air frithealaiche RPC agus neach-dèiligidh RPC a leasachadh tuilleadh gus draibhearan iom-fhillte a chur an gnìomh. Tha luchd-leasachaidh Kubernetes air an neach-dèiligidh a chur an gnìomh dhuinn.
- Tha e fada nas goireasaiche, nas sùbailte agus nas earbsaiche argamaidean airson obair a thoirt seachad tron phròtacal gRPC na bhith gan toirt seachad tro argamaidean loidhne-àithne. Gus tuigse fhaighinn air mar a chuireas tu taic ri meatairean cleachdaidh meud ri CSI le bhith a’ cur dòigh àbhaisteach gRPC ris, faic Airson draibhear vsphere csi.
- Bidh conaltradh a’ tachairt tro socaidean IPC gus troimh-chèile a sheachnadh a thaobh an do chuir an kubelet an t-iarrtas chun pod cheart.
A bheil an liosta seo a’ cur dragh ort? Seo buannachdan CSI: fuasgladh air na duilgheadasan sin fhèin, nach deach a thoirt fa-near nuair a bha am plugan Flexvolume ga leasachadh.
toraidhean
Tha CSI, mar inbhe airson plugins gnàthaichte a chur an gnìomh airson eadar-obrachadh le stòradh dàta, air a bhith air a ghlacadh gu blàth leis a’ choimhearsnachd. A bharrachd air an sin, air sgàth a bhuannachdan agus a iomadachd, tha draibhearan CSI gan cruthachadh eadhon airson siostaman stòraidh leithid Ceph no AWS EBS, plugins a chaidh a chur ris anns a’ chiad dreach de Kubernetes.
Tràth ann an 2019, plugain sa chraoibh Tha sinn an dùil cumail oirnn a’ toirt taic don plugan Flexvolume, ach cha bhith sinn a’ leasachadh comasan ùra air a shon.
Tha eòlas againn mu thràth air ceph-csi agus vsphere-csi a chleachdadh agus tha sinn deiseil airson an liosta seo a leudachadh! Gu ruige seo, tha CSI air a bhith soirbheachail leis na gnìomhan a bha san amharc, ach innsidh ùine dhuinn.
Na dìochuimhnich gur e ath-bheachdachadh math air an t-seann rud a th’ ann an rud ùr!
PS
Leugh cuideachd air ar blog:
- «";
- «";
- «".
Source: www.habr.com
