Plugins tomhas-lìonaidh airson stòradh Kubernetes: bho Flexvolume gu CSI

Plugins tomhas-lìonaidh airson stòradh Kubernetes: bho Flexvolume gu CSI

Air ais nuair a bha Kubernetes fhathast v1.0.0, bha plugins tomhas-lìonaidh ann. Bha feum orra gus siostaman a cheangal ri Kubernetes airson dàta soithich leantainneach (maireannach) a stòradh. Bha an àireamh aca beag, agus am measg a’ chiad fheadhainn bha solaraichean stòraidh leithid GCE PD, Ceph, AWS EBS agus feadhainn eile.

Chaidh na plugins a lìbhrigeadh còmhla ri Kubernetes, agus is e sin as coireach gun d’ fhuair iad an ainm - in-tree. Ach, dha mòran, cha robh an seata de plugins mar sin gu leòr. Chuir luchd-ciùird plugins sìmplidh ri cridhe Kubernetes a’ cleachdadh badan, às deidh sin chruinnich iad na Kubernetes aca fhèin agus chuir iad a-steach e air na frithealaichean aca. Ach thar ùine, thuig luchd-leasachaidh Kubernetes sin iasg chan urrainnear an duilgheadas fhuasgladh. Feumaidh daoine slat-iasgaich. Agus ann an sgaoileadh Kubernetes v1.2.0 nochd e ...

Plug Flexvolume: slat iasgaich as ìsle

Chruthaich luchd-leasachaidh Kubernetes am plugan FlexVolume, a bha na fhrèam loidsigeach de chaochladairean agus dhòighean airson obrachadh le draibhearan Flexvolume air an cur an gnìomh le luchd-leasachaidh treas-phàrtaidh.

Stadamaid agus bheir sinn sùil nas mionaidiche air dè a th’ ann an draibhear FlexVolume. Tha seo cinnteach faidhle so-ghnìomhaichte (faidhle binary, sgriobt Python, Bash script, msaa), a bhios, nuair a thèid a chur gu bàs, a’ gabhail argamaidean loidhne-àithne mar chur-a-steach agus a’ tilleadh teachdaireachd le raointean ro-aithnichte ann an cruth JSON. Gu gnàthach, tha a’ chiad argamaid loidhne-àithne an-còmhnaidh na dhòigh, agus is e na h-argamaidean a tha air fhàgail na crìochan aige.

Plugins tomhas-lìonaidh airson stòradh Kubernetes: bho Flexvolume gu CSI
Diagram ceangail airson Earrainnean CIFS ann an OpenShift. Dràibhear Flexvolume - Dìreach san Ionad

Seata de dhòighean-obrach as ìsle 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-obrach attach и detach mìnichidh e an suidheachadh anns am bi an kubelet ag obair san àm ri teachd nuair a bhios tu a’ gairm an draibhear. Tha dòighean sònraichte ann cuideachd expandvolume и expandfs, a tha an urra ri bhith ag atharrachadh an tomhas-lìonaidh gu dinamach.

Mar eisimpleir de na h-atharrachaidhean a tha am modh a’ cur ris expandvolume, agus leis a’ chomas meudan meud ath-mheudachadh ann an àm fìor, faodaidh tu eòlas fhaighinn air ar n-iarrtas tarraing ann an Rook Ceph Operator.

Agus seo eisimpleir de bhith a’ buileachadh an draibhear Flexvolume airson a bhith ag obair 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

Mar sin, às deidh dhut am faidhle gnìomhachaidh fhèin ullachadh, feumaidh tu Luchdaich suas an draibhear gu buidheann Kubernetes. Feumaidh an draibhear a bhith air a shuidheachadh air gach nód cnuasachaidh a rèir slighe ro-shuidhichte. Gu bunaiteach chaidh a thaghadh:

/usr/libexec/kubernetes/kubelet-plugins/volume/exec/имя_поставщика_хранилища~имя_драйвера/

ach nuair a bhios tu a’ cleachdadh diofar sgaoilidhean Kubernetes (OpenShift, Rancher...) faodaidh an t-slighe a bhith eadar-dhealaichte.

Duilgheadasan flexvolume: mar a thilgeas tu slat iasgaich gu ceart?

B’ e obair neo-bheag a bh’ ann a bhith a’ luchdachadh suas an draibhear Flexvolume gu nodan cnuasachaidh. An dèidh an obair a dhèanamh le làimh aon uair, tha e furasta a thighinn tarsainn air suidheachadh far a bheil nodan ùra a’ nochdadh anns a’ bhraisle: mar thoradh air nód ùr a chur ris, sgèileadh còmhnard fèin-ghluasadach, no - dè tha nas miosa - cuir an àite nód mar thoradh air dìth gnìomh. Anns a 'chùis seo, bu chòir obrachadh leis an stòradh air na nodan sin neo-dhligheach, gus an cuir thu fhathast an draibhear Flexvolume riutha le làimh.

B 'e am fuasgladh don duilgheadas seo aon de phrìomhachasan Kubernetes - DaemonSet. Nuair a nochdas nód ùr anns a’ bhuidheann, bidh pod ann gu fèin-ghluasadach bhon DaemonSet againn, ris a bheil leabhar ionadail ceangailte air an t-slighe gus draibhearan Flexvolume a lorg. Às deidh cruthachadh soirbheachail, bidh am pod a’ dèanamh lethbhreac de na faidhlichean riatanach gus an obraich an draibhear gu diosc.

Seo eisimpleir de leithid de DaemonSet airson plugan Flexvolume a chuir a-mach:

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 chuir a-mach:

#!/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

Tha e cudromach gun a bhith a 'dìochuimhneachadh gu bheil an obair lethbhreac chan eil e atamach. Tha deagh chothrom ann gun tòisich an kubelet a’ cleachdadh an draibhear mus bi am pròiseas solarachaidh deiseil, ag adhbhrachadh gun tuit an siostam. Is e an dòigh-obrach cheart na faidhlichean draibhear a chopaigeadh an toiseach fo ainm eadar-dhealaichte, agus an uairsin gnìomh ath-ainmeachadh atamach a chleachdadh.

Plugins tomhas-lìonaidh airson stòradh Kubernetes: bho Flexvolume gu CSI
Diagram de bhith ag obair le Ceph ann an gnìomhaiche Rook: tha an draibhear Flexvolume san dealbh suidhichte taobh a-staigh an riochdaire Rook

Is e an ath dhuilgheadas nuair a bhios tu a’ cleachdadh draibhearan Flexvolume airson a’ mhòr-chuid de stòradh air nód braisle feumaidh am bathar-bog riatanach airson seo a bhith air a stàladh (mar eisimpleir, am pasgan ceph-common airson Ceph). An toiseach, cha deach am plugan Flexvolume a dhealbhadh gus siostaman cho iom-fhillte a chuir an gnìomh.

Tha fuasgladh tùsail don duilgheadas seo ri fhaicinn ann am buileachadh dràibhear Flexvolume de ghnìomhaiche Rook:

Tha an draibhear fhèin air a dhealbhadh mar neach-dèiligidh RPC. Tha an socaid IPC airson conaltradh suidhichte san aon eòlaire ris an draibhear fhèin. Tha sinn a’ cuimhneachadh gum biodh e math DaemonSet a chleachdadh airson lethbhreac a dhèanamh de fhaidhlichean draibhear, a cheanglas an eòlaire ris an draibhear mar leabhar. Às deidh dha na faidhlichean draibhear rook riatanach a chopaigeadh, cha bhith am pod seo a ’bàsachadh, ach bidh e a’ ceangal ris an t-socaid IPC tron ​​​​leabhar ceangailte mar fhrithealaiche RPC làn-chuimseach. Tha am pasgan ceph-common air a chuir a-steach mu thràth taobh a-staigh an t-soitheach pod. Bidh an socaid IPC a’ dèanamh cinnteach gum bi an kubelet a ’conaltradh ris an dearbh pod a tha suidhichte air an aon nód. Tha a h-uile dad innleachdach sìmplidh! ..

Beannachd leat, na plugins gràdhach againn... in-tree!

Lorg luchd-leasachaidh Kubernetes gu bheil an àireamh de plugins airson stòradh taobh a-staigh cridhe fichead. Agus bidh atharrachadh anns gach fear dhiubh, aon dòigh no dòigh eile, a’ dol tro chearcall fuasglaidh iomlan Kubernetes.

Tha e coltach gu bheil thu airson an dreach ùr den plugan stòraidh a chleachdadh, feumaidh tu an cruinneachadh gu lèir ùrachadh. A bharrachd air an seo, is dòcha gum bi iongnadh ort gum fàs an dreach ùr de Kubernetes gu h-obann neo-chòrdail ris an kernel Linux a tha thu a’ cleachdadh... ùraich am buidheann Linux kernel agus Kubernetes. Le ùine downt a dh’ fhaodadh a bhith ann an solar sheirbheisean.

Tha an suidheachadh nas motha na èibhinn, nach eil thu a’ smaoineachadh? Dh’fhàs e soilleir don choimhearsnachd air fad nach robh an dòigh-obrach ag obair. Le co-dhùnadh deònach, tha luchd-leasachaidh Kubernetes ag ainmeachadh nach tèid plugins ùra airson a bhith ag obair le stòradh a-steach don kernel tuilleadh. A bharrachd air an sin, mar a tha fios againn mu thràth, chaidh grunn easbhaidhean a chomharrachadh ann am buileachadh plugan Flexvolume ...

Chaidh iarraidh air a ’phlug as ùire a chaidh a chur ris airson meudan ann an Kubernetes, CSI, a’ chùis a dhùnadh le stòradh dàta leantainneach uair is uair. Chaidh an dreach alpha aige, ris an canar nas mionaidiche mar Plugins Volume CSI Out-of-Tree, ainmeachadh anns an fhoillseachadh Àireamhan 1.9.

Eadar-aghaidh Stòradh Container, no slat-snìomh CSI 3000!

An toiseach, bu mhath leam a thoirt fa-near nach e dìreach plugan tomhas-lìonaidh a th’ ann an CSI, ach fìor àbhaisteach air co-phàirtean gnàthaichte a chruthachadh airson a bhith ag obair le stòran dàta. Bha còir aig siostaman orchestration container leithid Kubernetes agus Mesos “ionnsachadh” mar a dh’ obraicheadh ​​​​iad le co-phàirtean air an cur an gnìomh a rèir na h-ìre seo. Agus a-nis tha mi air Kubernetes ionnsachadh mu thràth.

Dè an structar a th’ aig plugan CSI ann an Kubernetes? Bidh am plugan CSI ag obair le draibhearan sònraichte (Draibhearan airson CSI) air a sgrìobhadh le luchd-leasachaidh treas-phàrtaidh. Bu chòir co-dhiù dà phàirt (pods) a bhith ann an draibhear CSI ann an Kubernetes:

  • rianadair - a’ riaghladh stòradh seasmhach taobh a-muigh. Tha e air a bhuileachadh mar fhrithealaiche gRPC, airson a bheil am prìomhadail air a chleachdadh StatefulSet.
  • Node - le uallach airson stòradh leantainneach a chuir suas gu nodan cnuasachaidh. Tha e cuideachd air a chuir an gnìomh mar fhrithealaiche gRPC, ach bidh e a’ cleachdadh prìomhadail DaemonSet.

Plugins tomhas-lìonaidh airson stòradh Kubernetes: bho Flexvolume gu CSI
Mar a tha am plugan CSI ag obair ann an Kubernetes

Faodaidh tu ionnsachadh mu dheidhinn mion-fhiosrachadh eile mu obair CSI, mar eisimpleir, bhon artaigil “A’ tuigsinn an C.S.I." eadar-theangachadh dheth dh’ fhoillsich sinn bliadhna air ais.

Buannachdan leithid de bhuileachadh

  • Airson rudan bunaiteach mar a bhith a’ clàradh draibhear airson nód, chuir luchd-leasachaidh Kubernetes seata de shoithichean an gnìomh. Chan fheum thu tuilleadh freagairt JSON a ghineadh le comasan thu fhèin, mar a chaidh a dhèanamh airson plugan Flexvolume.
  • An àite “sleamhnachadh” faidhlichean so-ghnìomhaichte air nodan, bidh sinn a-nis a’ luchdachadh suas pods chun bhuidheann. Is e seo a tha sinn an dùil an toiseach bho Kubernetes: bidh a h-uile pròiseas a’ tachairt taobh a-staigh soithichean a thathas a ’cleachdadh a’ cleachdadh prìomhadaichean Kubernetes.
  • Cha bhith feum agad tuilleadh air frithealaiche RPC agus teachdaiche RPC a leasachadh gus draibhearan iom-fhillte a chuir an gnìomh. Chaidh an neach-dèiligidh a chuir an gnìomh dhuinn le luchd-leasachaidh Kubernetes.
  • Tha e tòrr nas goireasaiche, sùbailte agus earbsach a bhith a’ toirt seachad argamaidean gus obrachadh thairis air protocol gRPC na bhith gan toirt tro argamaidean loidhne-àithne. Gus tuigse fhaighinn air mar a chuireas tu taic airson meatrach cleachdadh meud ri CSI le bhith a’ cur modh àbhaisteach gRPC ris, faodaidh tu leughadh: ar n-iarrtas tarraing Airson vsphere csi driver.
  • Bidh conaltradh a’ tachairt tro socaidean IPC, gus nach bi troimh-chèile an do chuir an kubelet an t-iarrtas chun pod cheart.

A bheil an liosta seo gad chuimhneachadh? Tha na buannachdan aig CSI fuasgladh air na h-aon dhuilgheadasan sin, nach deach a thoirt fa-near nuair a bhathas a’ leasachadh am plugan Flexvolume.

toraidhean

Chuir a’ choimhearsnachd fàilte chridheil air CSI mar ìre àbhaisteach airson plugins àbhaisteach a chuir an gnìomh airson eadar-obrachadh le stòran dàta. A bharrachd air an sin, air sgàth na buannachdan agus an sùbailteachd aca, tha draibhearan CSI air an cruthachadh eadhon airson siostaman stòraidh leithid Ceph no AWS EBS, plugins airson obrachadh leotha a chaidh a chur ris anns a ’chiad dreach de Kubernetes.

Aig toiseach 2019, plugins in-craobh air an ainmeachadh gun fheum. Tha sinn an dùil cumail oirnn a’ toirt taic don plugan Flexvolume, ach cha leasaich sinn comas-gnìomh ùr air a shon.

Tha eòlas againn fhìn mu thràth a’ cleachdadh ceph-csi, vsphere-csi agus tha sinn deiseil airson cur ris an liosta seo! Gu ruige seo, tha CSI a’ dèiligeadh ris na gnìomhan a chaidh a shònrachadh dha le brag, ach fuirichidh sinn gus faicinn.

Na dì-chuimhnich gu bheil a h-uile dad ùr na dheagh ath-bheachdachadh air an t-seann fhear!

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann