Vhoriyamu plugins yeKubernetes kuchengetedza: kubva kuFlexvolume kuenda kuCSI

Vhoriyamu plugins yeKubernetes kuchengetedza: kubva kuFlexvolume kuenda kuCSI

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.

Vhoriyamu plugins yeKubernetes kuchengetedza: kubva kuFlexvolume kuenda kuCSI
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 chikumbiro chedu chekudhonza muRook Ceph Operator.

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.

Vhoriyamu plugins yeKubernetes kuchengetedza: kubva kuFlexvolume kuenda kuCSI
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. Kubernetes 1.9.

Container Storage Interface, kana CSI 3000 inotenderera tsvimbo!

Chekutanga pane zvese, ndinoda kuona kuti CSI haingori vhoriyamu plugin, asi ndeyechokwadi muyero pakugadzira zvinhu zvetsika zvekushanda nematura data. Container orchestration masisitimu akadai saKubernetes neMesos aifanirwa "kudzidza" maitiro ekushanda nezvikamu zvinoitwa zvinoenderana nechiyero ichi. Uye ikozvino ndatodzidza Kubernetes.

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.

Vhoriyamu plugins yeKubernetes kuchengetedza: kubva kuFlexvolume kuenda kuCSI
Iyo CSI plugin inoshanda sei muKubernetes

Unogona kudzidza nezve mamwe maidi ebasa reCSI, semuenzaniso, kubva kuchinyorwa "Kunzwisisa C.S.I.Β», shanduro yacho takadhinda gore rapfuura.

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 zvakanzi hazvichashandi. Isu tinoronga kuenderera mberi nekutsigira iyo Flexvolume plugin, asi haisi kuzogadzira mashandiro matsva ayo.

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:

Source: www.habr.com

Voeg