ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ‚ΠΎΠΌΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² Kubernetes: ΠΎΡ‚ Flexvolume ΠΊ CSI

ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ‚ΠΎΠΌΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² Kubernetes: ΠΎΡ‚ Flexvolume ΠΊ CSI

Π’ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° Kubernetes Π±Ρ‹Π» Π΅Ρ‰Ρ‘ v1.0.0, сущСствовали ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для Ρ‚ΠΎΠΌΠΎΠ² (volume plugins). НуТны ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Kubernetes систСм для хранСния пСрсистСнтных (постоянных) Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ… Π±Ρ‹Π»ΠΎ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΎ, Π° Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… β€” Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, ΠΊΠ°ΠΊ GCE PD, Ceph, AWS EBS ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ»ΠΈΡΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ вмСстС с Kubernetes, Π·Π° Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ своё Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β€” in-tree. Однако ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² оказалось нСдостаточным. Π£ΠΌΠ΅Π»ΡŒΡ†Ρ‹ добавляли ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Π² ядро Kubernetes ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ, послС Ρ‡Π΅Π³ΠΎ собирали свой собствСнный Kubernetes ΠΈ ставили Π΅Π³ΠΎ Π½Π° свои сСрвСры. Но со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kubernetes поняли, Ρ‡Ρ‚ΠΎ Ρ€Ρ‹Π±ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Π›ΡŽΠ΄ΡΠΌ Π½ΡƒΠΆΠ½Π° ΡƒΠ΄ΠΎΡ‡ΠΊΠ°. И Π² Ρ€Π΅Π»ΠΈΠ·Π΅ Kubernetes v1.2.0 ΠΎΠ½Π° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡŒβ€¦

Плагин Flexvolume: ΡƒΠ΄ΠΎΡ‡ΠΊΠ° Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΊΠ°Ρ…

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Kubernetes Π±Ρ‹Π» создан ΠΏΠ»Π°Π³ΠΈΠ½ FlexVolume, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являлся логичСской обвязкой ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ сторонними Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ.

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим, Ρ‡Ρ‚ΠΎ прСдставляСт собой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ FlexVolume. Π­Ρ‚ΠΎ Π½Π΅ΠΊΠΈΠΉ исполняСмый Ρ„Π°ΠΉΠ» (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Python-скрипт, Bash-скрипт ΠΈ Ρ‚.ΠΏ.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сообщСниС с Π·Π°Ρ€Π°Π½Π΅Π΅ извСстными полями Π² JSON-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΠΎ соглашСнию всСгда являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ β€” Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ‚ΠΎΠΌΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² Kubernetes: ΠΎΡ‚ Flexvolume ΠΊ CSI
Π‘Ρ…Π΅ΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ CIFS Shares Π² OpenShift. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Flexvolume β€” прямо ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² выглядит Ρ‚Π°ΠΊ:

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

ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² attach ΠΈ detach ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ сцСнарий, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ kubelet Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π’Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ expandvolume ΠΈ expandfs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° динамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠΌΠ°.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ добавляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ expandvolume, Π° вмСстС с Π½ΠΈΠΌ β€” ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠΌΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с нашим pull request’ΠΎΠΌ Π² Rook Ceph Operator.

А Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с 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

Π˜Ρ‚Π°ΠΊ, послС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ собствСнно исполняСмого Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² Kubernetes-кластСр. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ кластСра согласно Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½:

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

… Π½ΠΎ ΠΏΡ€ΠΈ использовании Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дистрибутивов Kubernetes (OpenShift, Rancher…) ΠΏΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Flexvolume: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΈΠ΄Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΡ‡ΠΊΡƒ?

Π’Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½Π° ΡƒΠ·Π»Ρ‹ кластСра оказалось Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠŸΡ€ΠΎΠ΄Π΅Π»Π°Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π»Π΅Π³ΠΊΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ситуациСй, ΠΊΠΎΠ³Π΄Π° Π² кластСрС появятся Π½ΠΎΠ²Ρ‹Π΅ ΡƒΠ·Π»Ρ‹: ΠΈΠ·-Π·Π° добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, автоматичСского Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ β€” Ρ‡Ρ‚ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½Π΅Π΅ β€” Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΠ·Π»Π° ΠΈΠ·-Π·Π° нСисправности. Π’ этом случаС Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΊΠ° Π²Ρ‹ всё Ρ‚Π°ΠΊ ΠΆΠ΅ Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½Π° Π½ΠΈΡ… Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

РСшСниСм Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ послуТил ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Kubernetes β€” DaemonSet. ΠŸΡ€ΠΈ появлСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² кластСрС Π½Π° Π½Π΅ΠΌ автоматичСски оказываСтся pod ΠΈΠ· нашСго DaemonSet’a, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ присоСдиняСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΌ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ для нахоТдСния Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ создании pod ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π° диск.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ DaemonSet’Π° для выкладывания 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>

… ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Bash-скрипта для выкладывания 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

Π’Π°ΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ опСрация копирования Π½Π΅ являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ. Π’Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ kubelet Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ процСсс Π΅Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ систСмы. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ сначала ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, послС Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ пСрСимСнования.

ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ‚ΠΎΠΌΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² Kubernetes: ΠΎΡ‚ Flexvolume ΠΊ CSI
Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ceph Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Rook: Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Flexvolume Π½Π° схСмС находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π°Π³Π΅Π½Ρ‚Π° Rook

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ использовании Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π½Π° ΡƒΠ·Π»Π΅ кластСра Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для этого софт (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°ΠΊΠ΅Ρ‚ ceph-common для Ceph). Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Flexvolume Π½Π΅ Π±Ρ‹Π» Π·Π°Π΄ΡƒΠΌΠ°Π½ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ слоТных систСм.

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Flexvolume-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Rook:

Π‘Π°ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² Π²ΠΈΠ΄Π΅ RPC-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. IPC-сокСт для общСния Π»Π΅ΠΆΠΈΡ‚ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ сам Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ΠœΡ‹ с Π²Π°ΠΌΠΈ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DaemonSet, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² качСствС Ρ‚ΠΎΠΌΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сСбС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. ПослС копирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° rook этот pod Π½Π΅ ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚, Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ IPC-сокСту Ρ‡Π΅Ρ€Π΅Π· присоСдинСнный Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ RPC-сСрвСр. ΠŸΠ°ΠΊΠ΅Ρ‚ ceph-common ΡƒΠΆΠ΅ установлСн Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° pod’а. IPC-сокСт Π΄Π°Π΅Ρ‚ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ kubelet Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ с Ρ‚Π΅ΠΌ pod’ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится с Π½ΠΈΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ·Π»Π΅. Всё гСниальноС просто!..

Π”ΠΎ свидания, наши ласковыС… ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ in-tree!

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kubernetes ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ количСство ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра равняСтся Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΈ. И ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Kubernetes.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΠ»Π°Π³ΠΈΠ½Π° для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ вСсь кластСр. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ новая вСрсия Kubernetes Π²Π΄Ρ€ΡƒΠ³ станСт нСсовмСстимой с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ядром Linux… А посСму Π²Ρ‹ Π²Ρ‹Ρ‚ΠΈΡ€Π°Π΅Ρ‚Π΅ слСзы ΠΈ скрипя Π·ΡƒΠ±Π°ΠΌΠΈ согласовываСтС с Π½Π°Ρ‡Π°Π»ΡŒΡΡ‚Π²ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ врСмя обновлСния ядра Linux ΠΈ кластСра Kubernetes. Π‘ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ простоСм Π² прСдоставлСнии услуг.

Битуация Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ комичная, Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅? ВсСму сообщСству стало ясно, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ΠΎΠ»Π΅Π²Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kubernetes ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² ядро. Ко всСму ΠΏΡ€ΠΎΡ‡Π΅ΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Flexvolume-ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ Π±Ρ‹Π» выявлСн ряд нСдоработок…

Π Π°Π· ΠΈ навсСгда Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ вопрос с пСрсистСнтными Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» ΠΏΡ€ΠΈΠ·Π²Π°Π½ послСдний Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ для Ρ‚ΠΎΠΌΠΎΠ² Π² Kubernetes β€” CSI. Π•Π³ΠΎ Π°Π»ΡŒΡ„Π°-Π²Π΅Ρ€ΡΠΈΡŽ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΊΠ°ΠΊ Out-of-Tree CSI Volume Plugins, анонсировали Π² Ρ€Π΅Π»ΠΈΠ·Π΅ Kubernetes 1.9.

Container Storage Interface, или спиннинг CSI 3000!

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ CSI β€” это Π½Π΅ просто volume plugin, Π° самый настоящий стандарт ΠΏΠΎ созданию ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ систСмы оркСстрации ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Kubernetes ΠΈ Mesos, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Β«Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡΒ» Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ этому стандарту. И Π²ΠΎΡ‚ Kubernetes ΡƒΠΆΠ΅ научился.

Каково ΠΆΠ΅ устройство CSI-ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² Kubernetes? CSI-ΠΏΠ»Π°Π³ΠΈΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ (CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ), написанными сторонними Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² Kubernetes минимально Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (pod’ов):

  • Controller β€” управляСт внСшними пСрсистСнтными Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ. РСлизуСтся Π² Π²ΠΈΠ΄Π΅ gRPC-сСрвСра, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² StatefulSet.
  • Node β€” ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° монтирования пСрсистСнтных Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΊ ΡƒΠ·Π»Π°ΠΌ кластСра. Π’ΠΎΠΆΠ΅ рСализуСтся Π² Π²ΠΈΠ΄Π΅ gRPC-сСрвСра, Π½ΠΎ для Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² DaemonSet.

ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ‚ΠΎΠΌΠΎΠ² для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² Kubernetes: ΠΎΡ‚ Flexvolume ΠΊ CSI
Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ CSI-ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² Kubernetes

О Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… подробностях Ρ€Π°Π±ΠΎΡ‚Ρ‹ CSI Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Understanding the CSIΒ», ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄.

ΠŸΠ»ΡŽΡΡ‹ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

  • Для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для рСгистрации Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для ΡƒΠ·Π»Π° β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kubernetes Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ самим Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JSON-ΠΎΡ‚Π²Π΅Ρ‚ с capabilities, ΠΊΠ°ΠΊ это дСлалось для ΠΏΠ»Π°Π³ΠΈΠ½Π° Flexvolume.
  • ВмСсто «подсовывания» Π½Π° ΡƒΠ·Π»Ρ‹ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π² кластСр pod’ы. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈ ΠΆΠ΄Π΅ΠΌ ΠΎΡ‚ Kubernetes: всС процСссы происходят Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Kubernetes.
  • Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ слоТных Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ RPC-сСрвСр ΠΈ RPC-ΠΊΠ»ΠΈΠ΅Π½Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π·Π° нас Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kubernetes.
  • ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ gRPC Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Π³ΠΈΠ±Ρ‡Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Для понимания, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² CSI ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΏΠΎ использованию Ρ‚ΠΎΠΌΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ добавлСния стандартизированного gRPC-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с нашим pull request’ΠΎΠΌ для Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° vsphere-csi.
  • ΠžΠ±Ρ‰Π΅Π½ΠΈΠ΅ происходит Ρ‡Π΅Ρ€Π΅Π· IPC-сокСты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ, Ρ‚ΠΎΠΌΡƒ Π»ΠΈ pod’Ρƒ kubelet ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» запрос.

Π­Ρ‚ΠΎΡ‚ список Π²Π°ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚? ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° CSI β€” это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ… самых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° Flexvolume.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

CSI ΠΊΠ°ΠΊ стандарт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² для взаимодСйствия с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» принят сообщСством ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Π΅ΠΏΠ»ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, благодаря своим прСимущСствам ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, CSI-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°ΠΆΠ΅ для Ρ‚Π°ΠΊΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, ΠΊΠ°ΠΊ Ceph ΠΈΠ»ΠΈ AWS EBS, ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΅Ρ‰Ρ‘ Π² самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии Kubernetes.

Π’ Π½Π°Ρ‡Π°Π»Π΅ 2019 Π³ΠΎΠ΄Π° ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ in-tree Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ. ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ»Π°Π³ΠΈΠ½Π° Flexvolume, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй для Π½Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π‘Π°ΠΌΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΠΏΡ‹Ρ‚ использования ceph-csi, vsphere-csi ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ этот список! Пока Ρ‡Ρ‚ΠΎ CSI с Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π° Π½Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ справляСтся Π½Π° ΡƒΡ€Π°, Π° Ρ‚Π°ΠΌ ΠΏΠΎΠΆΠΈΠ²Π΅ΠΌ-ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ всё Π½ΠΎΠ²ΠΎΠ΅ β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΎ пСрСосмыслСнноС староС!

P.S.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com