Li-plugins tsa molumo bakeng sa polokelo ea Kubernetes: ho tloha Flexvolume ho ea ho CSI

Li-plugins tsa molumo bakeng sa polokelo ea Kubernetes: ho tloha Flexvolume ho ea ho CSI

Morao ha Kubernetes e ntse e le v1.0.0, ho ne ho e-na le li-plugins tsa volume. Li ne li hlokahala ho hokela lits'ebetso ho Kubernetes bakeng sa ho boloka data ea setshelo e phehellang (e sa feleng). Palo ea bona e ne e le nyenyane, 'me har'a ba pele ho ne ho e-na le bafani ba polokelo ba kang GCE PD, Ceph, AWS EBS le ba bang.

Li-plugins li ile tsa fanoa hammoho le Kubernetes, ke ka lebaka leo ba ileng ba reha lebitso la bona - sefateng. Leha ho le joalo, ho ba bangata, sete e teng ea li-plugins tse joalo e ile ea bonahala e sa lekana. Baetsi ba mesebetsi ea matsoho ba kentse li-plugins tse bonolo ho mantlha ea Kubernetes ba sebelisa li-patches, ka mor'a moo ba bokella Kubernetes ea bona mme ba e kenya ho li-server tsa bona. Empa ha nako e ntse e ea, baetsi ba Kubernetes ba ile ba hlokomela seo litlhapi bothata bo ka se rarollehe. Batho ba hloka molamu oa ho tšoasa litlhapi. 'Me tokollong ea Kubernetes v1.2.0 e hlahile ...

Flexvolume plugin: molamu o fokolang oa ho tšoasa litlhapi

Bahlahisi ba Kubernetes ba thehile plugin ea FlexVolume, eo e neng e le moralo o hlakileng oa mefuta le mekhoa ea ho sebetsa le bakhanni ba Flexvolume e kentsoeng ke bahlahisi ba mokha oa boraro.

Ha re emeng 'me re shebisise hore na mokhanni oa FlexVolume ke eng. Sena ke 'nete faele e sebetsang (faele ea binary, mongolo oa Python, Bash script, joalo-joalo), eo, ha e etsoa, ​​​​e nkang likhang tsa mola oa taelo e le kenyelletso ebe e khutlisa molaetsa o nang le likarolo tse tsebahalang ka sebopeho sa JSON. Ka tumellano, khang ea mola oa pele e lula e le mokhoa, 'me likhang tse setseng ke liparamente tsa eona.

Li-plugins tsa molumo bakeng sa polokelo ea Kubernetes: ho tloha Flexvolume ho ea ho CSI
Setšoantšo sa khokahano bakeng sa Likabelo tsa CIFS ho OpenShift. Mokhanni oa Flexvolume - Hantle Setsing

Bonyane sete ea mekhoa e shebahala tjena:

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}
}

Ho Sebelisa Mekhoa attach и detach e tla hlalosa boemo boo kubelet e tla sebetsa nakong e tlang ha a bitsa mokhanni. Hape ho na le mekhoa e khethehileng expandvolume и expandfs, tse nang le boikarabelo ba ho fetola boholo ba molumo ka matla.

E le mohlala oa liphetoho tseo mokhoa o eketsang expandvolume, 'me ka eona bokhoni ba ho fetola boholo ba li-volume ka nako ea sebele, u ka itloaetsa kopo ea rona ea ho hula ho Rook Ceph Operator.

Mona ke mohlala oa ts'ebetsong ea mokhanni oa Flexvolume bakeng sa ho sebetsa 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

Kahoo, ka mor'a ho lokisa faele ea sebele e ka phethisoang, u lokela ho kenya mokhanni ho sehlopha sa Kubernetes. Mokhanni o tlameha ho ba sebakeng se seng le se seng sa cluster ho latela tsela e reriloeng esale pele. Ka tloaelo e khethiloe:

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

... empa ha u sebelisa liphallelo tse fapaneng tsa Kubernetes (OpenShift, Rancher ...) tsela e ka 'na ea fapana.

Mathata a Flexvolume: mokhoa oa ho lahla molamu oa ho tšoasa litlhapi ka nepo?

Ho kenya mokhanni oa Flexvolume ho li-cluster node ho ile ha fetoha mosebetsi o sa reng letho. Ha u se u entse ts'ebetso ka letsoho hanngoe, ho bonolo ho kopana le boemo boo ho tsona ho hlahang li-node tse ncha sehlopheng: ka lebaka la ho eketsoa ha node e ncha, ho lekanya ka mokhoa o itekanetseng, kapa - ho hobe le ho feta - ho nkela node sebaka ka lebaka la ho se sebetse hantle. Tabeng ena, ho sebetsa le ho boloka li-node tsena ho lokela ho etsoa ha ho khonehe, ho fihlela u ntse u eketsa mokhanni oa Flexvolume ho tsona.

Tharollo ea bothata bona e ne e le e 'ngoe ea li-primitives tsa Kubernetes - DaemonSet. Ha node e ncha e hlaha sehlopheng, ka bo eona e na le pod e tsoang ho DaemonSet ea rona, eo molumo oa lehae o kentsoeng tseleng ea ho fumana bakhanni ba Flexvolume. Ha ho etsoa ka katleho, pod e kopitsa lifaele tse hlokahalang hore mokhanni a sebetse ho disk.

Mona ke mohlala oa DaemonSet e joalo ea ho rala plugin ea Flexvolume:

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>

... le mohlala oa sengoloa sa Bash bakeng sa ho beha mokhanni oa 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

Ke habohlokoa hore u se ke ua lebala hore ts'ebetso ea kopo ha se athomo. Ho na le monyetla o moholo oa hore kubelet e tla qala ho sebelisa mokhanni pele mokhoa oa eona oa ho fana o fela, e leng se etsang hore tsamaiso e senyehe. Mokhoa o nepahetseng ke ho qala ho kopitsa lifaele tsa mokhanni tlas'a lebitso le fapaneng, ebe o sebelisa ts'ebetso ea ho reha lebitso la athomo.

Li-plugins tsa molumo bakeng sa polokelo ea Kubernetes: ho tloha Flexvolume ho ea ho CSI
Setšoantšo sa ho sebetsa le Ceph ho opareitara ea Rook: mokhanni oa Flexvolume setšoantšong o ka har'a moemeli oa Rook.

Bothata bo latelang ha u sebelisa bakhanni ba Flexvolume ke hore bakeng sa polokelo e ngata sebakeng sa cluster node software e hlokahalang bakeng sa sena e tlameha ho kenngoa (mohlala, sephutheloana sa ceph-common bakeng sa Ceph). Qalong, plugin ea Flexvolume e ne e sa etsetsoa ho kenya tšebetsong litsamaiso tse rarahaneng joalo.

Tharollo ea mantlha ea bothata bona e ka bonoa ts'ebetsong ea mokhanni oa Flexvolume oa opareitara ea Rook:

Mokhanni ka boeena o entsoe e le moreki oa RPC. IPC socket bakeng sa puisano e fumaneha bukeng e tšoanang le ea mokhanni ka boeena. Re hopola hore ho kopitsa lifaele tsa mokhanni ho ka ba molemo ho sebelisa DaemonSet, e hokahanyang bukana le mokhanni e le molumo. Ka mor'a ho kopitsa lifaele tse hlokahalang tsa mokhanni oa li-rook, pod ena ha e shoe, empa e hokela soketeng ea IPC ka molumo o khomaretsoeng e le seva sa RPC se felletseng. Sephutheloana sa ceph-common se se se kentsoe ka har'a setshelo sa pod. IPC socket e netefatsa hore kubelet e tla buisana hantle le pod e fumanehang sebakeng se le seng. Tsohle tse bohlale li bonolo! ..

Sala hantle, li-plugins tsa rona tse ratehang ... ka har'a sefate!

Bahlahisi ba Kubernetes ba fumane hore palo ea li-plugins tsa polokelo ka har'a mantlha ke tse mashome a mabeli. 'Me phetoho ho e' ngoe le e 'ngoe ea tsona, ka tsela e 'ngoe kapa e' ngoe, e feta ka potoloho e feletseng ea tokollo ea Kubernetes.

Ho ile ha fumaneha hore ho sebelisa mofuta o mocha oa plugin ea polokelo, o hloka ho nchafatsa sehlopha sohle. Ho phaella ho sena, u ka 'na ua makatsoa ke hore phetolelo e ncha ea Kubernetes ka tšohanyetso e tla fetoha e sa lumellaneng le Linux kernel eo u e sebelisang ... Kahoo u hlakola meokho ea hao' me, u tsikitlanya meno, u hokahanya le tsamaiso ea hau le basebelisi nako ea ho ntlafatsa sehlopha sa Linux kernel le Kubernetes. Ka ho fokotseha ho ka khonehang ho fana ka litšebeletso.

Boemo bo feta bo qabolang, na ha u nahane? Ho ile ha totobala ho sechaba sohle hore mokhoa ona ha o sebetse. Ka qeto ea boomo, bahlahisi ba Kubernetes ba phatlalatsa hore li-plugins tse ncha tsa ho sebetsa le polokelo ha li sa tla amoheloa kernel. Ntle le moo, joalo ka ha re se re tseba, mefokolo e mengata e ile ea bonoa ts'ebetsong ea plugin ea Flexvolume ...

Plugin ea morao-rao e ekelitsoeng bakeng sa li-volumes ho Kubernetes, CSI, e ile ea bitsetsoa ho koala taba ka ho boloka data e tsitsitseng hang le ka ho sa feleng. Phetolelo ea eona ea alpha, eo ka botlalo e bitsoang Out-of-Tree CSI Volume plugins, e phatlalalitsoe tokollong. Li-Kubernetes 1.9.

Container Storage Interface, kapa CSI 3000 e bilikang molamu!

Pele ho tsohle, ke rata ho hlokomela hore CSI ha se plugin ea molumo feela, empa ke ea 'nete standard mabapi le ho theha likarolo tsa tloaelo bakeng sa ho sebetsa le polokelo ea data. Sistimi ea 'mino oa li-container joalo ka Kubernetes le Mesos e ne e lokela ho "ithuta" mokhoa oa ho sebetsa le likarolo tse kentsoeng ho latela maemo ana. 'Me joale ke se ke ithutile Kubernetes.

Sebopeho sa plugin ea CSI ho Kubernetes ke eng? Plugin ea CSI e sebetsa le bakhanni ba khethehileng (Bakhanni ba CSI) e ngotsoeng ke batho ba bang ba ntlafatsang. Mokhanni oa CSI ho Kubernetes o tlameha ho ba le likarolo tse peli (li-pods):

  • molaoli eo - e laola polokelo ea kantle e tsitsitseng. E kenngoa ts'ebetsong joalo ka seva ea gRPC, eo ea khale e sebelisetsoang eona StatefulSet.
  • noute - e ikarabella bakeng sa ho kenya polokelo e tsitsitseng ho li-cluster node. E boetse e kengoa ts'ebetsong joalo ka seva ea gRPC, empa e sebelisa ea khale DaemonSet.

Li-plugins tsa molumo bakeng sa polokelo ea Kubernetes: ho tloha Flexvolume ho ea ho CSI
Kamoo plugin ea CSI e sebetsang ho Kubernetes

U ka ithuta ka lintlha tse ling tsa mosebetsi oa CSI, mohlala, sengolong "Ho utloisisa C.S.I.», phetolelo ea eona re hatisitse selemo se fetileng.

Melemo ea ts'ebetsong e joalo

  • Bakeng sa lintho tsa mantlha tse kang ho ngolisa mokhanni bakeng sa node, baetsi ba Kubernetes ba kentse tšebetsong sete sa lijana. Ha u sa hloka ho hlahisa karabo ea JSON ka bokhoni ba hau, joalo ka ha ho entsoe bakeng sa plugin ea Flexvolume.
  • Sebakeng sa "ho thella" lifaele tse phethiloeng ho li-node, joale re kenya li-pods ho sehlopha. Sena ke seo re neng re se lebelletse qalong ho Kubernetes: lits'ebetso tsohle li etsahala ka har'a lijana tse sebelisoang ho sebelisoa li-primitives tsa Kubernetes.
  • Ha o sa hloka ho theha seva sa RPC le moreki oa RPC ho kenya ts'ebetsong li-driver tse rarahaneng. Moreki o sebelisitsoe molemong oa rona ke bahlahisi ba Kubernetes.
  • Ho fetisa likhang ho sebetsa holim'a protocol ea gRPC ho bonolo, ho tenyetseha ebile ho ka tšeptjoa ho feta ho fetisa likhang tsa mola oa taelo. Ho utloisisa mokhoa oa ho kenyelletsa ts'ehetso ea metrics ea tšebeliso ea molumo ho CSI ka ho kenyelletsa mokhoa o tloaelehileng oa gRPC, o ka bala: kopo ea rona ea ho hula bakeng sa mokhanni oa vsphere-csi.
  • Puisano e etsahala ka li-sockets tsa IPC, e le hore u se ke ua ferekanngoa hore na kubelet e rometse kopo ho pod e nepahetseng.

Na lethathamo lee le u hopotsa letho? Melemo ea CSI ke ho rarolla tsona mathata ao, tse neng li sa tsotelloe ha ho etsoa plugin ea Flexvolume.

fumanoeng ke

CSI e le mokhoa oa ho kenya ts'ebetsong li-plugins tse tloaelehileng bakeng sa ho sebelisana le libaka tsa polokelo ea data e ile ea amoheloa ka mofuthu haholo ke sechaba. Ho feta moo, ka lebaka la melemo ea bona le ho feto-fetoha ha maemo, bakhanni ba CSI ba bōpiloe esita le bakeng sa lisebelisoa tsa polokelo tse kang Ceph kapa AWS EBS, li-plugins tsa ho sebetsa le tsona tse kentsoeng phetolelong ea pele ea Kubernetes.

Qalong ea 2019, li-plugins tsa in-tree li phatlalalitsoe hore ha li sa sebetsa. Re rera ho tsoela pele ho ts'ehetsa plugin ea Flexvolume, empa re ke ke ra nts'etsapele ts'ebetso e ncha bakeng sa eona.

Rona ka borona re se re ntse re e-na le boiphihlelo ba ho sebelisa ceph-csi, vsphere-csi mme re ikemiselitse ho kenyelletsa lenaneng lena! Ho fihlela hajoale, CSI e sebetsana le mesebetsi eo e e filoeng ka sekhahla, empa re tla ema re bone.

U se ke ua lebala hore ntho e 'ngoe le e' ngoe e ncha ke ho nahana hantle ka lintho tsa khale!

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso