Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI

Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI

I tua a o iai pea Kubernetes v1.0.0, sa i ai le tele o plugins. Sa mana'omia e fa'afeso'ota'i faiga i Kubernetes mo le teuina o fa'amaumauga tumau (tumau). E laʻititi la latou numera, ma o loʻo i ai muamua i latou na tuʻuina atu mea e teu ai e pei o GCE PD, Ceph, AWS EBS ma isi.

O plugini na tuʻuina atu faʻatasi ma Kubernetes, o le mafuaʻaga lea na maua ai o latou igoa - in-tree. Ae ui i lea, mo le toʻatele, o le seti o loʻo i ai nei plugins na foliga mai e le lava. Na fa'aopoopoina e le au tufuga ni fa'apipi'i faigofie i le Kubernetes core e fa'aaoga ai patches, mulimuli ane na latou fa'apotopotoina a latou lava Kubernetes ma fa'apipi'i i luga o latou 'au'aunaga. Ae i le aluga o taimi, na iloa e le au atinaʻe Kubernetes lena mea iʻa e le mafai ona foia le faafitauli. Manaomia e tagata tootoo. Ma i le tatalaina o Kubernetes v1.2.0 na aliali mai ...

Flexvolume plugin: la'ititi la'au fagota

Na faia e le au atinaʻe Kubernetes le FlexVolume plugin, o se faʻavae talafeagai o fesuiaiga ma metotia mo le galulue ai ma avetaavale Flexvolume na faʻatinoina e le au atinaʻe lona tolu.

Se'i o tatou tu ma va'ai toto'a po'o le a le ta'avale FlexVolume. E mautinoa lenei faila faila (faila faila, Python script, Bash script, ma isi), lea, pe a faʻataunuʻuina, e faʻaaogaina finauga laina faʻatonu e fai ma faʻaoga ma toe faʻafoʻi mai se feʻau faʻatasi ai ma fanua masani i le JSON format. E ala i le faʻasalalauga, o le finauga muamua o le laina o le faʻatonuga e masani lava o se metotia, ma o finauga o loʻo totoe o ona faʻamau.

Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI
Fa'afanua feso'ota'iga mo CIFS Shares i OpenShift. Flexvolume Avetaavale - Taumatau i le Nofoaga Tutotonu

Seti aupito maualalo o metotia foliga faapenei:

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

Fa'aaogaina Metotia attach и detach o le a faʻamatalaina le faʻaaliga o le a galue ai le kubelet i le lumanaʻi pe a valaʻau le avetaavale. E iai foʻi auala faʻapitoa expandvolume и expandfs, lea e nafa ma le dynamically resizing le leo.

Mo se faʻataʻitaʻiga o suiga e faʻaopoopo e le metotia expandvolume, ma faʻatasi ai ma le malosi e toe faʻaleleia ai voluma i le taimi moni, e mafai ona e masani ai la matou toso talosaga i Rook Ceph Operator.

Ma o se faʻataʻitaʻiga lenei o le faʻatinoina o le avetaavale Flexvolume mo le galulue ma 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

O lea la, a maeʻa ona saunia le faila faila moni, e te manaʻomia tu'u le aveta'avale ile fuifui Kubernetes. O le aveta'avale e tatau ona tu i luga o node fuifui ta'itasi e tusa ai ma se ala na mua'i fuafuaina. E ala i le faaletonu na filifilia ai:

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

... ae a faʻaaogaina faʻasalalauga eseese Kubernetes (OpenShift, Rancher...) atonu e ese le ala.

Fa'afitauli Flexvolume: fa'afefea ona lafo sa'o le tootoo?

O le fa'auluina o le aveta'avale Flexvolume i nodes fuifui na fa'aalia o se galuega e le fa'atauva'a. O le faia o le taʻaloga ma le lima faʻatasi, e faigofie ona faʻafeiloaʻi i se tulaga e aliali mai ai ni node fou i le fuifui: ona o le faʻaopoopoina o se node fou, faʻasolosolo faʻasolosolo faʻasolosolo, pe - o le a le mea e sili atu ona leaga - suia o se node ona o se faaletonu. I lenei tulaga, e tatau ona faia galuega ma le teuina i luga o nei nodes e le mafai, se'ia e fa'aopoopo pea ma le lima le ta'avale Flexvolume ia i latou.

O le fofo i lenei faʻafitauli o se tasi o Kubernetes primitives - DaemonSet. A aliali mai se node fou i le fuifui, e otometi lava ona i ai se pod mai le tatou DaemonSet, lea e faʻapipiʻi ai se voluma faʻapitonuʻu i luga o le ala e suʻe ai avetaavale Flexvolume. I le manuia o le fausiaina, e kopiina e le pod faila e manaʻomia mo le avetaavale e galue i le tisiki.

O se faʻataʻitaʻiga lea o se DaemonSet mo le tuʻuina atu o se Flexvolume plugin:

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>

... ma se faʻataʻitaʻiga o le Bash script mo le tuʻuina atu o le avetaavale 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

E taua le aua neʻi galo o le gaioiga kopi e le atomic. E maualuga le avanoa e amata ai e le kubelet ona faʻaaoga le avetaʻavale aʻo leʻi maeʻa lana faʻagaioiga tuʻuina atu, ma mafua ai ona faʻalavelave le faiga. O le auala saʻo o le kopi muamua o faila avetaʻavale i lalo o se igoa ese, ona faʻaaoga lea o le faʻaogaina o le igoa atomic.

Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI
Ata o le galulue faatasi ma Ceph i le Rook operator: o le avetaavale Flexvolume i le ata o loʻo i totonu o le Rook agent

O le isi fa'afitauli pe a fa'aaogaina ta'avale Flexvolume o le tele lea o le teuina i luga o se node fuifui e tatau ona fa'apipi'i le polokalama talafeagai mo lenei mea (mo se faʻataʻitaʻiga, o le ceph-common package mo Ceph). I le taimi muamua, o le Flexvolume plugin e leʻi fuafuaina e faʻatino ia faiga faʻalavelave.

O se fofo muamua i lenei faʻafitauli e mafai ona vaʻaia i le Flexvolume avetaʻavale faʻatinoga a le Rook operator:

O le avetaavale lava ia ua mamanuina e avea o se tagata faʻatau RPC. O le IPC socket mo fesoʻotaʻiga o loʻo i totonu o le lisi tutusa ma le avetaavale lava ia. Matou te manatua o le kopiina o faila avetaʻavale e lelei le faʻaogaina o le DaemonSet, lea e faʻafesoʻotaʻi le lisi ma le avetaavale o se voluma. A maeʻa ona kopiina faila taʻavale taʻavale, e le mate lenei pod, ae faʻafesoʻotaʻi i le socket IPC e ala i le voluma faʻapipiʻi e avea o se server RPC atoa. O le ceph-common package ua uma ona faʻapipiʻiina i totonu o le pusa pusa. O le IPC socket e fa'amautinoaina o le kubelet o le a feso'ota'i tonu ma le pod o lo'o tu i luga o le node lava e tasi. O mea uma atamai e faigofie! ..

Tofa, lo matou alofa... in-tree plugins!

Na iloa e le au atinaʻe Kubernetes o le numera o plugini mo le teuina i totonu ole autu e luasefulu. Ma o se suiga i latou taʻitoʻatasi, i se tasi auala poʻo se isi, e alu atu i le taamilosaga atoa o le Kubernetes.

E foliga mai o le faʻaaogaina o le lomiga fou o le faʻapipiʻi faʻapipiʻi, e mana'omia le fa'afouina o le fuifui atoa. I le faaopoopo atu i lenei mea, atonu e te ofo i le fou o Kubernetes o le a faʻafuaseʻi ona le fetaui ma le Linux kernel o loʻo e faʻaaogaina ... O lea e te soloiesea ou loimata ma, eli ou nifo, faʻamaopoopo ma lau pulega ma tagata faʻaoga le taimi e faʻafou le Linux kernel ma le Kubernetes cluster. Fa'atasi ai ma taimi fa'aletonu i le tu'uina atu o auaunaga.

O le tulaga e sili atu nai lo le malie, e te le manatu? Na manino i le nuu atoa e le o aoga lea faiga. E ala i se filifiliga ma le loto i ai, ua faʻailoa mai e le au atinaʻe Kubernetes o le a le toe taliaina ni faʻapipiʻi fou mo le galue ma le teuina i totonu o le fatu. E le gata i lea, e pei ona tatou iloa, o le tele o faʻaletonu na faʻaalia i le faʻatinoga o le Flexvolume plugin...

O le mea fou faʻaopoopo faʻapipiʻi mo voluma i Kubernetes, CSI, na valaʻauina e tapunia le mataupu i le teuina pea o faʻamaumauga i taimi uma. O lona faʻasologa o le alpha, sili atu ona taʻua o Out-of-Tree CSI Volume Plugins, na faʻasalalau i le faʻasalalauga. Kubernetes 1.9.

Feso'ota'iga Teuina o Container, po'o le CSI 3000 la'au taamilo!

Muamua lava, ou te fia maitauina o le CSI e le naʻo se masini faʻapipiʻi, ae o se mea moni tulaga masani i le fatuina o vaega masani mo le galulue faatasi ma faleteuoloa faʻamaumauga. O faiga fa'apipi'i e pei o Kubernetes ma Mesos e tatau ona "a'oa'o" pe fa'apefea ona galulue fa'atasi ma vaega fa'atino e tusa ai ma lenei tulaga. Ma o lea ua uma ona ou aʻoaʻoina Kubernetes.

O le a le fausaga o le CSI plugin i Kubernetes? O le CSI plugin e galue ma avetaʻavale faʻapitoa (avetaavale CSI) tusia e isi tagata atiaʻe vaega. O se aveta'avale CSI i Kubernetes e tatau ona la'ititi ona aofia ai ni vaega se lua (pods):

  • e pulea — pulea le teuina faifai pea i fafo. O loʻo faʻatinoina o se gRPC server, lea e faʻaaogaina ai le mea muamua StatefulSet.
  • Node - e nafa ma le faʻapipiʻiina o le teuina faifai pea i nodes fuifui. O loʻo faʻatinoina foi o se gRPC server, ae faʻaaogaina le mea muamua DaemonSet.

Volume plugins mo Kubernetes teuina: mai Flexvolume i CSI
E faʻafefea ona galue le CSI plugin i Kubernetes

E mafai ona e aʻoaʻoina e uiga i nisi faʻamatalaga o galuega a le CSI, mo se faʻataʻitaʻiga, mai le tusiga "Malamalama i le C.S.I.», faaliliuga o lea na matou lolomiina i le tausaga talu ai.

Le lelei o sea fa'atinoga

  • Mo mea masani e pei o le resitalaina o se avetaavale mo se node, na faʻatinoina e le au Kubernetes se seti o pusa. E te le toe manaʻomia le faʻatupuina o se tali a le JSON ma lou malosi, e pei ona faia mo le Flexvolume plugin.
  • Nai lo le "fa'ase'e" faila fa'atino i nodes, matou te tu'uina atu fo'i i le fuifui. O le mea lea matou te fa'amoemoe muamua mai Kubernetes: o fa'agasologa uma e tutupu i totonu o koneteina o lo'o fa'aogaina e fa'aaoga ai Kubernetes primitives.
  • E te le toe manaʻomia le fausiaina o se RPC server ma le RPC client e faʻatino ai avetaavale lavelave. O le kalani na faʻatinoina mo i matou e Kubernetes developers.
  • O le tu'uina atu o finauga e galue i luga o le gRPC protocol e sili atu ona faigofie, fetu'una'i ma fa'atuatuaina nai lo le tu'uina atu e ala i finauga laina fa'atonu. Ina ia malamalama pe faʻafefea ona faʻaopoopo le lagolago mo le faʻaogaina o fua faʻaoga i le CSI e ala i le faʻaopoopoina o se metotia gRPC faʻavasegaina, e mafai ona e faitau: la matou toso talosaga mo vsphere-csi avetaavale.
  • Feso'ota'iga e tupu i sockets IPC, ina ia aua ne'i fenumia'i pe na lafo e le kubelet le talosaga i le pod sa'o.

E faamanatu atu e lenei lisi ia te oe se mea? O le lelei o le CSI o foia na lava faafitauli, e leʻi amanaia pe a atiaʻe le Flexvolume plugin.

sailiiliga

CSI o se faʻataʻitaʻiga mo le faʻatinoina o faʻapipiʻi faʻapitoa mo le fegalegaleai ma fale teu oloa faʻamaumauga na matua talia fiafia e le alalafaga. E le gata i lea, ona o latou lelei ma agavaʻa, ua faia ai avetaavale CSI e oʻo lava mo le teuina o faiga e pei o Ceph poʻo AWS EBS, faʻapipiʻi mo le galulue faʻatasi ma na faʻaopoopoina i le uluai kopi o Kubernetes.

I le amataga o le 2019, in-tree plugins ua fa'ailoa mai ua le toe aoga. Matou te fuafua e faʻaauau pea ona lagolagoina le Flexvolume plugin, ae o le a le atiina ae ni galuega fou mo ia.

O matou lava ua iai le poto masani i le faʻaaogaina o le ceph-csi, vsphere-csi ma ua sauni e faʻaopoopo i lenei lisi! E oʻo mai i le taimi nei, o loʻo feagai le CSI ma galuega na tuʻuina atu i ai ma se pa, ae o le a tatou faʻatali ma vaʻai.

Aua nei galo o mea fou uma o se toe mafaufau lelei i mea tuai!

SALA

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga