Ngwa mgbakwunye olu maka nchekwa Kubernetes: site na Flexvolume ruo CSI

Ngwa mgbakwunye olu maka nchekwa Kubernetes: site na Flexvolume ruo CSI

Laa azụ mgbe Kubernetes ka dị v1.0.0, enwere plugins olu. Ha chọrọ ijikọ sistemu na Kubernetes maka ịchekwa data akpa na-adịgide adịgide (na-adịgide adịgide). Ọnụ ọgụgụ ha dị ntakịrị, na n'ime ndị mbụ bụ ndị na-enye nchekwa dị ka GCE PD, Ceph, AWS EBS na ndị ọzọ.

Ewepụtara plugins na Kubernetes, nke mere na ha nwetara aha ha - in-osisi. Otú ọ dị, nye ọtụtụ ndị, ndị dị adị nke plugins ndị dị otú ahụ tụgharịrị ezughị ezu. Ndị ọrụ nka gbakwunyere plugins dị mfe na isi Kubernetes site na iji patches, emesia ha chịkọtara Kubernetes nke ha ma tinye ya na sava ha. Mana ka oge na-aga, ndị mmepe Kubernetes ghọtara nke ahụ azụ enweghị ike idozi nsogbu ahụ. Ndị mmadụ chọrọ mkpanaka azu. Na ntọhapụ nke Kubernetes v1.2.0 ọ pụtara ...

Ngwa mgbakwunye Flexvolume: mkpanaka ịkụ azụ pere mpe

Ndị mmepe Kubernetes mepụtara ngwa mgbakwunye FlexVolume, nke bụ ụkpụrụ ezi uche dị na ya nke mgbanwe na ụzọ maka ịrụ ọrụ na ndị ọkwọ ụgbọ ala Flexvolume nke ndị nrụpụta ndị ọzọ mebere.

Ka anyị kwụsị wee lebakwuo anya n'ihe ọkwọ ụgbọ ala FlexVolume bụ. Nke a bụ ụfọdụ executable faịlụ (faịlụ ọnụọgụ abụọ, script Python, Bash script, wdg), nke, mgbe emechara ya, na-ewere arụmụka ahịrị iwu dị ka ntinye wee weghachi ozi nwere mpaghara amagoro mbụ na usoro JSON. Site na nkwekọrịta, arụmụka ahịrị iwu mbụ bụ usoro mgbe niile, arụmụka ndị fọdụrụ bụ paramita ya.

Ngwa mgbakwunye olu maka nchekwa Kubernetes: site na Flexvolume ruo CSI
Eserese njikọ maka CIFS Shares na OpenShift. Ọkwọ ụgbọ ala Flexvolume - Right na Center

Usoro kacha nta yiri nke a:

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

Iji Ụzọ attach и detach ga-akọwapụta ọnọdụ nke kubelet ga-eme n'ọdịnihu mgbe ị na-akpọ onye ọkwọ ụgbọ ala. E nwekwara ụzọ pụrụ iche expandvolume и expandfs, bụ ndị na-ahụ maka ịhazigharị olu na-agbanwe agbanwe.

Dị ka ihe atụ nke mgbanwe nke usoro na-agbakwụnye expandvolume, na site n'ikike ịmegharị mpịakọta ozugbo, ị nwere ike mara onwe gị nke ọma arịrịọ ịdọrọ anyị na Rook Ceph Operator.

Ma ebe a bụ ọmụmaatụ nke mmejuputa onye ọkwọ ụgbọ ala Flexvolume maka ịrụ ọrụ na 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

Yabụ, mgbe ị kwadochara faịlụ nke enwere ike ime, ịkwesịrị ịme ya bulite onye ọkwọ ụgbọ ala na ụyọkọ Kubernetes. Onye ọkwọ ụgbọ ala ga-anọrịrị n'ọnụ ọnụ ụyọkọ nke ọ bụla dịka ụzọ a kara aka siri dị. Site na ndabara ahọpụtara ya:

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

... ma mgbe ị na-eji nkesa Kubernetes dị iche iche (OpenShift, Rancher ...) ụzọ nwere ike ịdị iche.

Nsogbu Flexvolume: otu esi atụba mkpanaka ịkụ azụ n'ụzọ ziri ezi?

Ibulite ọkwọ ụgbọ ala Flexvolume gaa na ọnụ ụyọkọ tụgharịrị bụrụ ọrụ na-adịghị mkpa. N'ịbụ onye ejiri aka rụọ ọrụ ahụ otu ugboro, ọ dị mfe izute ọnọdụ ebe ọhụụ ọhụrụ na-apụta na ụyọkọ ahụ: n'ihi mgbakwunye nke oghere ọhụrụ, nkwụsịtụ kwụ ọtọ na-akpaghị aka, ma ọ bụ - nke ka njọ - ngbanwe nke ọnụ n'ihi adịghị arụ ọrụ. N'okwu a, a ga-arụ ọrụ na nchekwa na ọnụ ndị a agaghị ekwe omume, ruo mgbe ị ka ji aka tinye Flexvolume ọkwọ ụgbọala na ha.

Ngwọta nke nsogbu a bụ otu n'ime Kubernetes primitives - DaemonSet. Mgbe ọnụ ọhụrụ pụtara na ụyọkọ ahụ, ọ na-ebunye pọd sitere na DaemonSet anyị na-akpaghị aka, bụ nke etinyere olu mpaghara n'akụkụ ụzọ ịchọta ndị ọkwọ ụgbọ ala Flexvolume. Mgbe emepụtara nke ọma, pọd ahụ na-ebipụta faịlụ ndị dị mkpa maka onye ọkwọ ụgbọ ala ka ọ rụọ ọrụ na diski.

Nke a bụ ọmụmaatụ nke DaemonSet dị otú ahụ maka ịtọpụta ngwa mgbakwunye 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>

... na ọmụmaatụ nke edemede Bash maka ịtọọ ọkwọ ụgbọ ala 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

Ọ dị mkpa ka ị ghara ichefu na ọrụ oyiri ọ bụghị atọm. Enwere nnukwu ohere na kubelet ga-amalite iji onye ọkwọ ụgbọ ala tupu usoro nhazi ya agwụla, na-eme ka usoro ahụ daa. Ụzọ ziri ezi bụ ibu ụzọ detuo faịlụ ndị ọkwọ ụgbọ ala n'okpuru aha dị iche, wee jiri ọrụ rename atomịk.

Ngwa mgbakwunye olu maka nchekwa Kubernetes: site na Flexvolume ruo CSI
Eserese nke iso Ceph na-arụ ọrụ na onye ọrụ Rook: onye ọkwọ ụgbọ ala Flexvolume dị na eserese ahụ dị n'ime onye nnọchi anya Rook.

Nsogbu na-esote mgbe ị na-eji Flexvolume ọkwọ ụgbọ ala bụ nke ahụ maka ọtụtụ nchekwa na ọnụ ụyọkọ Ngwanrọ dị mkpa maka nke a ga-etinyerịrị (dịka ọmụmaatụ, ngwugwu ceph-nkịtị maka Ceph). Na mbụ, e mebere ngwa mgbakwunye Flexvolume iji mejuputa usoro mgbagwoju anya dị otú ahụ.

Enwere ike ịhụ ngwọta izizi maka nsogbu a na mmejuputa ọkwọ ụgbọ ala Flexvolume nke onye ọrụ Rook:

Emebere ọkwọ ụgbọ ala n'onwe ya ka onye ahịa RPC. Oghere IPC maka nzikọrịta ozi dị n'otu ndekọ aha onye ọkwọ ụgbọ ala n'onwe ya. Anyị na-echeta na idetu faịlụ ọkwọ ụgbọ ala ọ ga-adị mma iji DaemonSet, nke jikọtara ndekọ na onye ọkwọ ụgbọ ala dịka olu. Mgbe emechara faịlụ ọkwọ ụgbọ ala dị mkpa, pọd a anaghị anwụ anwụ, kama ọ na-ejikọ na oghere IPC site na olu agbakwunyere dị ka sava RPC zuru oke. Awụnyelarị ngwungwu ceph-common n'ime akpa pọd. Oghere IPC na-achọpụta na kubelet ga-ekwurịta okwu na pọd nke dị n'otu ọnụ ọnụ. Ihe niile nwere ọgụgụ isi dị mfe! ..

Daalụ, ịhụnanya anyị na-ahụ n'anya ... n'ime osisi plugins!

Ndị mmepe Kubernetes chọpụtara na ọnụọgụ plugins maka nchekwa n'ime isi bụ iri abụọ. Na mgbanwe na nke ọ bụla n'ime ha, otu ụzọ ma ọ bụ ọzọ, na-aga site na Kubernetes ntọhapụ okirikiri zuru ezu.

Ọ tụgharịrị na iji ụdị ngwa mgbakwunye nchekwa ọhụrụ, ịkwesịrị imelite ụyọkọ ahụ dum. Na mgbakwunye na nke a, ọ nwere ike iju gị anya na ụdị Kubernetes ọhụrụ ahụ ga-adaba na mberede na Linux kernel ị na-eji ... Ya mere, ị na-ehichapụ anya mmiri gị, na-ata ikikere ezé, na-ejikọta na njikwa gị na ndị ọrụ oge. melite Linux kernel na Kubernetes ụyọkọ. Na oge o kwere omume na-enye ọrụ.

Ọnọdụ ahụ karịrị ihe ọchị, ị naghị eche? Ọ bịara doo ndị obodo niile anya na usoro a anaghị arụ ọrụ. Site na mkpebi siri ike, ndị mmepe Kubernetes na-ekwupụta na plugins ọhụrụ maka ịrụ ọrụ na nchekwa agaghịzi anabata n'ime kernel. Na mgbakwunye, dị ka anyị maralarị, a chọpụtara ọtụtụ adịghị ike na mmejuputa ngwa mgbakwunye Flexvolume ...

Ngwa mgbakwunye ọhụrụ agbakwunyere maka mpịakọta na Kubernetes, CSI, ka akpọrọ ka ọ mechie okwu ahụ na nchekwa data na-adịgide adịgide ozugbo na ihe niile. Ụdị alfa ya, nke a na-akpọ nke ọma dị ka Plugins Volume CSI Out-of-Tree, ka ekwuputara na ntọhapụ. Ukpomkpu 1.9.

Interface Nchekwa akpa, ma ọ bụ CSI 3000 mkpanaka!

Nke mbụ, ọ ga-amasị m ịmara na CSI abụghị naanị ngwa mgbakwunye olu, mana ọ bụ n'ezie ọkọlọtọ na ịmepụta ihe ndị omenala maka ịrụ ọrụ na ụlọ nkwakọba ihe data. Sistemụ ihe eji ebugharị akpa dị ka Kubernetes na Mesos kwesịrị ka “mụta” ka esi arụ ọrụ na akụrụngwa etinyere dịka ọkọlọtọ a siri dị. Ma ugbu a, amụtala m Kubernetes.

Kedu ihe bụ nhazi nke ngwa mgbakwunye CSI na Kubernetes? Ihe mgbakwunye CSI na-arụ ọrụ na ndị ọkwọ ụgbọ ala pụrụ iche (Ndị ọkwọ ụgbọ ala CSI) nke ndị mmepe nke atọ dere. Onye ọkwọ ụgbọ ala CSI na Kubernetes kwesịrị ịnwe obere ihe abụọ (pods):

  • ihe njikwa - na-achịkwa ebe nchekwa na-adịgide adịgide na mpụga. A na-emejuputa ya dị ka ihe nkesa gRPC, nke ejiri ihe ochie mee ihe StatefulSet.
  • ọnụ - na-ahụ maka ịkwanye nchekwa na-adịgide adịgide na ọnụ ụyọkọ. A na-emejuputa ya dị ka ihe nkesa gRPC, mana ọ na-eji nke mbụ DaemonSet.

Ngwa mgbakwunye olu maka nchekwa Kubernetes: site na Flexvolume ruo CSI
Kedu ka ngwa mgbakwunye CSI si arụ ọrụ na Kubernetes

Ị nwere ike ịmụta maka nkọwa ndị ọzọ nke ọrụ CSI, dịka ọmụmaatụ, site na isiokwu "Ịghọta C.S.I.», nsụgharị nke anyị bipụtara otu afọ gara aga.

Uru nke mmejuputa dị otú ahụ

  • Maka ihe ndị bụ isi dị ka ịdenye onye ọkwọ ụgbọ ala maka ọnụ ọnụ, ndị mmepe Kubernetes mebere otu akpa. Ị dịghịzi mkpa iwepụta nzaghachi JSON nwere ike n'onwe gị, dịka e mere maka ngwa mgbakwunye Flexvolume.
  • Kama “ịtụgharị” faịlụ ndị enwere ike ime ya na ọnụ, anyị na-ebugo pọd na ụyọkọ ahụ. Nke a bụ ihe anyị na-atụ anya na mbụ n'aka Kubernetes: usoro niile na-eme n'ime arịa etinyere site na iji Kubernetes primitives.
  • Ị dịghịzi mkpa ịmepụta ihe nkesa RPC na onye ahịa RPC iji mejuputa ndị ọkwọ ụgbọala mgbagwoju anya. Ndị mmepe Kubernetes mebere onye ahịa ahụ maka anyị.
  • Ịfefe arụmụka iji rụọ ọrụ na protocol gRPC dị mfe karịa, mgbanwe na ntụkwasị obi karịa ịgafe ha na arụmụka ahịrị iwu. Iji ghọta otu esi etinye nkwado maka metrik ojiji olu na CSI site na ịgbakwunye usoro gRPC ahaziri ahazi, ị nwere ike ịgụ: arịrịọ ịdọrọ anyị maka onye ọkwọ ụgbọ ala vsphere-csi.
  • Nkwukọrịta na-apụta site na oghere IPC, ka ọ ghara inwe mgbagwoju anya ma kubelet zitere arịrịọ ahụ na pọd nri.

Ndepụta a ọ na-echetara gị ihe ọ bụla? Uru nke CSI bụ na-edozi nsogbu ndị ahụ, nke etinyeghị n'uche mgbe ị na-emepụta ngwa mgbakwunye Flexvolume.

Nchoputa

Ndị obodo nabatara CSI dị ka ọkọlọtọ maka mmejuputa plugins omenala maka imekọrịta ihe na ụlọ nkwakọba ihe data. Ọzọkwa, n'ihi uru na ntụgharị ha, a na-emepụta ndị ọkwọ ụgbọ ala CSI ọbụlagodi maka sistemụ nchekwa dị ka Ceph ma ọ bụ AWS EBS, plugins maka ịrụ ọrụ nke etinyere na ụdị mbụ nke Kubernetes.

Na mmalite nke 2019, plugins n'ime osisi ekwuputala na agazighi ya. Anyị na-eme atụmatụ ịga n'ihu na-akwado ngwa mgbakwunye Flexvolume, mana agaghị arụpụta ọrụ ọhụrụ maka ya.

Anyị onwe anyị enweela ahụmịhe site na iji ceph-csi, vsphere-csi ma dị njikere ịgbakwunye na ndepụta a! Ka ọ dị ugbu a, CSI na-arụ ọrụ ndị e kenyere ya na bang, mana anyị ga-echere wee hụ.

Echefula na ihe ọ bụla ọhụrụ bụ ezigbo ịtụgharị uche nke ochie!

PS

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment