Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI

Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI

I te wa e v1.0.0 tonu ana a Kubernetes, he whakaurunga rōrahi. I hiahiatia hei hono i nga punaha ki nga Kubernetes mo te pupuri i nga raraunga ipu pumau (tuuturu). He iti to ratou tokomaha, a, i roto i te tuatahi ko nga kaiwhakarato rokiroki penei i a GCE PD, Ceph, AWS EBS me etahi atu.

I tukuna nga taputapu me nga Kubernetes, na reira i tapaina ai o raatau ingoa - in-tree. Heoi, mo te nuinga, ko te huinga o enei monomai i kitea he iti rawa. I taapirihia e nga Kaihanga Kaihanga etahi monomai ngawari ki te matua o Kubernetes ma te whakamahi i nga papanga, i muri iho ka whakahiatohia e ratou a ratou ake Kubernetes me te whakauru ki runga i o raatau tūmau. Engari i te roanga o te wa, kua mohio nga kaihanga Kubernetes ika e kore e taea te whakaoti rapanga. Kei te hiahia te tangata tohi ika. A, i te tukunga o Kubernetes v1.2.0 ka puta...

Flexvolume mono: iti rawa te rakau ika

I hangaia e nga kaihanga Kubernetes te mono FlexVolume, he anga arorau o nga taurangi me nga tikanga mo te mahi me nga taraiwa Flexvolume i whakatinanahia e nga kaihanga tuatoru.

Ka mutu ka ata titiro he aha te taraiwa FlexVolume. He pono tenei kōnae kawe (kōnae rua, tuhi Python, tuhi Bash, me etahi atu), ka mahia, ka tango i nga tautohetohe raina whakahau hei whakaurunga ka whakahoki mai i tetahi panui me nga mara kua mohiotia i mua i te whakatakotoranga JSON. Ma te tikanga, ko te tohenga rarangi whakahau tuatahi he tikanga tonu, ko nga toenga tohenga ko ona tawhā.

Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI
Hoahoa hononga mo nga Tiri CIFS i OpenShift. Atekōkiri Flexvolume - Matau ki te Pokapū

He huinga tikanga iti rawa penei te ahua:

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

Te whakamahi tikanga attach и detach ka tautuhi i te ahuatanga e mahi ai te kubelet a muri ake nei ina waea ana te taraiwa. He tikanga motuhake ano expandvolume и expandfs, kei a raatau te kawenga mo te whakarereke i te rahi o te rōrahi.

Hei tauira o nga huringa ka taapirihia e te tikanga expandvolume, me te kaha ki te whakarereke i te rahi o nga pukapuka i te waa tuuturu, ka taea e koe te mohio ki a koe ta matou tono toia i roto i te Rook Ceph Kaiwhakahaere.

Anei tetahi tauira o te whakatinanatanga o te taraiwa Flexvolume mo te mahi me te 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

Na, i muri i te whakarite i te konae ka taea te whakahaere, me mahi koe tukua atu te atekōkiri ki te kāhui Kubernetes. Me noho te atekōkiri ki ia kōpuku kāhui kia rite ki te ara kua whakaritea. Na taunoa i tohua:

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

... engari ina whakamahi i nga tohatoha Kubernetes rereke (OpenShift, Rancher...) ka rereke pea te huarahi.

Nga raruraru Flexvolume: me pehea te maka tika i te rakau ika?

Ko te tuku ake i te taraiwa Flexvolume ki nga pona kahui i puta he mahi kore noa. I muri i te mahi a-ringa kotahi, he ngawari ki te pa ki tetahi ahuatanga ka puta mai nga pona hou i roto i te kohinga: na te taapiri o te node hou, te whakatauira whakapae aunoa, ko - he aha te mea kino - te whakakapi i te node na te kino o te mahi. I roto i tenei take, me mahi ki te rokiroki i runga i enei pona kaore e taea, kia taapirihia e koe te taraiwa Flexvolume ki a raatau.

Ko te otinga ki tenei raru ko tetahi o nga Kubernetes taketake - DaemonSet. Ka puta mai he node hou i roto i te kahui, kei roto i a ia he putunga mai i to tatou DaemonSet, e piri ana he rōrahi rohe ki te huarahi ki te kimi i nga taraiwa Flexvolume. Kia angitu te hanganga, ka kapehia e te pod nga konae e tika ana mo te taraiwa ki te mahi ki te kōpae.

Anei tetahi tauira o taua DaemonSet mo te whakatakoto i tetahi mono 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>

... me tetahi tauira o te tuhinga Bash mo te whakatakoto i te taraiwa 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

He mea nui kia kaua e wareware ko te mahi kape ehara i te ngota. He nui te tupono ka timata te kubelet ki te whakamahi i te taraiwa i mua i te otinga o tana mahi tuku, ka pakaru te punaha. Ko te huarahi tika ko te kape tuatahi i nga konae taraiwa i raro i tetahi ingoa rereke, katahi ka whakamahi i te mahi whakaingoa ngota.

Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI
Hoahoa mo te mahi tahi me Ceph i te Rook operator: ko te taraiwa Flexvolume kei te hoahoa kei roto i te kaihoko Rook

Ko te raru e whai ake nei i te wa e whakamahi ana i nga taraiwa Flexvolume ko tera mo te nuinga o te rokiroki i runga i te node tautau me whakauru nga rorohiko e tika ana mo tenei (hei tauira, te kete ceph-noa mo Ceph). I te timatanga, kaore i hangaia te mono Flexvolume ki te whakatinana i enei punaha uaua.

Ko te otinga taketake mo tenei raru ka kitea i roto i te whakatinanatanga taraiwa Flexvolume o te kaiwhakahaere Rook:

Ko te taraiwa ano i hangaia hei kaihoko RPC. Ko te turanga IPC mo te whakawhitiwhiti korero kei roto i te raarangi rite ki te taraiwa. Ka mahara matou ki te kape i nga konae taraiwa he pai ki te whakamahi i te DaemonSet, e hono ana i te whaiaronga me te taraiwa hei rōrahi. Whai muri i te kape i nga konae taraiwa rook e tika ana, kaore e mate tenei pod, engari ka hono ki te turanga IPC na roto i te rōrahi piri hei tūmau RPC katoa. Ko te kete ceph-common kua whakauruhia ki roto i te ipu putea. Ko te turanga IPC ka whakarite kia korero te kubelet ki te putunga e tu ana i runga i te pona kotahi. He ngawari nga mea mohio katoa!..

Kia ora, to tatou aroha... i roto i te rakau monomai!

I kitea e nga Kaihanga Kubernetes ko te maha o nga monomai mo te rokiroki i roto i te matua he rua tekau. A ko te whakarereketanga o ia waahanga, tetahi huarahi, tetahi atu ranei, ka haere i roto i te huringa tuku katoa o Kubernetes.

Te ahua nei ki te whakamahi i te putanga hou o te mono rokiroki, me whakahou e koe te huinga katoa. I tua atu i tenei, ka miharo pea koe ko te putanga hou o Kubernetes ka kore e hototahi ki te kakano Linux e whakamahia ana e koe... Na ka murua e koe ou roimata me te, ka ngau o ou niho, ka whakarite me o kaiwhakahaere me nga kaiwhakamahi te wa ki te whakahōu i te kākano Linux me te kāhui Kubernetes. Me te wa heke i roto i te whakarato ratonga.

Ko te ahuatanga he nui atu i te katakata, kaore koe e whakaaro? I tino marama ki te hapori katoa kaore i te pai te huarahi. Na roto i te tino whakatau, ka kii nga kaiwhakawhanake Kubernetes ko nga taputapu hou mo te mahi me te rokiroki ka kore e whakaaetia ki roto i te kernel. I tua atu, kua mohiohia e matou, he maha nga hapa i kitea i roto i te whakatinanatanga o te Flexvolume mono...

Ko te taapiri hou mo nga pukapuka i Kubernetes, CSI, i karangahia ki te kati i te take me te rokiroki raraunga tohe kotahi mo te katoa. Ko tana putanga alpha, e kiia ana ko Out-of-Tree CSI Volume Plugins, i panuitia i te tukunga. Kubernetes 1.9.

Atanga Rokiroki Ipu, CSI 3000 rakau hurihuri ranei!

Tuatahi, e hiahia ana ahau ki te kite ko te CSI ehara i te mea he mono rōrahi anake, engari he tino paerewa i runga i te hanga i nga waahanga ritenga mo te mahi me nga whare putunga raraunga. Ko nga punaha whakahaere ipu penei i a Kubernetes me Mesos me "ako" me pehea te mahi me nga waahanga kua whakatinanahia i runga i tenei paerewa. Na inaianei kua ako ahau i nga Kubernetes.

He aha te hanganga o te mono CSI i Kubernetes? Ka mahi te mono CSI me nga taraiwa motuhake (Nga taraiwa CSI) i tuhia e nga kaihanga tuatoru. Ko te taraiwa CSI i Kubernetes kia rua nga waahanga (pods):

  • pūmana - te whakahaere i nga rokiroki o waho. Ka whakatinanahia hei tūmau gRPC, e whakamahia ana te taketake StatefulSet.
  • Node — ko te kawenga mo te whakapuru rokiroki ki nga pona kapopu. Ka whakatinanahia ano he tūmau gRPC, engari kei te whakamahi i te mea taketake DaemonSet.

Ko nga taapiri oro mo te rokiroki Kubernetes: mai i te Flexvolume ki te CSI
Me pehea te mahi a te mono CSI i Kubernetes

Ka taea e koe te ako mo etahi atu korero mo te mahi a CSI, hei tauira, mai i te tuhinga "Te maarama ki te C.S.I.», te whakamaoritanga o tena i whakaputaina e matou he tau ki muri.

Nga painga o taua whakatinanatanga

  • Mo nga mea taketake penei i te rehita taraiwa mo te node, i whakatinanahia e nga kaihanga Kubernetes he huinga ipu. Kaore koe e hiahia ki te whakaputa i tetahi urupare JSON me o koe kaha, pera i mahia mo te mono Flexvolume.
  • Engari ki te "whakaheke" i nga konae ka taea te kawe ki runga i nga kohanga, ka tukuna e matou nga pene ki te tautau. Koinei te mea e tumanakohia ana e matou i te tuatahi mai i nga Kubernetes: ka puta nga tukanga katoa i roto i nga ipu ka horahia ma te whakamahi i nga tikanga o mua o Kubernetes.
  • Kaore koe e hiahia ki te whakawhanake i tetahi RPC tūmau me RPC kiritaki ki te whakatinana i nga taraiwa uaua. I whakatinanahia te kiritaki mo matou e nga kaihanga Kubernetes.
  • Ko te tuku tohenga ki te mahi i runga i te kawa gRPC he watea ake, he ngawari me te pono atu i te tuku i nga tohenga rarangi whakahau. Kia mohio ai koe me pehea te taapiri i te tautoko mo nga inenga whakamahi rōrahi ki te CSI ma te taapiri i te tikanga gRPC paerewa, ka taea e koe te panui: ta matou tono toia mo te taraiwa vsphere-csi.
  • Ka puta te whakawhitiwhiti korero ma nga turanga IPC, kia kore ai e poauau mena ka tukuna e te kubelet te tono ki te peera tika.

Kei te whakamahara tenei rarangi ki a koe mo tetahi mea? Ko nga painga o CSI ko te whakaoti i aua raruraru ano, kaore i whakaarohia i te wa e whakawhanake ana i te mono Flexvolume.

kitenga

Ko te CSI hei paerewa mo te whakatinana i nga taapiri ritenga mo te taunekeneke me nga whare putunga raraunga i tino manakohia e te hapori. I tua atu, na o raatau painga me te whai kiko, ka hangaia nga taraiwa CSI mo nga punaha rokiroki penei i a Ceph, AWS EBS ranei, nga taputapu mo te mahi i whakauruhia ki te putanga tuatahi o Kubernetes.

I te timatanga o 2019, i roto i te rakau monomai kua kiia kua tawhitotia. Kei te whakamahere matou ki te tautoko tonu i te mono Flexvolume, engari kaore e whakawhanake i nga mahi hou mo taua mea.

Ko matou ake kua whai wheako ki te whakamahi ceph-csi, vsphere-csi a kua rite ki te taapiri atu ki tenei rarangi! I tenei wa, kei te kaha a CSI ki nga mahi kua tohua ki a ia me te pupuhi, engari ka tatari tatou ka kite.

Kaua e wareware ko nga mea hou katoa he whakaaro pai mo nga mea tawhito!

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero