Nā plugins volume no ka mālama ʻana i nā Kubernetes: mai Flexvolume a i CSI

Nā plugins volume no ka mālama ʻana i nā Kubernetes: mai Flexvolume a i CSI

I ka wā e noho ana ʻo Kubernetes i v1.0.0, aia nā plugins volume. Pono lākou e hoʻohui i nā ʻōnaehana i nā Kubernetes no ka mālama ʻana i ka ʻikepili pahu hoʻomau (mau). He liʻiliʻi ko lākou helu, a ma waena o nā mea mua i mālama ʻia e like me GCE PD, Ceph, AWS EBS a me nā mea ʻē aʻe.

Hāʻawi ʻia nā plugins me Kubernetes, ʻo ia ke kumu i loaʻa ai ko lākou inoa - in-tree. Eia nō naʻe, no nā mea he nui, ʻaʻole lawa ka hoʻonohonoho o ia mau plugins. Hoʻohui nā mea hana lima i nā plugins maʻalahi i ke kumu Kubernetes me ka hoʻohana ʻana i nā patch, a ma hope o lākou i hōʻuluʻulu ai i kā lākou Kubernetes ponoʻī a hoʻokomo iā ia ma kā lākou mau kikowaena. Akā i ka wā lōʻihi, ua ʻike nā mea hoʻomohala Kubernetes iʻa ʻaʻole hiki ke hoʻoponopono ʻia ka pilikia. Pono nā kānaka koʻokoʻo lawaiʻa. A i ka hoʻokuʻu ʻana o Kubernetes v1.2.0 ua ʻike ʻia ...

Flexvolume plugin: liʻiliʻi i ke koʻokoʻo lawaiʻa

Ua hoʻokumu nā mea hoʻomohala Kubernetes i ka plugin FlexVolume, kahi hoʻolālā kūpono o nā ʻano a me nā ʻano hana no ka hana ʻana me nā mea hoʻokele Flexvolume i hoʻokō ʻia e nā mea hoʻomohala ʻaoʻao ʻekolu.

E kū a nānā pono i ke ʻano o ka mea hoʻokele FlexVolume. He mea maopopo keia waihona hoʻokō (file binary, Python script, Bash script, etc.), i ka wā e hoʻokō ʻia ai, lawe i nā manaʻo hoʻopaʻapaʻa laina kauoha ma ke ʻano he hoʻokomo a hoʻihoʻi i kahi memo me nā kahua i ʻike mua ʻia i ka palapala JSON. Ma ka ʻaha kūkā, ʻo ka hoʻopaʻapaʻa laina kauoha mua he ʻano hana mau, a ʻo ke koena hoʻopaʻapaʻa kona mau palena.

Nā plugins volume no ka mālama ʻana i nā Kubernetes: mai Flexvolume a i CSI
ʻO ke kiʻikuhi pili no ka CIFS Shares ma OpenShift. Keaukaha Flexvolume - Aia ma ke kikowaena

Hoʻonohonoho liʻiliʻi o nā ʻano hana ʻano like ʻole o kēia:

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

Ke hoʻohana nei i nā ʻano hana attach и detach e wehewehe i ke ʻano e hana ai ke kubelet i ka wā e hiki mai ana i ke kāhea ʻana i ka mea hoʻokele. Aia kekahi mau ala kūikawā expandvolume и expandfs, nona ke kuleana no ka hoʻololi hou ʻana i ka leo.

Ma keʻano he laʻana o nā hoʻololi i hoʻohui ʻia e ke ʻano expandvolume, a me ka hiki ke hoʻololi i ka nui i ka manawa maoli, hiki iā ʻoe ke hoʻomaʻamaʻa iā ʻoe iho ko makou noi huki i Rook Ceph Operator.

A eia kahi hiʻohiʻona o ka hoʻokō ʻana o ka mea hoʻokele Flexvolume no ka hana ʻana me 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

No laila, ma hope o ka hoʻomākaukau ʻana i ka faila hoʻokō maoli, pono ʻoe e hoʻouka i ka mea hoʻokele i ka hui Kubernetes. Pono ka mea hoʻokele ma kēlā me kēia puʻupuʻu puʻupuʻu e like me ke ala i koho mua ʻia. Ma ka paʻamau, ua koho ʻia:

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

... akā i ka hoʻohana ʻana i nā māhele Kubernetes like ʻole (OpenShift, Rancher...) ʻokoʻa paha ke ala.

Nā pilikia Flexvolume: pehea e hoʻolei pono ai i ke koʻokoʻo?

ʻO ka hoʻouka ʻana i ka mea hoʻokele Flexvolume i nā puʻupuʻu puʻupuʻu i lilo i hana ʻole. Ma hope o ka hana lima ʻana i hoʻokahi manawa, hiki ke maʻalahi ke ʻike i kahi kūlana i ʻike ʻia ai nā node hou i loko o ka pūʻulu: ma muli o ka hoʻohui ʻana o kahi node hou, ka hoʻonui ʻana i ka pae ākea, a i ʻole - ʻoi aku ka maikaʻi - ke hoʻololi ʻana i kahi node ma muli o kahi hana hewa. I kēia hihia, pono e hana me ka waiho ʻana ma kēia mau nodes hikiʻole, a hiki i kou hoʻohui lima lima i ka mea hoʻokele Flexvolume iā lākou.

ʻO ka hopena o kēia pilikia kekahi o nā Kubernetes primitives - DaemonSet. Ke ʻike ʻia kahi node hou i loko o ka pūʻulu, loaʻa iā ia kahi pod mai kā mākou DaemonSet, kahi i hoʻopili ʻia kahi leo kūloko ma ke ala e ʻike ai i nā mea hoʻokele Flexvolume. Ma ka holomua o ka hana ʻana, e kope ka pod i nā faila pono no ka mea hoʻokele e hana i ka disk.

Eia kahi hiʻohiʻona o kahi DaemonSet no ka waiho ʻana i kahi 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>

... a me kahi laʻana o kahi palapala Bash no ka waiho ʻana i ka mea hoʻokele 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 mai poina i ka hana kope aole atomika. Loaʻa ka manawa nui e hoʻomaka ka kubelet e hoʻohana i ka mea hoʻokele ma mua o ka pau ʻana o kāna kaʻina hana hoʻolako, e hāʻule ai ka ʻōnaehana. ʻO ke ala kūpono e kope mua i nā faila ma lalo o kahi inoa ʻē aʻe, a laila e hoʻohana i kahi hana hou atomic.

Nā plugins volume no ka mālama ʻana i nā Kubernetes: mai Flexvolume a i CSI
ʻO ke kiʻikuhi o ka hana ʻana me Ceph i ka mea hoʻohana Rook: aia ka mea hoʻokele Flexvolume ma ke kiʻikuhi i loko o ka luna Rook

ʻO ka pilikia aʻe i ka wā e hoʻohana ai i nā mea hoʻokele Flexvolume ʻo ia no ka mālama nui ʻana ma kahi node cluster pono e hoʻokomo i ka polokalamu pono no kēia (no ka laʻana, ka pūʻolo ceph-maʻamau no Ceph). I ka wā mua, ʻaʻole i hoʻolālā ʻia ka Flexvolume plugin e hoʻokō i nā ʻōnaehana paʻakikī.

Hiki ke ʻike ʻia kahi hopena kumu i kēia pilikia ma ka hoʻokō ʻana o ka mea hoʻokele Flexvolume o ka mea hoʻohana Rook:

Hoʻolālā ʻia ka mea hoʻokele ma ke ʻano he mea kūʻai aku RPC. Aia ke kumu IPC no ke kamaʻilio ʻana ma ka papa kuhikuhi like me ka mea hoʻokele ponoʻī. Hoʻomanaʻo mākou e kope i nā faila mea hoʻokele e maikaʻi ke hoʻohana iā DaemonSet, kahi e hoʻopili ai i ka papa kuhikuhi me ka mea hoʻokele ma ke ʻano he leo. Ma hope o ke kope ʻana i nā faila hoʻokele rook pono, ʻaʻole make kēia pod, akā pili i ke kumu IPC ma o ka leo i hoʻopili ʻia ma ke ʻano he kikowaena RPC piha. Ua hoʻokomo ʻia ka pūʻolo ceph-common i loko o ka pahu pod. ʻO ke kumu IPC e hōʻoiaʻiʻo e kamaʻilio ka kubelet me ka pod i loaʻa ma ka node hoʻokahi. He mea maʻalahi nā mea akamai a pau!..

