เบ›เบฑเปŠเบเบญเบดเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ Kubernetes: เบˆเบฒเบ Flexvolume เป€เบ–เบดเบ‡ CSI

เบ›เบฑเปŠเบเบญเบดเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ Kubernetes: เบˆเบฒเบ Flexvolume เป€เบ–เบดเบ‡ CSI

เบเบฑเบšเป„เบ›เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ Kubernetes เบเบฑเบ‡ v1.0.0, เบกเบต plugins เบ›เบฐเบฅเบดเบกเบฒเบ™. เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบฅเบฐเบšเบปเบšเบเบฑเบš Kubernetes เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบˆเบธ (เบ–เบฒเบงเบญเบ™) เบ„เบปเบ‡เบ—เบตเปˆ. เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบ™เป‰เบญเบ, เปเบฅเบฐเปƒเบ™เบšเบฑเบ™เบ”เบฒเบœเบนเป‰เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป€เบŠเบฑเปˆเบ™ GCE PD, Ceph, AWS EBS เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบ›เบฑเปŠเบเบญเบดเบ™เบ–เบทเบเบˆเบฑเบ”เบชเบปเปˆเบ‡เบžเป‰เบญเบกเบเบฑเบš Kubernetes, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบŠเบทเปˆ - in-tree. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, เบŠเบธเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบ‚เบญเบ‡ plugins เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบšเปเปˆเบžเบฝเบ‡เบžเป. เบŠเปˆเบฒเบ‡เบซเบฑเบ”เบ–เบฐเบเปเบฒเป„เบ”เป‰เป€เบžเบตเปˆเบก plugins เบ‡เปˆเบฒเบเป†เปƒเบชเปˆเบซเบผเบฑเบ Kubernetes เป‚เบ”เบเปƒเบŠเป‰ patches, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบเบญเบš Kubernetes เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เปเบ•เปˆเป€เบกเบทเปˆเบญเป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบชเบดเปˆเบ‡เบ™เบฑเป‰เบ™ เบ›เบฒ เบšเบฑเบ™เบซเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰. เบ›เบฐเบŠเบฒเบŠเบปเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ เบ„เบฑเบ™โ€‹เป€เบšเบฑเบ”. เปเบฅเบฐเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ Kubernetes v1.2.0 เบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒ ...

เบ›เบฑเปŠเบเบญเบดเบ™ Flexvolume: เบ—เปเปˆเบซเบฒเบ›เบฒเปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”

เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เป„เบ”เป‰เบชเป‰เบฒเบ‡เบ›เบฅเบฑเบเบญเบดเบ™ FlexVolume, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบญเบšเบ—เบตเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ•เบปเบงเปเบ› เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบ”เป€เบงเบต Flexvolume เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก.

เปƒเบซเป‰เบขเบธเบ”เป€เบŠเบปเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป€เบงเบต FlexVolume เปเบกเปˆเบ™เบซเบเบฑเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เปเบ™เปˆเบ™เบญเบ™ เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰ (เป„เบŸเบฅเปŒ binary, Python script, Bash script, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เป€เบŠเบดเปˆเบ‡, เป€เบกเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบญเบปเบฒ arguments เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปƒเบ™เบฎเบนเบšเปเบšเบš JSON. เป‚เบ”เบเบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒ, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเบฐเป€เบซเบกเบต, เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™.

เบ›เบฑเปŠเบเบญเบดเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ Kubernetes: เบˆเบฒเบ Flexvolume เป€เบ–เบดเบ‡ CSI
เปเบœเบ™เบงเบฒเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเปเบฒเบฅเบฑเบšเบฎเบธเป‰เบ™ CIFS เปƒเบ™ OpenShift. Flexvolume Driver - เบชเบดเบ”เบขเบนเปˆเปƒเบ™เบชเบนเบ™

เบŠเบธเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เปˆเปเบฒ เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

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, เปเบฅเบฐเบ”เป‰เบงเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ›เบฐเบฅเบดเบกเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡ เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ”เบถเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹ เปƒเบ™ 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. เป„เบ”เป€เบงเบตเบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐ node cluster เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰เบฅเปˆเบงเบ‡เปœเป‰เบฒ. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เบ–เบทเบเป€เบฅเบทเบญเบ:

/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ะธะผั_ะฟะพัั‚ะฐะฒั‰ะธะบะฐ_ั…ั€ะฐะฝะธะปะธั‰ะฐ~ะธะผั_ะดั€ะฐะนะฒะตั€ะฐ/

... เปเบ•เปˆเป€เบกเบทเปˆเบญเปƒเบŠเป‰เบเบฒเบ™เปเบˆเบเบขเบฒเบ Kubernetes เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (OpenShift, Rancher...) เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบšเบฑเบ™โ€‹เบซเบฒ Flexvolumeโ€‹: เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป‚เบเบ™โ€‹เบ•เบนเป‰โ€‹เบ›เบฒโ€‹เบขเปˆเบฒเบ‡โ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹?

เบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ”เป€เบงเบต Flexvolume เป„เบ›เปƒเบชเปˆเบเบธเปˆเบกเบเบธเปˆเบกเป„เบ”เป‰เบเบฒเบเบกเบฒเป€เบ›เบฑเบ™เปœเป‰เบฒเบงเบฝเบเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ. เป„เบ”เป‰เป€เบฎเบฑเบ”เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบžเบปเบšเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆ nodes เปƒเบซเบกเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบเบธเปˆเบก: เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบญเบ‡ node เปƒเบซเบกเปˆ, เบ›เบฑเบšเบ•เบฒเบกเปเบ™เบงเบ™เบญเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบซเบผเบท - เบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ - เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ‚เบญเบ‡ node เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ malfunction. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปƒเบ™ nodes เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ” เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบˆเบปเบ™เบเปˆเบงเบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เป€เบžเบตเปˆเบกเป„เบ”เป€เบงเบต Flexvolume เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡.

เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เป Kubernetes - DaemonSet. เป€เบกเบทเปˆเบญ node เปƒเปเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบเบธเปˆเบก, เบกเบฑเบ™เบˆเบฐเบกเบตเบเบฑเบเบˆเบฒเบ DaemonSet เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบกเบตเบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ•เบดเบ”เบขเบนเปˆเบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเป„เบ”เป€เบงเบต Flexvolume. เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง, เบเบฑเบเบˆเบฐเบชเบณเป€เบ™เบปเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป€เบงเบตเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบชเปˆเปเบœเปˆเบ™เบ”เบดเบ”.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ DaemonSet เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบฒเบ‡ 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>

... เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ Bash script เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เป„เบ”เป€เบงเบต 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 operator: เป„เบ”เป€เบงเบต Flexvolume เปƒเบ™เปเบœเบ™เบงเบฒเบ”เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบžเบฒเบเปƒเบ™เบ•เบปเบงเปเบ—เบ™ Rook

เบšเบฑเบ™เบซเบฒเบ•เปเปˆเป„เบ›เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เป„เบ”เป€เบงเบต Flexvolume เปเบกเปˆเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเปƒเบ™ node cluster เบŠเบญเบšเปเบงเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบŠเบธเบ” ceph-เบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบš Ceph). เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, plugin Flexvolume เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.

เบเบฒเบ™เปเบเป‰เป„เบ‚เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป€เบงเบต Flexvolume เบ‚เบญเบ‡เบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ Rook:

เป„เบ”เป€เบงเบตเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบ›เบฑเบ™เบฅเบนเบเบ„เป‰เบฒ RPC. เป€เบ•เบปเป‰เบฒเบฎเบฑเบš IPC เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบ‚เบฑเบšเป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเป€เบžเบทเปˆเบญเบ„เบฑเบ”เบฅเบญเบเป„เบŸเบฅเปŒเป„เบ”เป€เบงเบตเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ DaemonSet, เป€เบŠเบดเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเบฑเบšเป„เบ”เป€เบงเบตเป€เบ›เบฑเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเป„เบŸเบฅเปŒเป„เบ”เป€เบงเบต rook เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบเบฑเบเบ™เบตเป‰เบšเปเปˆเบ•เบฒเบ, เปเบ•เปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ•เบปเป‰เบฒเบชเบฝเบš IPC เบœเปˆเบฒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เบตเปˆเบ•เบดเบ”เบ„เบฑเบ”เบกเบฒเป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ RPC เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš. เบŠเบธเบ” ceph-common เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปเบฅเป‰เบงเบžเบฒเบเปƒเบ™เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบเบฑเบ. เป€เบ•เบปเป‰เบฒเบฎเบฑเบš IPC เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒ kubelet เบˆเบฐเบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบเบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ node เบ”เบฝเบงเบเบฑเบ™. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡ ingenious เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ!..

เบชเบฐเบšเบฒเบเบ”เบต, เบ—เบตเปˆเบฎเบฑเบเปเบžเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ... plugins in-tree!

เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ plugins เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบฒเบเปƒเบ™เบซเบผเบฑเบเปเบกเปˆเบ™เบŠเบฒเบง. เปเบฅเบฐเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เปเบ•เปˆเบฅเบฐเบžเบงเบเบกเบฑเบ™, เบšเปเปˆเบ—เบฒเบ‡เปƒเบ”เบ—เบฒเบ‡เปœเบถเปˆเบ‡, เบˆเบฐเบœเปˆเบฒเบ™เบฎเบญเบšเบเบฒเบ™เบ›เปˆเบญเบ Kubernetes เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš.

เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เบ‚เบญเบ‡ plugin เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฑเบšเบ›เบธเบ‡เบเบธเปˆเบกเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เบปเบเบ•เบฐเบฅเบถเบ‡เบงเปˆเบฒ Kubernetes เบฎเบธเปˆเบ™เปƒเบซเบกเปˆเบเปเปˆเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบšเปเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Linux kernel เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ ... เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป€เบŠเบฑเบ”เบ™เป‰เปเบฒเบ•เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐ, เบเบฑเบ”เปเบ‚เป‰เบง, เบ›เบฐเบชเบฒเบ™เบ‡เบฒเบ™เบเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เปเบฅเบฐเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบญเบฑเบšเป€เบ”เบ” kernel Linux เปเบฅเบฐเบเบธเปˆเบก Kubernetes. เบ”เป‰เบงเบเบเบฒเบ™เบขเบธเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปเบกเปˆเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบ•เบฐเบซเบฅเบปเบ, เป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบšเป? เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡เบ•เปเปˆเบŠเบธเบกเบŠเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเป„เบ”เป‰เบœเบปเบ™. เป‚เบ”เบเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบ•เบฑเป‰เบ‡เปƒเบˆ, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบ›เบฅเบฑเบเบญเบดเบ™เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบเบญเบกเบฎเบฑเบšเป€เบ‚เบปเป‰เบฒเปƒเบ™ kernel เบญเบตเบเบ•เปเปˆเป„เบ›. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เปเบฅเป‰เบง, เบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ plugin Flexvolume ...

เบ›เบฑเปŠเบเบญเบดเบ™เบ—เบตเปˆเป€เบžเบตเปˆเบกเบซเบผเป‰เบฒเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ›เบฐเบฅเบดเบกเบฒเบ™เปƒเบ™ Kubernetes, CSI, เป„เบ”เป‰เบ–เบทเบเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบ›เบดเบ”เบšเบฑเบ™เบซเบฒเบ”เป‰เบงเบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบงเปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”. เบฎเบธเปˆเบ™ alpha เบ‚เบญเบ‡เบกเบฑเบ™, เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Out-of-Tree CSI Volume Plugins, เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ เบ„เบนเป‚เบšเบ•เป‰เบฒ 1.9.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เบซเบผเบท CSI 3000 spinning rod!

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ CSI เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™ plugin เบ›เบฐเบฅเบดเบกเบฒเบ™, เปเบ•เปˆเป€เบ›เบฑเบ™เบˆเบดเบ‡ เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบเปเบฒเบซเบ™เบปเบ”เป€เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ„เบฑเบ‡เบ‚เปเป‰เบกเบนเบ™. เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ›เบฐเบชเบฒเบ™เบชเบฝเบ‡เบ‚เบญเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเป€เบŠเบฑเปˆเบ™ Kubernetes เปเบฅเบฐ Mesos เบ„เบงเบ™เบˆเบฐ "เบฎเบฝเบ™เบฎเบนเป‰" เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ™เบตเป‰. เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰ Kubernetes เปเบฅเป‰เบง.

เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡ plugin CSI เปƒเบ™ Kubernetes เปเบกเปˆเบ™เบซเบเบฑเบ‡? plugin CSI เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบ”เป€เบงเบตเบžเบดเป€เบชเบ” (เป„เบ”เป€เบงเบต CSI) เบ‚เบฝเบ™เป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก. เป„เบ”เป€เบงเบต CSI เปƒเบ™ Kubernetes เบ„เบงเบ™เบกเบตเบขเปˆเบฒเบ‡เปœเป‰เบญเบเบชเบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš (เบเบฑเบ):

  • เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก โ€” เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ—เบตเปˆโ€‹เบ„เบปเบ‡โ€‹เบ„เป‰เบฒเบ‡โ€‹เบžเบฒเบโ€‹เบ™เบญเบโ€‹. เบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ gRPC, เป€เบŠเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ StatefulSet.
  • node โ€” เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ•เปเปˆเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ„เบปเบ‡เบ—เบตเปˆเปƒเบชเปˆเบเบฑเบš nodes cluster. เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ gRPC, เปเบ•เปˆเบกเบฑเบ™เปƒเบŠเป‰ primitive DaemonSet.

เบ›เบฑเปŠเบเบญเบดเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ Kubernetes: เบˆเบฒเบ Flexvolume เป€เบ–เบดเบ‡ CSI
Plugin CSI เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปƒเบ™ Kubernetes

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡ CSI, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบˆเบฒเบเบšเบปเบ”เบ„เบงเบฒเบก "เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆ C.S.I.ยป, เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ—เบตเปˆโ€‹ เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบžเบตเบกเบกเบฒเบซเบ™เบถเปˆเบ‡เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰.

เบ‚เปเป‰เบ”เบตเบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง

  • เบชเปเบฒเบฅเบฑเบšเบชเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป„เบ”เป€เบงเบตเบชเปเบฒเบฅเบฑเบš node, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบธเบ”เบšเบฑเบ™เบˆเบธ. เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡ JSON เบ”เป‰เบงเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบš plugin Flexvolume.
  • เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ "เป€เบฅเบทเปˆเบญเบ™" เป„เบŸเบฅเปŒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปƒเบชเปˆเป‚เบซเบ™เบ”, เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบญเบฑเบšเป‚เบซเบฅเบ” pods เปƒเบชเปˆเบเบธเปˆเบก. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ„เบฒเบ”เบซเบงเบฑเบ‡เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบˆเบฒเบ Kubernetes: เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบžเบฒเบเปƒเบ™เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเปƒเบŠเป‰ Kubernetes primitives.
  • เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ RPC เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒ RPC เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป€เบงเบตเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™. เบฅเบนเบเบ„เป‰เบฒเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes.
  • เบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™ gRPC เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒ, เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เปเบฅเบฐเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบžเบงเบเบกเบฑเบ™เบœเปˆเบฒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฑเบš CSI เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบงเบดเบ—เบตเบเบฒเบ™ gRPC เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™: เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ”เบถเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹ เบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบ‚เบฑเบš vsphere-csi.
  • เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบœเปˆเบฒเบ™เบŠเบฑเบญเบเป€เบเบฑเบ” IPC, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบชเบฑเบšเบชเบปเบ™เบงเปˆเบฒ kubelet เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบเบฑเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰เป€เบ•เบทเบญเบ™เป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบซเบเบฑเบ‡เบšเป? เบ‚เปเป‰เบ”เบตเบ‚เบญเบ‡ CSI เปเบกเปˆเบ™ เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™เบ™เบฑเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin Flexvolume.

เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบš

CSI เป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” plugins เปเบšเบšเบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบชเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เป‰เบญเบ™เบฎเบฑเบšเบขเปˆเบฒเบ‡เบญเบปเบšเบญเบธเปˆเบ™เบˆเบฒเบเบŠเบธเบกเบŠเบปเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเปเบฅเบฐเบ„เบงเบฒเบกเบ„เปˆเบญเบ‡เปเบ„เป‰เบงเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เป„เบ”เป€เบงเบต CSI เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป€เบŠเบฑเปˆเบ™ Ceph เบซเบผเบท AWS EBS, plugins เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ Kubernetes เบฎเบธเปˆเบ™เบ—เปเบฒเบญเบดเบ”.

เปƒเบ™เบ•เบปเป‰เบ™เบ›เบต 2019, เบ›เบฅเบฑเบเบญเบดเบ™เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบฅเป‰เบฒเบชเบฐเป„เปเปเบฅเป‰เบง. เบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบชเบทเบšเบ•เปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ plugin Flexvolume, เปเบ•เปˆเบˆเบฐเบšเปเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบŠเป‰ ceph-csi, vsphere-csi เปเบฅเบฐเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰! เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, CSI เบเปเบฒเบฅเบฑเบ‡เบฎเบฑเบšเบกเบทเบเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เบกเบฑเบ™เบขเปˆเบฒเบ‡เบซเบ™เบฑเบเปเบซเบ™เป‰เบ™, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฅเปเบ–เป‰เบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡.

เบขเปˆเบฒโ€‹เบฅเบทเบกโ€‹เบงเปˆเบฒโ€‹เบ—เบธเบโ€‹เบชเบดเปˆเบ‡โ€‹เปƒเบซเบกเปˆโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบดเบ”โ€‹เบ„เบทเบ™โ€‹เปƒเบซเบกเปˆโ€‹เบ‚เบญเบ‡โ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹!

PS

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™