Volumina plugins pro Kubernetes reposita: a Flexvolume ad CSI

Volumina plugins pro Kubernetes reposita: a Flexvolume ad CSI

Retro cum Kubernetes adhuc v1.0.0, volumen plugins erant. Opus erant ad systema contexendi Kubernetes ad notitias continentis (permanentis) continentis. Eorum numerus erat parvus, et inter primos provisores tales erant ut GCE PD, Ceph, AWS EBS et alii.

Plugini traditi sunt una cum Kubernetes, quam ob causam nomen - in-arbore traxit. Sed per multos, talis plugins existens copia evasit ut insufficiens esset. Artifices simplices plugins ad Kubernetes nucleum utentes inaequaliter addiderunt, quo facto Kubernetes suos convenerunt et in servitores suos constituerunt. Sed tempor, Kubernetes tincidunt efficitur id piscis quaestio non solvitur. Populus opus arundo. Et in emissione Kubernetes v1.2.0 apparuit...

Flexvolume plugin: minimal arundo

Tincimenta Kubernetes FlexVolume plugin creaverunt, quae erat logica compage variabilium et methodorum ad operandum cum rectoribus Flexvolume effectis tertia partium tincidunt.

Stemus et propius inspiciamus quid sit agitator FlexVolume. Hoc certum est exsecutabile (sticulus binarius, scriptor Python, scriptor Bash, etc.), qui, cum exsecutus est, mandatum lineae argumentorum accipit sicut input et nuntium reddit cum agris praecognitis in forma JSON. Per placitum, primum mandatum recta ratio semper methodus, reliquae rationes parametri sunt.

Volumina plugins pro Kubernetes reposita: a Flexvolume ad CSI
Nexus tabulae pro CIFS commune in OpenShift. Flexvolume Coegi - Vox in Centre

Minimum modi Is vultus amo is:

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

utens Methodi attach ΠΈ detach missionem definiet in qua kubelet aget in futuro cum aurigam vocantem. Sunt etiam modi speciales expandvolume ΠΈ expandfsquae responsabilitatem voluminis alacriter resipiscendi sunt.

Exemplum mutationum quas modus adiungit expandvolumeet cum facultate resize volumina in tempore reali, perdiscere te potes nostri viverra request in Rook Ceph Operator.

Et hic exemplum est exsecutionis aurigae Flexvolumi operandi cum 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

Itaque, cum actualem documentum exsecutabile parat, debes imposuisti coegi ad Kubernetes botrum portassent. Auriga in singulis nodi botri iuxta praefinitum iter collocari debet. Defaltam delectus;

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

... sed cum per diversas distributiones Kubernetes (OpenShift, Rancher...) via diversa esse potest.

Flexvolume problematum: quomodo arundo recte ejicere?

Flexvolumum coegi ad nodos botri fasciculos evasit negotium non leve. Postquam manually operatione semel peracta, facile est occurrere condicionem ubi novi nodi in botro apparent: ob accessionem novae nodi, scalae horizontalis latae, vel - quod peius est - substitutio nodi propter malfunctionem. Hoc in casu, opus cum repositione in his nodis faciendum est potestdonee adhuc manuale addis eis Flexvolumum exactorem.

Solutio huius problematis inter primos Kubernetes erat. DaemonSet. Cum novus nodi in botro apparet, automatice vasculum ex DaemonSet nostro continet, cui locus volumen adiungitur in via ut rectores Flexvolume inveniant. Ad felicem creationem, vasculum imaginum necessariarum imaginum rectoris ad operandum in disco.

Exemplum adest talis DaemonSet ad explicandum 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>

... et exemplum scriptionis Bash de Flexvolume exactoris exposita:

#!/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

Praestat non oblivisci operationis exemplum non nuclei. Casus altus est ut kubelet utens rectorem incipiet antequam processus cibationis eius completum est, systema fragore causando. Recta accessio est primum rectorem imaginum sub alio nomine effingo, deinde operationi renominationum atomicis utere.

Volumina plugins pro Kubernetes reposita: a Flexvolume ad CSI
Tabula operis cum Ceph in Rook operante: Flexvolume agitator in diagram intra agente Rook.

Proxima quaestio cum usura coegi Flexvolume est quod maxime repono in nodo botri software necessarius ad hoc instituendus est (exempli gratia sarcina communis pro Ceph-ceph). Initio, Flexvolume plugin non ordinatur ad efficiendum huiusmodi systemata implicata.

Solutio originalis huius problematis videri potest in exsecutione aurigae Flexvolume Rook operantis:

Ipse auriga designatus est clientis RPC. Taberna IPC communicationis in eodem directorio cum ipso agitator sita est. Meminimus nos imitari lima coegi ut DaemonSet uti bonum esset, quae indicem cum auriga in volumine coniungit. Postquam imagini densis exactoris necessarias imitatus est, vasculum hoc non moritur, sed nervum IPC per volumen appositum cum servo plenae RPC fugienti coniungit. Involucrum ceph-communium intra vasculum iam inauguratum est. Taberna IPC efficit ut kubelet communicabit exacte vasculum quod in eodem nodo situm est. Omnia ingeniosa simplicia sunt!...

Vale, nostra amantissima.

Tincimenta Kubernetes invenerunt numerum plugins repositionis intra nucleum viginti esse. Et quodlibet eorum mutationem, uno modo vel alio, per plenam emissio cycli Kubernetes vadit.

Evenit ut utatur nova versione plugin repositionis; vos postulo ut update totum botrum portassent. Praeter haec, mirari licet quod nova Kubernetes versio subito repugnant cum Linux nucleo uteris... Sic ergo lacrimas tuas absterge et, dentes stridoris, cum administratione et usoribus tuis tempus compone. renovatio nuclei Linux et Kubernetes botrum portarum. Cum maxime downtime in officia provident.

Res magis quam ridicula est, nonne credis? Patuit toti communitati accessus non laborasse. Voluntarie sententiae Kubernetes tincidunt nuntiant novas plugins repositionis operandi in nucleo non amplius accepturos esse. Praeterea, ut iam novimus, complures defectus in exsequendo plugin Flexvolumi notati sunt.

Novissima plugin voluminum in Kubernetes, CSI addidit, vocatus est ad quaestionem claudendam cum notitia repono semel et semper. Eius versionem alpha, plenius ut Out-of-Arbore CSI Volubilis Plugins relatum, in emissione nuntiatum est. Kubernetes 1.9.

Continens at interface, vel CSI MMM virga contexitur!

Imprimis notare velim CSI non solum volumen plugin, sed verum esse vexillum in creando more componentium operandi notitia apothecae. Continens orchestrationis systemata qualia Kubernetes et Mesos putabantur "discere" quomodo ad operandum cum elementis secundum hanc regulam effectis. Jam iam Kubernetes didici.

Quae est structura plugin CSI in Kubernetes? Plugin CSI operatur cum rectoribus specialibus (CSI regentibus traderent) scripsit tincidunt tertiam partem. A CSI agitator in Kubernetes minimum ex duobus (siliquis) consistere debet.

  • moderatoris - stormata externa persistentes administrat. Adducitur ut grRPC ministrator, cuius primitivus adhibetur StatefulSet.
  • nodi - Ad nodos botri pervicax adscendens reus est. Etiam in servo grRPC impletur, sed primitivo utitur DaemonSet.

Volumina plugins pro Kubernetes reposita: a Flexvolume ad CSI
Quomodo CSI plugin operatur in Kubernetes

Discere potes quaedam alia singularia operis CSI, exempli gratia, ex articulo "Intellegendum C.S.I.Β», de qua translatione ante annum edidimus.

Commoda talis exsecutio

  • Ad res praecipuas sicut perscriptum coegi pro nodo, tincidunt Kubernetes constitutum vasorum impleverunt. Non iam opus est tibi responsionem JSON generare cum facultatibus te ipso, sicut factum est ad Plugin Flexvolume.
  • Pro "labi" lima exsecutabile in nodos, nunc siliquas in botro imposuisti. Hoc est quod ab Kubernetes initio exspectamus: omnes processus intra continentes occurrunt, primitiva Kubernetes utentes explicant.
  • Non iam necesse est ut RPC cultor et RPC clienti ad efficiendum complexum coegi. Cliens a Kubernetes tincidunt nobis effectum est.
  • Argumenta obiter ad operandum protocollum super gRPC multo commodius est, flexibile et certius quam per lineas argumentorum mandatum transeundo. Ut scias quomodo subsidia addere ad usum metricum volumen ad CSI, addendo methodum gRPC normatum, legere potes: nostri viverra request pro vspher-csi auriga.
  • Communicatio per IPC bases occurrit, ita ut non confundatur utrum kubelet petitionem rectam podagras miserit.

An hoc album vos commonet de aliquo? Commoda CSI sunt solvendo eosdem difficultatesquae non considerabantur cum Pluginum evolutionis enucleans.

Inventiones

CSI ut vexillum ad exsequendam morem plugins pro commercio cum horreis notitia communitatis a communitate valde benigne exceptus est. Praeterea, ob commoda et versatilitatis eorum, rectores CSI creantur etiam ad systema reponendi sicut Ceph vel AWS EBS, plugins operandi quibus additae sunt in ipsa prima versione Kubernetes.

Ineunte MMXIX, plugins in arbore obsoleta sunt declarata. Plugin flexvolume sustinere pergere cogitamus, sed novam functionem pro eo non explicabit.

Iam ipsi in usu ceph-csi, vsphere-csi experimur et ad hoc album addere parati sumus! Hactenus, CSI parietum cum crepitu ei pensa, sed expectabimus et videbimus.

Noli oblivisci omnia nova esse bonam veteris memoriam!

PS

Lege etiam in nostro diario:

Source: www.habr.com