Aloha ʻoe, kā mākou aloha ... in-tree plugins!

Ua ʻike nā mea hoʻomohala Kubernetes he iwakālua ka nui o nā plugins no ka mālama ʻana i loko o ke kumu. A ʻo ka hoʻololi ʻana i kēlā me kēia o lākou, i kekahi ala a i ʻole, hele i loko o ka pōʻai hoʻokuʻu Kubernetes piha.

ʻIke ʻia e hoʻohana i ka mana hou o ka plugin storage, pono ʻoe e hōʻano hou i ka pūʻulu holoʻokoʻa. Ma waho aʻe o kēia, e kāhāhā paha ʻoe no ka lilo ʻana o ka mana hou o Kubernetes i mea like ʻole me ka Linux kernel āu e hoʻohana nei ... No laila holoi ʻoe i kou mau waimaka a me ka ʻuʻu ʻana i kou mau niho, e hui pū me kāu hoʻokele a me nā mea hoʻohana i ka manawa hōʻano hou i ka Linux kernel a me Kubernetes cluster. Me ka downtime hiki ke hoʻolako i nā lawelawe.

ʻOi aku ke kūlana ma mua o ka comical, ʻaʻole ʻoe e manaʻo? Ua maopopo i ke kaiāulu holoʻokoʻa ʻaʻole i holo ka hana. Ma kahi hoʻoholo makemake, hoʻolaha nā mea hoʻomohala Kubernetes ʻaʻole e ʻae hou ʻia nā plugins hou no ka hana ʻana me ka waiho ʻana i loko o ka kernel. Eia kekahi, e like me kā mākou i ʻike ai, ua ʻike ʻia kekahi mau hemahema i ka hoʻokō ʻana o ka Flexvolume plugin...

Ua kāhea ʻia ka plugin hou loa no nā puke ma Kubernetes, CSI, e pani i ka pilikia me ka mālama ʻana i ka ʻikepili hoʻomau i hoʻokahi manawa. ʻO kāna alpha alpha, i kapa ʻia ʻo Out-of-Tree CSI Volume Plugins, i hoʻolaha ʻia ma ka hoʻokuʻu. Nā Kubernetes 1.9.

ʻO ke koʻokoʻo wili pahu pahu pahu, a i ʻole CSI 3000!

ʻO ka mea mua, makemake wau e hoʻomaopopo ʻaʻole ʻo CSI kahi plugin volume wale nō, akā he mea maoli kūlana ma ka hana ʻana i nā ʻāpana maʻamau no ka hana ʻana me nā hale waihona ʻikepili. ʻO nā ʻōnaehana orchestration pahu e like me Kubernetes a me Mesos i manaʻo ʻia e "aʻo" pehea e hana ai me nā ʻāpana i hoʻokō ʻia e like me kēia maʻamau. A i kēia manawa ua aʻo mua wau i nā Kubernetes.

He aha ke ʻano o ka plugin CSI ma Kubernetes? Hoʻohana ka plugin CSI me nā mea hoʻokele kūikawā (Nā mea hoʻokele CSI) i kākau ʻia e nā mea hoʻomohala ʻaoʻao ʻekolu. Pono ka mea hoʻokele CSI ma Kubernetes i ʻelua ʻāpana (pods):

  • eiioeieeae - mālama i nā waihona hoʻomau mau o waho. Hoʻohana ʻia ia ma ke ʻano he kikowaena gRPC, kahi i hoʻohana ʻia ai ka primitive StatefulSet.
  • wahi — ʻo ia ke kuleana no ka hoʻokomo ʻana i ka waiho ʻana i nā nodes cluster. Hoʻohana ʻia ia ma ke ʻano he kikowaena gRPC, akā hoʻohana ia i ka primitive DaemonSet.

Nā plugins volume no ka mālama ʻana i nā Kubernetes: mai Flexvolume a i CSI
Pehea e hana ai ka plugin CSI ma Kubernetes

Hiki iā ʻoe ke aʻo e pili ana i kekahi mau kikoʻī ʻē aʻe o ka hana a CSI, no ka laʻana, mai ka ʻatikala "ʻO ka hoʻomaopopo ʻana i ka C.S.I.», ka unuhi ana ua paʻi mākou i hoʻokahi makahiki i hala.

ʻO nā pōmaikaʻi o ia hoʻokō

  • No nā mea maʻamau e like me ka hoʻopaʻa inoa ʻana i kahi mea hoʻokele no ka node, ua hoʻokō nā mea hoʻomohala Kubernetes i kahi pūʻulu pahu. ʻAʻole pono ʻoe e hana i kahi pane JSON me nā mea hiki iā ʻoe iho, e like me ka mea i hana ʻia no ka Flexvolume plugin.
  • Ma kahi o ka "hoʻokuʻu" i nā faila i hiki ke hoʻokō ʻia ma nā nodes, ke hoʻouka nei mākou i nā pods i ka hui. ʻO kēia ka mea a mākou i manaʻo mua ai mai nā Kubernetes: aia nā kaʻina hana a pau i loko o nā ipu i hoʻohana ʻia me nā kumu mua o Kubernetes.
  • ʻAʻole pono ʻoe e hoʻomohala i kahi kikowaena RPC a me ka mea kūʻai aku RPC e hoʻokō i nā mea hoʻokele paʻakikī. Ua hoʻokō ʻia ka mea kūʻai aku e nā mea hoʻomohala Kubernetes.
  • ʻOi aku ka maʻalahi o ka hoʻopaʻapaʻa ʻana e hana ma luna o ka protocol gRPC, maʻalahi a hilinaʻi hoʻi ma mua o ka hāʻawi ʻana iā lākou ma o nā hoʻopaʻapaʻa laina kauoha. No ka hoʻomaopopo ʻana pehea e hoʻohui ai i ke kākoʻo no ka nui o ka hoʻohana ʻana i ka nui i ka CSI ma ka hoʻohui ʻana i kahi ala gRPC maʻamau, hiki iā ʻoe ke heluhelu: ko makou noi huki no ka mea hoʻokele vsphere-csi.
  • Hiki ke kamaʻilio ma o nā kumu IPC, i ʻole e huikau inā hoʻouna ke kubelet i ke noi i ka pod kūpono.

Ke hoʻomanaʻo nei kēia papa inoa iā ʻoe i kekahi mea? ʻO nā pōmaikaʻi o CSI ka hoʻoponopono ʻana i kēlā mau pilikia like, ʻaʻole i noʻonoʻo ʻia i ka wā e hoʻomohala ai i ka plugin Flexvolume.

haʻina

ʻO CSI ma ke ʻano he maʻamau no ka hoʻokō ʻana i nā plugins maʻamau no ka launa pū ʻana me nā hale kūʻai ʻikepili i hoʻokipa maikaʻi ʻia e ke kaiāulu. Eia kekahi, ma muli o ko lākou pono a me ka versatility, ua hana ʻia nā mea hoʻokele CSI no nā ʻōnaehana mālama e like me Ceph a i ʻole AWS EBS, nā plugins no ka hana ʻana i hoʻohui ʻia i ka mana mua loa o Kubernetes.

I ka hoʻomaka ʻana o 2019, nā plugins in-tree ua haʻi ʻia he kahiko. Hoʻolālā mākou e hoʻomau i ke kākoʻo ʻana i ka plugin Flexvolume, akā ʻaʻole e hoʻomohala i nā hana hou no ia.

Loaʻa iā mākou iho ka ʻike e hoʻohana ana i ka ceph-csi, vsphere-csi a ua mākaukau e hoʻohui i kēia papa inoa! I kēia manawa, ke hana nei ʻo CSI i nā hana i hāʻawi ʻia iā ia me kahi bang, akā e kali mākou a ʻike.

Mai poina ʻo nā mea hou a pau he manaʻo hou maikaʻi i ka mea kahiko!

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka