Breiseáin toirte le haghaidh stórála Kubernetes: ó Flexvolume go CSI

Breiseáin toirte le haghaidh stórála Kubernetes: ó Flexvolume go CSI

Ar ais nuair a bhí Kubernetes fós v1.0.0, bhí forlíontáin toirte ann. Bhí gá leo córais a nascadh le Kubernetes chun sonraí coimeádán marthanacha (buan) a stóráil. Bhí a líon beag, agus i measc na gcéad soláthraithe stórála mar GCE PD, Ceph, AWS EBS agus daoine eile.

Seachadadh na forlíontáin in éineacht le Kubernetes, agus is é sin an fáth a fuair siad a n-ainm - in-tree. I gcás go leor, áfach, níor leor an tacar breiseán den sórt sin a bhí ann cheana féin. Chuir ceardaithe forlíontáin shimplí le croí Kubernetes ag baint úsáide as paistí, agus chuir siad a Kubernetes féin le chéile ina dhiaidh sin agus chuir siad é ar a gcuid freastalaithe. Ach le himeacht ama, thuig forbróirí Kubernetes é sin iasc ní féidir an fhadhb a réiteach. Daoine gá slat iascaireachta. Agus i scaoileadh Kubernetes v1.2.0 bhí an chuma air ...

Breiseán Flexvolume: slat iascaireachta íosta

Chruthaigh forbróirí Kubernetes an breiseán FlexVolume, a bhí ina chreat loighciúil athróg agus modhanna chun oibriú le tiománaithe Flexvolume a chuir forbróirí tríú páirtí i bhfeidhm.

Stopfaimid agus breathnaímid ar cad é an tiománaí FlexVolume. Is áirithe é seo comhad inrite (comhad dénártha, script Python, script Bash, etc.), a ghlacann, nuair a dhéantar é, argóintí na n-orduithe mar ionchur agus a sheolann teachtaireacht ar ais le réimsí réamhaitheanta i bhformáid JSON. De réir an ghnáis, is modh i gcónaí an argóint chéad líne ordaithe, agus is iad na hargóintí atá fágtha a paraiméadair.

Breiseáin toirte le haghaidh stórála Kubernetes: ó Flexvolume go CSI
Léaráid naisc le haghaidh Scaireanna CIFS in OpenShift. Tiománaí Flexvolume - Ar dheis san Ionad

Sraith íosta modhanna tá an chuma air 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}
}

Modhanna Úsáide attach и detach saineoidh sé an cás ina ngníomhóidh an kubelet sa todhchaí agus é ag glaoch ar an tiománaí. Tá modhanna speisialta ann freisin expandvolume и expandfs, atá freagrach as méid a athrú go dinimiciúil.

Mar shampla de na hathruithe a chuireann an modh expandvolume, agus leis an gcumas méideanna a athrú i bhfíor-am, is féidir leat dul i dtaithí air ár n-iarratas tarraingt in Oibreoir Rook Ceph.

Agus seo sampla de chur i bhfeidhm an tiománaí Flexvolume chun oibriú 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, tar éis duit an comhad inrite iarbhír a ullmhú, ní mór duit Íoslódáil an tiománaí chuig an Kubernetes braisle. Ní mór an tiománaí a bheith suite ar gach nód braisle de réir cosán réamhshocraithe. De réir réamhshocraithe roghnaíodh é:

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

... ach nuair a bhíonn dáiltí éagsúla Kubernetes á n-úsáid (OpenShift, Rancher ...) féadfaidh an cosán a bheith difriúil.

Fadhbanna toirte flex: conas slat iascaireachta a chaitheamh i gceart?

Ba thasc neamhfhánach é an tiománaí Flexvolume a uaslódáil chuig nóid bhraisle. Tar éis an oibríocht a dhéanamh de láimh uair amháin, is furasta teacht ar chás ina bhfuil nóid nua le feiceáil sa bhraisle: mar gheall ar nód nua a chur leis, scálú cothrománach uathoibríoch, nó - rud atá níos measa - nód a athsholáthar de bharr mífheidhm. Sa chás seo, ba chóir obair leis an stóráil ar na nóid seo a dhéanamh Tá sé dodhéanta, go dtí go gcuirfidh tú an tiománaí Flexvolume leo de láimh fós.

Ba é an réiteach ar an bhfadhb seo ceann de na primitives Kubernetes - DaemonSet. Nuair a fheictear nód nua sa bhraisle, cuimsítear ann go huathoibríoch pod ónár DaemonSet, a bhfuil imleabhar áitiúil ceangailte leis feadh an chosáin chun tiománaithe Flexvolume a aimsiú. Nuair a chruthaítear go rathúil, déanann an pod cóip de na comhaid riachtanacha chun go n-oibreoidh an tiománaí de réir diosca.

Seo sampla de DaemonSet den sórt sin chun breiseán Flexvolume a leagan amach:

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 sampla de script Bash chun an tiománaí Flexvolume a leagan amach:

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

Tá sé tábhachtach gan dearmad go bhfuil an oibríocht chóip nach bhfuil adamhach. Tá seans ard ann go dtosóidh an kubelet ag baint úsáide as an tiománaí sula mbeidh an próiseas soláthair críochnaithe, rud a fhágann go mbeidh an córas tuairteála. Is é an cur chuige ceart ná na comhaid tiománaí a chóipeáil ar dtús faoi ainm difriúil, agus ansin oibríocht athainmnithe adamhach a úsáid.

Breiseáin toirte le haghaidh stórála Kubernetes: ó Flexvolume go CSI
Léaráid oibre le Ceph san oibreoir Rook: tá an tiománaí Flexvolume sa léaráid suite taobh istigh den ghníomhaire Rook

Is í an chéad fhadhb eile agus tiománaithe Flexvolume á n-úsáid ná an chuid is mó den stóráil ar nód braisle ní mór na bogearraí riachtanacha chuige seo a shuiteáil (mar shampla, an pacáiste ceph-common do Ceph). Ar dtús, níor ceapadh an breiseán Flexvolume chun córais chasta den sórt sin a chur i bhfeidhm.

Is féidir réiteach bunaidh ar an bhfadhb seo a fheiceáil i gcur i bhfeidhm tiománaí Flexvolume an oibreora Rook:

Tá an tiománaí féin deartha mar chliant RPC. Tá an soicéad IPC le haghaidh cumarsáide suite san eolaire céanna leis an tiománaí féin. Cuimhnímid go mbeadh sé go maith DaemonSet a úsáid chun comhaid tiománaí a chóipeáil, a nascann an t-eolaire leis an tiománaí mar imleabhar. Tar éis na comhaid tiománaí rook riachtanach a chóipeáil, ní fhaigheann an pod seo bás, ach nascann sé leis an soicéad IPC tríd an toirt ceangailte mar fhreastalaí RPC lán-chuimsitheach. Tá an pacáiste ceph-common suiteáilte cheana féin taobh istigh den choimeádán pod. Cinntíonn an soicéad IPC go ndéanfaidh an kubelet cumarsáid leis an pod go díreach atá suite ar an nód céanna. Tá gach rud seiftiúil simplí! ..

Slán, a chairde... breiseán i gcrann!

Fuair ​​​​forbróirí Kubernetes amach go bhfuil líon na breiseán le haghaidh stórála laistigh den chroílár fiche. Agus téann athrú i ngach ceann acu, bealach amháin nó eile, trí thimthriall iomlán scaoileadh Kubernetes.

Tharlaíonn sé go raibh a úsáid leagan nua den breiseán stórála, ní mór duit an braisle iomlán a nuashonrú. Chomh maith leis seo, b'fhéidir go mbeadh ionadh ort go n-éireoidh an leagan nua de Kubernetes go tobann leis an eithne Linux atá á úsáid agat. nuashonraigh an eithne Linux agus braisle Kubernetes. Le ham aga féideartha i soláthar seirbhísí.

Is mó an scéal ná greann, nach gceapann tú? Ba léir don phobal ar fad nach raibh an cur chuige ag obair. Trí chinneadh toiliúil, fógraíonn forbróirí Kubernetes nach nglacfar le forlíontáin nua chun oibriú le stóráil san eithne a thuilleadh. Ina theannta sin, mar is eol dúinn cheana féin, aithníodh roinnt easnamh i gcur i bhfeidhm an bhreiseáin Flexvolume...

Iarradh ar an mbreiseán breise is déanaí maidir le méideanna i Kubernetes, CSI, an cheist a dhúnadh le stóráil sonraí leanúnach uair amháin agus do gach duine. Fógraíodh a leagan alfa, ar a dtugtar Breiseáin Imleabhar CSI Lasmuigh den Chrann, sa scaoileadh Cúirtéis 1.9.

Comhéadan Stórála Coimeádán, nó slat sníomh CSI 3000!

Ar an gcéad dul síos, ba mhaith liom a thabhairt faoi deara nach breiseán toirte amháin é CSI, ach fíor caighdeánach maidir le comhpháirteanna saincheaptha a chruthú chun oibriú le stórais sonraí. Bhí córais cheolchoirmeacha coimeádán cosúil le Kubernetes agus Mesos le "foghlaim" conas oibriú le comhpháirteanna arna gcur i bhfeidhm de réir an chaighdeáin seo. Agus anois tá Kubernetes foghlamtha agam cheana féin.

Cad é struchtúr an bhreiseáin CSI in Kubernetes? Oibríonn an breiseán CSI le tiománaithe speisialta (Tiománaithe do CSI) scríofa ag forbróirí tríú páirtí. Ba cheart go mbeadh dhá chomhpháirt (pods) ar a laghad i dtiománaí CSI in Kubernetes:

  • rialtóir — a bhainistíonn stórais sheasmhacha sheachtracha. Cuirtear i bhfeidhm é mar fhreastalaí gRPC, as a n-úsáidtear an primitive StatefulSet.
  • Nód — atá freagrach as stóráil mharthanach a chur ar nóid bhraisle. Cuirtear i bhfeidhm é freisin mar fhreastalaí gRPC, ach úsáideann sé an primitive DaemonSet.

Breiseáin toirte le haghaidh stórála Kubernetes: ó Flexvolume go CSI
Conas a oibríonn an breiseán CSI i Kubernetes

Is féidir leat eolas a fháil faoi roinnt sonraí eile faoi obair an CSI, mar shampla, ón alt “Tuiscint ar an C.S.I.' aistriúchán ar a d’fhoilsíomar bliain ó shin.

Na buntáistí a bhaineann le cur i bhfeidhm den sórt sin

  • Le haghaidh rudaí bunúsacha cosúil le tiománaí a chlárú le haghaidh nód, chuir forbróirí Kubernetes sraith coimeádán i bhfeidhm. Ní gá duit freagra JSON le cumais a ghiniúint tú féin a thuilleadh, mar a rinneadh don bhreiseán Flexvolume.
  • In ionad comhaid inrite a “shleamhnú” ar nóid, uaslódaimid pods chuig an mbraisle anois. Is é seo a mbeimid ag súil ó Kubernetes ar dtús: tarlaíonn gach próiseas taobh istigh de choimeádáin a imlonnaítear ag baint úsáide as primitives Kubernetes.
  • Ní gá duit freastalaí RPC agus cliant RPC a fhorbairt a thuilleadh chun tiománaithe casta a chur i bhfeidhm. Chuir forbróirí Kubernetes an cliant i bhfeidhm dúinn.
  • Tá sé i bhfad níos áisiúla, níos solúbtha agus níos iontaofa argóintí a chur ar aghaidh chun oibriú thar phrótacal gRPC ná iad a chur trí argóintí na n-orduithe. Chun tuiscint a fháil ar conas tacaíocht do mhéadracht úsáide toirte a chur le CSI trí mhodh caighdeánaithe gRPC a chur leis, is féidir leat léamh: ár n-iarratas tarraingt Tiománaí do vsphere csi.
  • Déantar cumarsáid trí soicéid IPC, ionas nach gcuirfí amú ar sheol an kubelet an t-iarratas chuig an pod ceart.

An gcuireann an liosta seo aon rud i gcuimhne duit? Is iad na buntáistí a bhaineann le CSI na fadhbanna céanna sin a réiteach, nár cuireadh san áireamh agus an breiseán Flexvolume á fhorbairt.

Torthaí

Chuir an pobal fáilte mhór roimh CSI mar chaighdeán chun forlíontáin saincheaptha a chur i bhfeidhm chun idirghníomhú le stórais sonraí. Ina theannta sin, mar gheall ar a gcuid buntáistí agus solúbthachta, cruthaítear tiománaithe CSI fiú do chórais stórála mar Ceph nó AWS EBS, forlíontáin chun oibriú leo a cuireadh leis sa chéad leagan de Kubernetes.

Ag tús 2019, forlíontáin in-crann dearbhaithe a bheith imithe i léig. Tá sé beartaithe againn leanúint ar aghaidh ag tacú leis an mbreiseán Flexvolume, ach ní fhorbróimid feidhmiúlacht nua dó.

Tá taithí againn cheana féin ar ceph-csi, vsphere-csi a úsáid agus táimid réidh le cur leis an liosta seo! Go dtí seo, tá CSI ag déileáil leis na tascanna a shanntar dó le bang, ach fanfaimid go bhfeicfimid.

Ná déan dearmad gur athmhachnamh maith é gach rud nua ar an sean!

PS

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment