Plugins volume ho an'ny fitahirizana Kubernetes: avy amin'ny Flexvolume mankany CSI

Plugins volume ho an'ny fitahirizana Kubernetes: avy amin'ny Flexvolume mankany CSI

Tamin'ny Kubernetes mbola v1.0.0 dia nisy plugins volume. Nilaina izy ireo mba hampifandraisana ireo rafitra amin'ny Kubernetes mba hitehirizana angon-drakitra maharitra (maharitra). Kely ny isan'izy ireo, ary anisan'ny voalohany ny mpamatsy fitahirizana toy ny GCE PD, Ceph, AWS EBS ary ny hafa.

Nalefa niaraka tamin'i Kubernetes ireo plugins, ka izany no nahatonga azy ireo nahazo ny anarany - in-tree. Na izany aza, ho an'ny maro, tsy ampy ny andiana plugins toy izany. Ny mpanao asa tanana dia nanampy plugins tsotra tao amin'ny fototry ny Kubernetes tamin'ny alΓ lan'ny patch, ary avy eo dia nanangona ny Kubernetes azy manokana izy ireo ary nametraka izany tamin'ny lohamiliny. Saingy rehefa nandeha ny fotoana dia nahatsapa izany ireo mpamorona Kubernetes TRONDRO tsy voavaha ny olana. Mila ny olona fintana. Ary tamin'ny famoahana ny Kubernetes v1.2.0 dia niseho ...

Flexvolume plugin: fanjonoana kely indrindra

Ny mpamorona Kubernetes dia namorona ny FlexVolume plugin, izay rafitra lozisialy amin'ny fiovaovana sy fomba fiasa amin'ny fiaraha-miasa amin'ny mpamily Flexvolume napetraky ny mpamorona antoko fahatelo.

Andao hijanona ary hijery akaiky ny atao hoe mpamily FlexVolume. Azo antoka izany rakitra azo tanterahana (rakitra binary, script Python, script Bash, sns.), izay, rehefa tanterahana, dia mandray ny tohan-kevitry ny baiko ho fampidirana ary mamerina hafatra misy saha efa fantatra amin'ny endrika JSON. Amin'ny fivoriambe, ny tohan-kevitry ny andalana voalohany dia fomba iray foana, ary ny tohan-kevitra sisa no masontsivana.

Plugins volume ho an'ny fitahirizana Kubernetes: avy amin'ny Flexvolume mankany CSI
Diagram fifandraisana ho an'ny CIFS Shares ao amin'ny OpenShift. Flexvolume Driver - Eo afovoany

Minimum napetraka ny fomba toy izao ity:

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

Mampiasa fomba attach ΠΈ detach dia hamaritra ny scenario izay hihetsika ny kubelet amin'ny ho avy rehefa miantso ny mpamily. Misy fomba manokana koa expandvolume ΠΈ expandfs, izay tompon'andraikitra amin'ny fanovana ny haben'ny feo.

Ohatra amin'ny fanovana izay ampiana ny fomba expandvolume, ary miaraka amin'izany ny fahafahana manova habe amin'ny fotoana tena izy, dia azonao atao ny mahafantatra ny tenanao ny fisintonana fangatahanay ao amin'ny Rook Ceph Operator.

Ity misy ohatra iray amin'ny fampiharana ny mpamily Flexvolume amin'ny fiaraha-miasa amin'ny 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

Noho izany, rehefa avy nanomana ny tena executable rakitra, dia mila ampidiro ao amin'ny cluster Kubernetes ny mpamily. Ny mpamily dia tsy maintsy apetraka amin'ny node cluster tsirairay araka ny lalana efa voafaritra. Voafantina amin'ny alΓ lan'ny default:

/usr/libexec/kubernetes/kubelet-plugins/volume/exec/имя_поставщика_Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°~имя_Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°/

... fa rehefa mampiasa fizarana Kubernetes samihafa (OpenShift, Rancher...) dia mety ho hafa ny lalana.

Ny olana amin'ny Flexvolume: ahoana ny fomba fandrotsahana tsorakazo?

Ny fampiakarana ny mpamily Flexvolume amin'ny node cluster dia lasa asa tsy misy dikany. Rehefa vita ny fandidiana indray mandeha, dia mora ny miatrika toe-javatra misy node vaovao miseho ao amin'ny cluster: noho ny fanampian'ny node vaovao, mandeha ho azy scaling horizontaly, na - ny ratsy kokoa - fanoloana node noho ny tsy fahombiazana. Amin'ity tranga ity, ny asa miaraka amin'ny fitahirizana amin'ireo nodes ireo dia tokony hatao tsy azo atao, mandra-pametranao ny mpamily Flexvolume amin'ny tananao.

Ny vahaolana amin'ity olana ity dia iray amin'ireo Kubernetes primitives - DaemonSet. Rehefa misy node vaovao mipoitra ao amin'ny cluster, dia misy pod avy amin'ny DaemonSet, izay misy boky eo an-toerana mipetaka eo amin'ny lalana hahitana ny mpamily Flexvolume. Rehefa vita ny famoronana, ny pod dia mandika ny rakitra ilaina ho an'ny mpamily miasa amin'ny kapila.

Ity misy ohatra iray amin'ny DaemonSet toy izany amin'ny fametrahana plugin 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>

... ary ohatra iray amin'ny script Bash amin'ny fametrahana ny mpamily 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

Zava-dehibe ny tsy hanadino fa ny asa kopia tsy atomika. Misy ny vintana mety hanombohan'ny kubelet hampiasa ny mpamily alohan'ny hahavitan'ny dingana famatsiana azy, ka mahatonga ny rafitra hianjera. Ny fomba fiasa marina dia ny mandika voalohany ny rakitra mpamily amin'ny anarana hafa, ary avy eo dia mampiasa hetsika fanovana anarana atomika.

Plugins volume ho an'ny fitahirizana Kubernetes: avy amin'ny Flexvolume mankany CSI
Sarin'ny fiaraha-miasa amin'i Ceph ao amin'ny mpandraharaha Rook: ny mpamily Flexvolume amin'ny kisary dia ao anatin'ny mpiasan'ny Rook

Ny olana manaraka rehefa mampiasa mpamily Flexvolume dia ny fitahirizana ny ankamaroan'ny node cluster tsy maintsy apetraka ny logiciel ilaina amin'izany (ohatra ny fonosana ceph-common ho an'ny Ceph). Tamin'ny voalohany, ny plugin Flexvolume dia tsy natao hampiharana rafitra sarotra toy izany.

Ny vahaolana voalohany amin'ity olana ity dia azo jerena ao amin'ny fampiharana mpamily Flexvolume amin'ny operator Rook:

Ny mpamily mihitsy dia natao ho mpanjifa RPC. Ny socket IPC ho an'ny fifandraisana dia hita ao amin'ny lahatahiry mitovy amin'ny mpamily. Tsaroantsika fa ny mandika ny rakitra mpamily dia tsara ny mampiasa DaemonSet, izay mampifandray ny lahatahiry amin'ny mpamily ho toy ny boky. Rehefa avy mandika ny rakitra mpamily rook ilaina, ity pod ity dia tsy maty, fa mifandray amin'ny socket IPC amin'ny alΓ lan'ny boky mifatotra ho mpizara RPC feno. Ny fonosana ceph-common dia efa napetraka ao anaty container pod. Ny socket IPC dia miantoka fa ny kubelet dia hifandray amin'ny pod izay hita eo amin'ny node iray ihany. Tsotra ny zava-drehetra!..

Veloma, ny be fitiavana ... in-tree plugins!

Hitan'ny mpamorona Kubernetes fa roapolo ny isan'ny plugins ho fitahirizana ao anatin'ny fotony. Ary ny fiovan'ny tsirairay amin'izy ireo, na amin'ny fomba iray na amin'ny fomba hafa, dia mandalo amin'ny tsingerin'ny famoahana Kubernetes feno.

Hita fa hampiasa ny dikan-teny vaovao amin'ny plugin fitahirizana, mila manavao ny cluster manontolo ianao. Ho fanampin'izany dia mety ho gaga ianao fa tsy hifanaraka tampoka amin'ny kernel Linux ampiasainao ny dikan-teny vaovao Kubernetes ... Noho izany dia mamafa ny ranomasonao ianao ary, mikitro-nify, mandrindra ny fotoananao amin'ny mpitantana sy ny mpampiasa anao. manavao ny kernel Linux sy ny cluster Kubernetes. Miaraka amin'ny fotoana mety hitranga amin'ny fanomezana serivisy.

Ny toe-javatra dia mihoatra noho ny mampihomehy, sa tsy izany? Nazava tamin’ny fokonolona manontolo fa tsy mandeha ny fomba fiasa. Tamin'ny fanapahan-kevitra niniana natao, nanambara ny mpamorona Kubernetes fa tsy ekena ao anaty kernel intsony ireo plugins vaovao hiasa amin'ny fitahirizana. Ankoatr'izay, araka ny efa fantatsika dia nisy lesoka maromaro hita tamin'ny fampiharana ny plugin Flexvolume...

Ny plugin fanampiny farany ho an'ny volume ao amin'ny Kubernetes, CSI, dia nantsoina hanakatona ilay olana miaraka amin'ny fitahirizana data maharitra indray mandeha. Ny dika alpha azy, izay antsoina kokoa hoe Out-of-Tree CSI Volume Plugins, dia nambara tamin'ny famoahana. Kubernetes 1.9.

Interface fitahirizana kaontenera, na CSI 3000 tsorakazo!

Voalohany indrindra, tiako ny manamarika fa ny CSI dia tsy plugin volume fotsiny, fa tena izy Malagasy amin'ny famoronana singa manokana amin'ny fiasana amin'ny trano fanatobiana angona. Ny rafitra orkestra kaontenera toy ny Kubernetes sy Mesos dia tokony "hianatra" ny fomba fiasa miaraka amin'ireo singa nampiharina araka io fenitra io. Ary ankehitriny dia efa nianatra Kubernetes aho.

Inona ny firafitry ny plugin CSI ao amin'ny Kubernetes? Ny plugin CSI dia miasa miaraka amin'ny mpamily manokana (CSI mpamily) nosoratan'ny mpamorona antoko fahatelo. Ny mpamily CSI ao amin'ny Kubernetes dia tokony ahitana singa roa (pods):

  • maso - mitantana fitehirizana maharitra ivelany. Izy io dia ampiharina ho mpizara gRPC, izay ampiasaina ny primitive StatefulSet.
  • node - tompon'andraikitra amin'ny fametrahana fitahirizana maharitra amin'ny node cluster. Izy io koa dia ampiharina ho mpizara gRPC, saingy mampiasa ny primitive DaemonSet.

Plugins volume ho an'ny fitahirizana Kubernetes: avy amin'ny Flexvolume mankany CSI
Ahoana ny fiasan'ny plugin CSI ao amin'ny Kubernetes

Azonao atao ny mianatra momba ny antsipiriany hafa momba ny asan'ny CSI, ohatra, avy amin'ny lahatsoratra "Ny fahatakarana ny C.S.I." fandikana izay navoakanay herintaona lasa izay.

Ny tombony amin'ny fampiharana toy izany

  • Ho an'ny zavatra fototra toy ny fisoratana anarana mpamily ho an'ny node iray, ny mpamorona Kubernetes dia nametraka andiana kaontenera. Tsy mila mamorona valinteny JSON manana fahaiza-manao intsony ianao, toy ny natao tamin'ny plugin Flexvolume.
  • Raha tokony "mametaka" ireo rakitra azo tanterahana amin'ny node, dia izao no mampiditra pods ao amin'ny cluster. Izany no andrasantsika voalohany amin'ny Kubernetes: ny dingana rehetra dia mitranga ao anatin'ny kaontenera napetraka amin'ny alΓ lan'ny Kubernetes primitives.
  • Tsy mila manamboatra mpizara RPC sy mpanjifa RPC intsony ianao mba hampiharana mpamily sarotra. Ny mpanjifa dia nampiharin'ny mpamorona Kubernetes ho antsika.
  • Ny fandefasana tohan-kevitra hiasa amin'ny protocol gRPC dia mora kokoa, mora azo ary azo itokisana kokoa noho ny fandefasana azy ireo amin'ny tohan-kevitra andalana baiko. Mba hahatakarana ny fomba hanampiana ny fanohanan'ny metrika fampiasana volume amin'ny CSI amin'ny fampidirana fomba gRPC manara-penitra dia azonao atao ny mamaky: ny fisintonana fangatahanay ho an'ny mpamily vsphere-csi.
  • Ny fifandraisana dia mitranga amin'ny alΓ lan'ny sockets IPC, mba tsy ho very hevitra raha nandefa ny fangatahana tany amin'ny pod marina ny kubelet.

Mampahatsiahy anao zavatra ve ity lisitra ity? Ny tombony amin'ny CSI dia famahana ireo olana mitovy ireo, izay tsy noraisina tamin'ny famolavolana ny plugin Flexvolume.

hitany

CSI ho fenitra amin'ny fampiharana plugins manokana amin'ny fifandraisana amin'ny trano fanatobiana data dia noraisin'ny vondrom-piarahamonina. Ankoatr'izay, noho ny tombontsoany sy ny fahaizany, ny mpamily CSI dia noforonina na dia ho an'ny rafitra fitahirizana toy ny Ceph na AWS EBS, plugins ho an'ny fiaraha-miasa izay nampidirina tao amin'ny Kubernetes voalohany indrindra.

Tamin'ny fiandohan'ny taona 2019, plugins in-tree nambara fa lany andro. Mikasa ny hanohy hanohana ny plugin Flexvolume izahay, saingy tsy hamolavola fiasa vaovao ho azy.

Ny tenanay dia efa manana traikefa amin'ny fampiasana ceph-csi, vsphere-csi ary vonona ny hanampy amin'ity lisitra ity! Hatreto, ny CSI dia miatrika ny asa ampanaovina azy amin'ny banga, fa miandry isika.

Aza adino fa ny zava-baovao rehetra dia famerenana tsara ny taloha!

Sal

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment