Awọn afikun iwọn didun fun ibi ipamọ Kubernetes: lati Flexvolume si CSI

Awọn afikun iwọn didun fun ibi ipamọ Kubernetes: lati Flexvolume si CSI

Pada nigbati Kubernetes ṣi v1.0.0, awọn afikun iwọn didun wa. Wọn nilo lati sopọ awọn ọna ṣiṣe si Kubernetes fun titoju data eiyan ti o duro (iduroṣinṣin). Nọmba wọn jẹ kekere, ati laarin awọn akọkọ ni iru awọn olupese ibi ipamọ bi GCE PD, Ceph, AWS EBS ati awọn omiiran.

Awọn afikun naa ni a fi jiṣẹ pẹlu Kubernetes, eyiti o jẹ idi ti wọn fi gba orukọ wọn - inu igi. Sibẹsibẹ, fun ọpọlọpọ, eto ti o wa tẹlẹ ti iru awọn afikun wa jade lati ko to. Awọn oniṣẹ ẹrọ ṣe afikun awọn afikun ti o rọrun si Kubernetes mojuto nipa lilo awọn abulẹ, lẹhin eyi wọn kojọpọ Kubernetes ti ara wọn ati fi sori ẹrọ lori olupin wọn. Ṣugbọn lẹhin akoko, awọn olupilẹṣẹ Kubernetes ṣe akiyesi iyẹn eja a ko le yanju iṣoro naa. Eniyan nilo igi ipẹja. Ati ninu itusilẹ ti Kubernetes v1.2.0 o han ...

Flexvolume itanna: iwonba ipeja opa

Awọn olupilẹṣẹ Kubernetes ṣẹda ohun itanna FlexVolume, eyiti o jẹ ilana ọgbọn ti awọn oniyipada ati awọn ọna fun ṣiṣẹ pẹlu awọn awakọ Flexvolume ti a ṣe imuse nipasẹ awọn olupolowo ẹni-kẹta.

Jẹ ki a da duro ki a wo diẹ sii kini awakọ FlexVolume jẹ. Eleyi jẹ kan awọn executable faili (faili alakomeji, iwe afọwọkọ Python, iwe afọwọkọ Bash, ati bẹbẹ lọ), eyiti, nigba ṣiṣe, gba awọn ariyanjiyan laini aṣẹ bi titẹ sii ati da ifiranṣẹ pada pẹlu awọn aaye ti a ti mọ tẹlẹ ni ọna kika JSON. Nipa apejọ, ariyanjiyan laini aṣẹ akọkọ jẹ ọna nigbagbogbo, ati awọn ariyanjiyan to ku jẹ awọn aye rẹ.

Awọn afikun iwọn didun fun ibi ipamọ Kubernetes: lati Flexvolume si CSI
Aworan asopọ fun Awọn ipin CIFS ni OpenShift. Flexvolume Driver - Ọtun ni Ile-iṣẹ naa

Eto ti o kere julọ ti awọn ọna wulẹ bi iyẹn:

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

Lilo Awọn ọna attach и detach yoo setumo awọn ohn ninu eyi ti awọn kubelet yoo sise ni ojo iwaju nigbati pipe awọn iwakọ. Awọn ọna pataki tun wa expandvolume и expandfs, eyi ti o jẹ iduro fun yiyipada iwọn didun ni agbara.

Gẹgẹbi apẹẹrẹ ti awọn iyipada ti ọna naa ṣe afikun expandvolume, ati pẹlu rẹ ni agbara lati tun iwọn awọn iwọn didun ni akoko gidi, o le mọ ara rẹ pẹlu wa fa ìbéèrè ni Rook Ceph onišẹ.

Ati pe eyi jẹ apẹẹrẹ ti imuse ti awakọ Flexvolume fun ṣiṣẹ pẹlu 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

Nitorinaa, lẹhin igbaradi faili ti o ṣiṣẹ gangan, o nilo lati po si awọn iwakọ to Kubernetes iṣupọ. Awakọ naa gbọdọ wa ni ori ipade iṣupọ kọọkan ni ibamu si ọna ti a ti pinnu tẹlẹ. Nipa aiyipada o ti yan:

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

ṣugbọn nigba lilo awọn ipinpinpin Kubernetes oriṣiriṣi (OpenShift, Rancher ...) ọna le yatọ.

Awọn iṣoro Flexvolume: bawo ni a ṣe le sọ ọpá ipeja ni deede?

Ikojọpọ awakọ Flexvolume si awọn apa iṣupọ yipada lati jẹ iṣẹ-ṣiṣe ti kii ṣe pataki. Lẹhin ti o ti ṣe iṣẹ naa pẹlu ọwọ ni ẹẹkan, o rọrun lati pade ipo kan nibiti awọn apa tuntun ti han ninu iṣupọ: nitori afikun ipade tuntun kan, irẹjẹ petele laifọwọyi, tabi - kini o buruju - rirọpo oju ipade nitori aiṣedeede kan. Ni idi eyi, ṣiṣẹ pẹlu ibi ipamọ lori awọn apa wọnyi yẹ ki o ṣee jẹ soro, titi iwọ o fi tun fi ọwọ kun awakọ Flexvolume si wọn.

Ojutu si iṣoro yii jẹ ọkan ninu awọn alakoko Kubernetes - DaemonSet. Nigbati ipade tuntun ba han ninu iṣupọ, o ni adarọ-ese ni adarọ-ese kan lati DaemonSet wa, eyiti iwọn didun agbegbe ti so pọ si ọna lati wa awakọ Flexvolume. Lori ṣiṣẹda aṣeyọri, adakọ adakọ awọn faili pataki fun awakọ lati ṣiṣẹ si disk.

Eyi ni apẹẹrẹ ti iru DaemonSet fun fifisilẹ ohun itanna Flexvolume kan:

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>

ati apẹẹrẹ ti iwe afọwọkọ Bash kan fun fifisilẹ awakọ 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

O ṣe pataki lati maṣe gbagbe pe iṣẹ ẹda naa kii ṣe atomiki. Anfani giga wa pe kubelet yoo bẹrẹ lilo awakọ ṣaaju ilana ipese rẹ ti pari, nfa eto naa lati jamba. Ọna to tọ ni lati kọkọ daakọ awọn faili awakọ labẹ orukọ ti o yatọ, ati lẹhinna lo iṣẹ fun lorukọ atomiki kan.

Awọn afikun iwọn didun fun ibi ipamọ Kubernetes: lati Flexvolume si CSI
Aworan ti ṣiṣẹ pẹlu Ceph ninu oniṣẹ ẹrọ Rook: awakọ Flexvolume ninu aworan atọka wa ninu aṣoju Rook

Iṣoro atẹle nigba lilo awọn awakọ Flexvolume ni pe fun ibi ipamọ pupọ julọ lori ipade iṣupọ kan software pataki fun eyi gbọdọ wa ni fi sori ẹrọ (fun apẹẹrẹ, package ceph-wọpọ fun Ceph). Ni ibẹrẹ, ohun itanna Flexvolume ko ṣe apẹrẹ lati ṣe iru awọn ọna ṣiṣe eka.

Ojutu atilẹba si iṣoro yii ni a le rii ninu imuse awakọ Flexvolume ti oniṣẹ Rook:

Awakọ funrararẹ jẹ apẹrẹ bi alabara RPC. IPC iho fun ibaraẹnisọrọ ti wa ni be ni kanna liana bi awọn iwakọ ara. A ranti pe lati daakọ awọn faili awakọ yoo dara lati lo DaemonSet, eyiti o so liana pẹlu awakọ bi iwọn didun kan. Lẹhin didakọ awọn faili awakọ rook pataki, adarọ ese yii ko ku, ṣugbọn sopọ si iho IPC nipasẹ iwọn didun ti a so bi olupin RPC ti o ni kikun. Apo ceph-wọpọ ti wa ni fifi sori ẹrọ tẹlẹ ninu apo eiyan. Ipilẹ IPC ṣe idaniloju pe kubelet yoo ṣe ibaraẹnisọrọ pẹlu gangan podu ti o wa ni oju ipade kanna. Ohun gbogbo ti ọgbọn jẹ rọrun! ..

O dabọ, ifẹ wa ... awọn afikun igi-igi!

Awọn olupilẹṣẹ Kubernetes ṣe awari pe nọmba awọn afikun fun ibi ipamọ laarin mojuto jẹ ogun. Ati iyipada ninu ọkọọkan wọn, ni ọna kan tabi omiiran, lọ nipasẹ iwọn idasilẹ Kubernetes ni kikun.

O wa ni pe lati lo ẹya tuntun ti ohun itanna ipamọ, o nilo lati ṣe imudojuiwọn gbogbo iṣupọ. Ni afikun si eyi, o le yà ọ lẹnu pe ẹya tuntun ti Kubernetes yoo lojiji ni ibamu pẹlu ekuro Linux ti o nlo… Nitorina o nu omije rẹ kuro ati, gritting eyin rẹ, ipoidojuko pẹlu iṣakoso rẹ ati awọn olumulo akoko lati ṣe imudojuiwọn ekuro Linux ati iṣupọ Kubernetes. Pẹlu ṣee ṣe downtime ni awọn ipese ti awọn iṣẹ.

Ipo naa jẹ diẹ sii ju apanilẹrin, ṣe o ko ro? O han gbangba fun gbogbo agbegbe pe ọna naa ko ṣiṣẹ. Nipa ipinnu ifarabalẹ, awọn olupilẹṣẹ Kubernetes n kede pe awọn afikun tuntun fun ṣiṣẹ pẹlu ibi ipamọ ko ni gba sinu ekuro mọ. Ni afikun, bi a ti mọ tẹlẹ, nọmba awọn ailagbara ni a ṣe idanimọ ni imuse ti ohun itanna Flexvolume…

Ohun itanna tuntun ti a ṣafikun fun awọn iwọn didun ni Kubernetes, CSI, ni a pe lati pa ọran naa pẹlu ibi ipamọ data itẹramọṣẹ lekan ati fun gbogbo. Ẹya alpha rẹ, ni kikun tọka si bi Awọn ohun itanna Iwọn didun CSI Out-of-Tree, ti kede ninu itusilẹ Kubernetes 1.9.

Eiyan Ibi Interface, tabi CSI 3000 alayipo ọpá!

Ni akọkọ, Emi yoo fẹ lati ṣe akiyesi pe CSI kii ṣe ohun itanna iwọn didun nikan, ṣugbọn gidi kan boṣewa lori ṣiṣẹda awọn paati aṣa fun ṣiṣẹ pẹlu awọn ile itaja data. Awọn eto orchestration apoti bii Kubernetes ati Mesos yẹ ki o “kọ ẹkọ” bi o ṣe le ṣiṣẹ pẹlu awọn paati imuse ni ibamu si boṣewa yii. Ati nisisiyi Mo ti kọ ẹkọ Kubernetes tẹlẹ.

Kini eto ti ohun itanna CSI ni Kubernetes? Ohun itanna CSI ṣiṣẹ pẹlu awọn awakọ pataki (CSI awakọ) ti a kọ nipasẹ awọn olupilẹṣẹ ẹnikẹta. Awakọ CSI kan ni Kubernetes yẹ ki o ni iwonba awọn paati meji (pods):

  • adarí - ṣakoso awọn ibi ipamọ ti o duro ni ita. O ti ṣe imuse bi olupin gRPC, eyiti o jẹ lilo atijo StatefulSet.
  • ipade - jẹ iduro fun iṣagbesori ibi ipamọ igbagbogbo si awọn apa iṣupọ. O tun ṣe imuse bi olupin gRPC, ṣugbọn o nlo atijo DaemonSet.

Awọn afikun iwọn didun fun ibi ipamọ Kubernetes: lati Flexvolume si CSI
Bii ohun itanna CSI ṣe n ṣiṣẹ ni Kubernetes

O le kọ ẹkọ nipa awọn alaye miiran ti iṣẹ CSI, fun apẹẹrẹ, lati inu nkan naa "Ni oye ti C.S.I." translation ti eyi ti a ṣe atẹjade ni ọdun kan sẹhin.

Awọn anfani ti iru imuse

  • Fun awọn ohun ipilẹ bii fiforukọṣilẹ awakọ fun ipade kan, awọn olupilẹṣẹ Kubernetes ṣe imuse ṣeto awọn apoti kan. Iwọ ko nilo lati ṣe ipilẹṣẹ esi JSON pẹlu awọn agbara funrararẹ, bi a ti ṣe fun ohun itanna Flexvolume.
  • Dipo “yiyọ” awọn faili ti o ṣee ṣe si awọn apa, a gbe awọn adarọ-ese si iṣupọ naa. Eyi ni ohun ti a nireti lakoko lati Kubernetes: gbogbo awọn ilana waye ninu awọn apoti ti a fi ranṣẹ nipa lilo awọn alakoko Kubernetes.
  • Iwọ ko nilo lati ṣe agbekalẹ olupin RPC ati alabara RPC lati ṣe awọn awakọ idiju. Onibara ti ṣe imuse fun wa nipasẹ awọn olupilẹṣẹ Kubernetes.
  • Gbigbe awọn ariyanjiyan lati ṣiṣẹ lori ilana gRPC jẹ irọrun diẹ sii, rọ ati igbẹkẹle ju gbigbe wọn lọ nipasẹ awọn ariyanjiyan laini aṣẹ. Lati loye bii o ṣe le ṣafikun atilẹyin fun awọn metiriki lilo iwọn didun si CSI nipa fifi ọna gRPC kan ti o ni idiwọn, o le ka: wa fa ìbéèrè fun vsphere-csi iwakọ.
  • Ibaraẹnisọrọ waye nipasẹ awọn iho IPC, ki o má ba dapo boya kubelet fi ibeere ranṣẹ si adarọ ese to pe.

Ṣe atokọ yii leti rẹ ohunkohun? Awọn anfani ti CSI jẹ yanju awọn iṣoro kanna, eyi ti a ko ṣe akiyesi nigba ti o ndagbasoke ohun itanna Flexvolume.

awari

CSI gẹgẹbi idiwọn fun imuse awọn afikun aṣa fun ibaraenisepo pẹlu awọn ile itaja data ni a gba ni itara pupọ nipasẹ agbegbe. Pẹlupẹlu, nitori awọn anfani ati isọpọ wọn, awọn awakọ CSI ni a ṣẹda paapaa fun awọn ọna ipamọ bii Ceph tabi AWS EBS, awọn afikun fun ṣiṣẹ pẹlu eyiti a ṣafikun ni ẹya akọkọ ti Kubernetes.

Ni ibẹrẹ ọdun 2019, awọn afikun inu igi ti kede pe ko ti lo. A gbero lati tẹsiwaju lati ṣe atilẹyin ohun itanna Flexvolume, ṣugbọn kii yoo ṣe idagbasoke iṣẹ ṣiṣe tuntun fun rẹ.

A ti wa tẹlẹ ti ni iriri nipa lilo ceph-csi, vsphere-csi ati pe a ti ṣetan lati ṣafikun si atokọ yii! Titi di isisiyi, CSI n koju awọn iṣẹ-ṣiṣe ti a yàn si i pẹlu bang kan, ṣugbọn a yoo duro ati rii.

Maṣe gbagbe pe ohun gbogbo tuntun jẹ atunyẹwo to dara ti atijọ!

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun