ืชื•ืกืคื™ ื ืคื— ืœืื—ืกื•ืŸ Kubernetes: ืž-Flexvolume ื•ืขื“ CSI

ืชื•ืกืคื™ ื ืคื— ืœืื—ืกื•ืŸ Kubernetes: ืž-Flexvolume ื•ืขื“ CSI

ืขื•ื“ ื›ืฉ-Kubernetes ื”ื™ื” ื’ืจืกื” 1.0.0, ื”ื™ื• ืชื•ืกืคื™ื ืœื ืคื—. ื”ื ื”ื™ื• ื ื—ื•ืฆื™ื ื›ื“ื™ ืœื—ื‘ืจ ืžืขืจื›ื•ืช ืœ-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 ื‘-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 ื™ื’ื“ื™ืจ ืืช ื”ืชืจื—ื™ืฉ ืฉื‘ื• ื”ืงื•ื‘ืœื˜ ื™ืคืขืœ ื‘ืขืชื™ื“ ื‘ืขืช ืงืจื™ืืช ื”ื ื”ื’. ื™ืฉ ื’ื ืฉื™ื˜ื•ืช ืžื™ื•ื—ื“ื•ืช 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. ืžื ื”ืœ ื”ื”ืชืงืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืžื•ืงื ื‘ื›ืœ ืฆื•ืžืช ืืฉื›ื•ืœ ืœืคื™ ื ืชื™ื‘ ืฉื ืงื‘ืข ืžืจืืฉ. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื–ื” ื ื‘ื—ืจ:

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

... ืืš ื›ืืฉืจ ืžืฉืชืžืฉื™ื ื‘ื”ืคืฆื•ืช ืฉื•ื ื•ืช ืฉืœ Kubernetes (OpenShift, Rancher...) ื”ื ืชื™ื‘ ืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื•ื ื”.

ื‘ืขื™ื•ืช Flexvolume: ืื™ืš ืœื”ื˜ื™ืœ ื—ื›ื” ื ื›ื•ืŸ?

ื”ืขืœืืช ืžื ื”ืœ ื”ื”ืชืงืŸ ืฉืœ Flexvolume ืœืฆืžืชื™ ืืฉื›ื•ืœ ื”ืชื‘ืจืจื” ื›ืžืฉื™ืžื” ืœื ื˜ืจื™ื•ื•ื™ืืœื™ืช. ืœืื—ืจ ื‘ื™ืฆื•ืข ื”ืคืขื•ืœื” ื‘ืื•ืคืŸ ื™ื“ื ื™ ืคืขื ืื—ืช, ืงืœ ืœื”ื™ืชืงืœ ื‘ืžืฆื‘ ืฉื‘ื• ืฆืžืชื™ื ื—ื“ืฉื™ื ืžื•ืคื™ืขื™ื ื‘ืืฉื›ื•ืœ: ืขืงื‘ ื”ื•ืกืคืช ืฆื•ืžืช ื—ื“ืฉ, ืงื ื” ืžื™ื“ื” ืื•ืคืงื™ ืื•ื˜ื•ืžื˜ื™, ืื• - ืžื” ืฉื™ื•ืชืจ ื’ืจื•ืข - ื”ื—ืœืคืช ืฆื•ืžืช ืขืงื‘ ืชืงืœื”. ื‘ืžืงืจื” ื–ื”, ื™ืฉ ืœื‘ืฆืข ืขื‘ื•ื“ื” ืขื ื”ืื—ืกื•ืŸ ื‘ืฆืžืชื™ื ืืœื” ื”ื•ื ื‘ืœืชื™ ืืคืฉืจื™, ืขื“ ืฉืชื•ืกื™ืฃ ืœื”ื ื™ื“ื ื™ืช ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ Flexvolume.

ื”ืคืชืจื•ืŸ ืœื‘ืขื™ื” ื–ื• ื”ื™ื” ืื—ื“ ืžื”ืคืจื™ืžื™ื˜ื™ื‘ื™ื ืฉืœ Kubernetes - DaemonSet. ื›ืืฉืจ ืฆื•ืžืช ื—ื“ืฉ ืžื•ืคื™ืข ื‘ืืฉื›ื•ืœ, ื”ื•ื ืžื›ื™ืœ ืื•ื˜ื•ืžื˜ื™ืช ืคื•ื“ ืžื”-DaemonSet ืฉืœื ื•, ืฉืืœื™ื• ืžื—ื•ื‘ืจ ืืžืฆืขื™ ืื—ืกื•ืŸ ืžืงื•ืžื™ ืœืื•ืจืš ื”ื ืชื™ื‘ ื›ื“ื™ ืœืžืฆื•ื ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ Flexvolume. ืœืื—ืจ ื”ื™ืฆื™ืจื” ื”ืžื•ืฆืœื—ืช, ื”ืคื•ื“ ืžืขืชื™ืง ืืช ื”ืงื‘ืฆื™ื ื”ื“ืจื•ืฉื™ื ื›ื“ื™ ืฉืžื ื”ืœ ื”ื”ืชืงืŸ ื™ืคืขืœ ืœื“ื™ืกืง.

ื”ื ื” ื“ื•ื’ืžื” ืœ-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, ืืฉืจ ืžื—ื‘ืจ ืืช ื”ืกืคืจื™ื™ื” ืขื ืžื ื”ืœ ื”ื”ืชืงืŸ ื›ืืžืฆืขื™ ืื—ืกื•ืŸ. ืœืื—ืจ ื”ืขืชืงืช ืงื‘ืฆื™ ื”ื“ืจื™ื™ื‘ืจ ื”ื“ืจื•ืฉื™ื, ื”ืคื•ื“ ื”ื–ื” ืœื ืžืช, ืืœื ืžืชื—ื‘ืจ ืœืฉืงืข ื”-IPC ื“ืจืš ื”ื›ืจืš ื”ืžืฆื•ืจืฃ ื›ืฉืจืช RPC ืžืœื. ื”ื—ื‘ื™ืœื” ceph-common ื›ื‘ืจ ืžื•ืชืงื ืช ื‘ืชื•ืš ืžื™ื›ืœ ื”ืคื•ื“. ืฉืงืข ื”-IPC ืžื‘ื˜ื™ื— ืฉื”-kubelet ื™ืชืงืฉืจ ื‘ื“ื™ื•ืง ืขื ื”ืคื•ื“ ืฉื ืžืฆื ื‘ืื•ืชื• ืฆื•ืžืช. ื”ื›ืœ ื’ืื•ื ื™ ืคืฉื•ื˜!..

ืœื”ืชืจืื•ืช, ืชื•ืกืคื™ื ื”ื—ื™ื‘ื” ืฉืœื ื•... ื‘ืชื•ืš ื”ืขืฅ!

ืžืคืชื—ื™ Kubernetes ื’ื™ืœื• ืฉืžืกืคืจ ื”ืชื•ืกืคื™ื ืœืื—ืกื•ืŸ ื‘ืชื•ืš ื”ืœื™ื‘ื” ื”ื•ื ืขืฉืจื™ื. ื•ืฉื™ื ื•ื™ ื‘ื›ืœ ืื—ื“ ืžื”ื, ื‘ื“ืจืš ื–ื• ืื• ืื—ืจืช, ืขื•ื‘ืจ ืืช ืžื—ื–ื•ืจ ื”ืฉื—ืจื•ืจ ื”ืžืœื ืฉืœ Kubernetes.

ืžืกืชื‘ืจ ืฉื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ืชื•ืกืฃ ื”ืื—ืกื•ืŸ, ืืชื” ืฆืจื™ืš ืœืขื“ื›ืŸ ืืช ื›ืœ ื”ืืฉื›ื•ืœ. ื‘ื ื•ืกืฃ ืœื›ืš, ืื•ืœื™ ืชื•ืคืชืขื• ืฉื”ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ Kubernetes ืชื”ืคื•ืš ืคืชืื•ื ืœื‘ืœืชื™ ืชื•ืืžืช ืœืœื™ื‘ืช ื”ืœื™ื ื•ืงืก ืฉื‘ื” ืืชื ืžืฉืชืžืฉื™ื... ืื– ืืชื ืžื ื’ื‘ื™ื ืืช ื”ื“ืžืขื•ืช ืฉืœื›ื ื•ื—ื•ืจืงืช ืฉื™ื ื™ื™ื, ืžืชืืžืช ืขื ื”ื”ื ื”ืœื” ื•ื”ืžืฉืชืžืฉื™ื ืืช ื”ื–ืžืŸ ืขื“ื›ืŸ ืืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ื•ืืช ืืฉื›ื•ืœ Kubernetes. ืขื ื”ืฉื‘ืชื” ืืคืฉืจื™ืช ื‘ืžืชืŸ ื”ืฉื™ืจื•ืชื™ื.

ื”ืžืฆื‘ ื”ื•ื ื™ื•ืชืจ ืžืงื•ืžื™, ืืชื” ืœื ื—ื•ืฉื‘? ืœื›ืœ ื”ืงื”ื™ืœื” ื”ืชื‘ืจืจ ืฉื”ื’ื™ืฉื” ืœื ืขื•ื‘ื“ืช. ื‘ื”ื—ืœื˜ื” ืžื›ื•ื•ื ืช, ืžืคืชื—ื™ Kubernetes ืžื›ืจื™ื–ื™ื ื›ื™ ืชื•ืกืคื™ื ื—ื“ืฉื™ื ืœืขื‘ื•ื“ื” ืขื ืื—ืกื•ืŸ ืœื ื™ืชืงื‘ืœื• ื™ื•ืชืจ ืœืงืจื ืœ. ื‘ื ื•ืกืฃ, ื›ืคื™ ืฉืื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื, ื–ื•ื”ื• ืžืกืคืจ ื—ืกืจื•ื ื•ืช ื‘ื™ื™ืฉื•ื ืชื•ืกืฃ Flexvolume...

ื”ืชื•ืกืฃ ื”ืื—ืจื•ืŸ ืฉื”ืชื•ื•ืกืฃ ืœื ืคื—ื™ื ื‘-Kubernetes, CSI, ื ืงืจื ืœืกื’ื•ืจ ืืช ื”ื‘ืขื™ื” ืขื ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืžืชืžืฉืš ืื—ืช ื•ืœืชืžื™ื“. ื’ืจืกืช ื”ืืœืคื ืฉืœื•, ื”ืžื›ื•ื ื” ื‘ืื•ืคืŸ ืžืœื ื™ื•ืชืจ ื‘ืฉื Out-of-Tree CSI Volume Plugins, ื”ื•ื›ืจื–ื” ื‘ืžื”ื“ื•ืจื” ืงื•ื‘ืจื ื˜ืก 1.9.

ืžื™ื›ืœ ืื—ืกื•ืŸ ืžืžืฉืง, ืื• ืžื•ื˜ ืžืกืชื•ื‘ื‘ CSI 3000!

ืงื•ื“ื ื›ืœ, ืื ื™ ืจื•ืฆื” ืœืฆื™ื™ืŸ ืฉ-CSI ื”ื•ื ืœื ืจืง ืชื•ืกืฃ ื ืคื—, ืืœื ืืžื™ืชื™ ัั‚ะฐะฝะดะฐั€ั‚ ืขืœ ื™ืฆื™ืจืช ืจื›ื™ื‘ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืœืขื‘ื•ื“ื” ืขื ืžื—ืกื ื™ ื ืชื•ื ื™ื. ืžืขืจื›ื•ืช ืชื–ืžื•ืจ ืงื•ื ื˜ื™ื™ื ืจื™ื ื›ืžื• Kubernetes ื•-Mesos ื”ื™ื• ืืžื•ืจื•ืช "ืœืœืžื•ื“" ื›ื™ืฆื“ ืœืขื‘ื•ื“ ืขื ืจื›ื™ื‘ื™ื ื”ืžื™ื•ืฉืžื™ื ืขืœ ืคื™ ืชืงืŸ ื–ื”. ื•ืขื›ืฉื™ื• ื›ื‘ืจ ืœืžื“ืชื™ Kubernetes.

ืžื”ื• ื”ืžื‘ื ื” ืฉืœ ืชื•ืกืฃ CSI ื‘-Kubernetes? ืชื•ืกืฃ CSI ืขื•ื‘ื“ ืขื ืžื ื”ืœื™ ื”ืชืงื ื™ื ืžื™ื•ื—ื“ื™ื (ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI) ื ื›ืชื‘ ืขืœ ื™ื“ื™ ืžืคืชื—ื™ ืฆื“ ืฉืœื™ืฉื™. ืžื ื”ืœ ื”ืชืงืŸ CSI ื‘-Kubernetes ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ืจื›ื‘ ืžืฉื ื™ ืจื›ื™ื‘ื™ื (ืชืจืžื™ืœื™ื):

  • ื‘ืงืจ - ืžื ื”ืœ ืื—ืกื•ืŸ ืžืชืžื™ื“ ื—ื™ืฆื•ื ื™. ื”ื•ื ืžื™ื•ืฉื ื›ืฉืจืช gRPC, ืฉืขื‘ื•ืจื• ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืคืจื™ืžื™ื˜ื™ื‘ื™ StatefulSet.
  • ืฆื•ืžืช - ืื—ืจืื™ ืขืœ ื”ืจื›ื‘ืช ืื—ืกื•ืŸ ืžืชืžืฉืš ืœืฆืžืชื™ ืืฉื›ื•ืœ. ื”ื•ื ืžื™ื•ืฉื ื’ื ื›ืฉืจืช gRPC, ืืš ื”ื•ื ืžืฉืชืžืฉ ื‘ืคืจื™ืžื™ื˜ื™ื‘ื™ DaemonSet.

ืชื•ืกืคื™ ื ืคื— ืœืื—ืกื•ืŸ Kubernetes: ืž-Flexvolume ื•ืขื“ CSI
ื›ื™ืฆื“ ืคื•ืขืœ ื”ืคืœืื’ื™ืŸ CSI ื‘-Kubernetes

ืืชื” ื™ื›ื•ืœ ืœืœืžื•ื“ ืขืœ ื›ืžื” ืคืจื˜ื™ื ืื—ืจื™ื ืขืœ ืขื‘ื•ื“ืชื• ืฉืœ CSI, ืœืžืฉืœ, ืžื”ืžืืžืจ "ื”ื‘ื ืช ื”-C.S.I.' ืชืจื’ื•ื ืžื”ื ืคืจืกืžื ื• ืœืคื ื™ ืฉื ื”.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื™ื™ืฉื•ื ื›ื–ื”

  • ืขื‘ื•ืจ ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื ื›ืžื• ืจื™ืฉื•ื ื“ืจื™ื™ื‘ืจ ืœืฆื•ืžืช, ืžืคืชื—ื™ Kubernetes ื”ื˜ืžื™ืขื• ืงื‘ื•ืฆื” ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื. ืื™ื ืš ืฆืจื™ืš ืขื•ื“ ืœื™ืฆื•ืจ ืชื’ื•ื‘ืช JSON ืขื ื™ื›ื•ืœื•ืช ื‘ืขืฆืžืš, ื›ืคื™ ืฉื ืขืฉื” ืขื‘ื•ืจ ื”ืคืœืื’ื™ืŸ Flexvolume.
  • ื‘ืžืงื•ื "ืœื”ื—ืœื™ืง" ืงื‘ืฆื™ ื”ืคืขืœื” ืœืฆืžืชื™ื, ืื ื• ืžืขืœื™ื ื›ืขืช ืชืจืžื™ืœื™ื ืœืืฉื›ื•ืœ. ื–ื” ืžื” ืฉืื ื—ื ื• ืžืฆืคื™ื ื‘ื”ืชื—ืœื” ืž-Kubernetes: ื›ืœ ื”ืชื”ืœื™ื›ื™ื ืžืชืจื—ืฉื™ื ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจื™ื ื”ืคืจื•ืกื™ื ื‘ืืžืฆืขื•ืช ืคืจื™ืžื™ื˜ื™ื‘ื™ื ืฉืœ Kubernetes.
  • ืื™ื ืš ืฆืจื™ืš ืขื•ื“ ืœืคืชื— ืฉืจืช RPC ื•ืœืงื•ื— RPC ื›ื“ื™ ืœื™ื™ืฉื ื“ืจื™ื™ื‘ืจื™ื ืžื•ืจื›ื‘ื™ื. ื”ืœืงื•ื— ื”ื•ื˜ืžืข ืขื‘ื•ืจื ื• ืขืœ ื™ื“ื™ ืžืคืชื—ื™ Kubernetes.
  • ื”ืขื‘ืจืช ืืจื’ื•ืžื ื˜ื™ื ืœืขื‘ื•ื“ื” ืขืœ ืคืจื•ื˜ื•ืงื•ืœ gRPC ื”ืจื‘ื” ื™ื•ืชืจ ื ื•ื—ื”, ื’ืžื™ืฉื” ื•ืืžื™ื ื” ืžืืฉืจ ื”ืขื‘ืจืช ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืฉื•ืจืช ื”ืคืงื•ื“ื”. ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ืชืžื™ื›ื” ืขื‘ื•ืจ ืžื“ื“ื™ ืฉื™ืžื•ืฉ ื‘ื ืคื— ืœ-CSI ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืฉื™ื˜ืช gRPC ืกื˜ื ื“ืจื˜ื™ืช, ืชื•ื›ืœ ืœืงืจื•ื: ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืฉืœื ื• ืขื‘ื•ืจ ืžื ื”ืœ ื”ืชืงืŸ vsphere-csi.
  • ื”ืชืงืฉื•ืจืช ืžืชืจื—ืฉืช ื‘ืืžืฆืขื•ืช ืฉืงืขื™ IPC, ื›ื“ื™ ืœื ืœื”ืชื‘ืœื‘ืœ ืื ื”ืงื•ื‘ืœื˜ ืฉืœื— ืืช ื”ื‘ืงืฉื” ืœืคื•ื“ ื”ื ื›ื•ืŸ.

ื”ืื ื”ืจืฉื™ืžื” ื”ื–ื• ืžื–ื›ื™ืจื” ืœืš ืžืฉื”ื•? ื”ื™ืชืจื•ื ื•ืช ืฉืœ CSI ื”ื ืœืคืชื•ืจ ืืช ืื•ืชืŸ ื‘ืขื™ื•ืช, ืฉืœื ื ืœืงื—ื• ื‘ื—ืฉื‘ื•ืŸ ื‘ืขืช โ€‹โ€‹ืคื™ืชื•ื— ื”ืชื•ืกืฃ Flexvolume.

ืžืžืฆืื™ื

CSI ื›ืกื˜ื ื“ืจื˜ ืœื”ื˜ืžืขืช ืชื•ืกืคื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžื—ืกื ื™ ื ืชื•ื ื™ื ื”ืชืงื‘ืœ ื‘ื—ื•ื ืจื‘ ืขืœ ื™ื“ื™ ื”ืงื”ื™ืœื”. ื™ืชืจื” ืžื›ืš, ื‘ืฉืœ ื”ื™ืชืจื•ื ื•ืช ื•ื”ืจื‘ื’ื•ื ื™ื•ืช ืฉืœื”ื, ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI ื ื•ืฆืจื™ื ืืคื™ืœื• ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืื—ืกื•ืŸ ื›ื’ื•ืŸ Ceph ืื• AWS EBS, ืชื•ืกืคื™ื ืœืขื‘ื•ื“ื” ืื™ืชื ื ื•ืกืคื• ื‘ื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ Kubernetes.

ื‘ืชื—ื™ืœืช 2019, ืชื•ืกืคื™ื ื‘ืชื•ืš ื”ืขืฅ ื”ื•ื›ืจื–ื• ืžื™ื•ืฉื ื™ื. ืื ื• ืžืชื›ื ื ื™ื ืœื”ืžืฉื™ืš ืœืชืžื•ืš ื‘ืชื•ืกืฃ Flexvolume, ืืš ืœื ื ืคืชื— ืขื‘ื•ืจื• ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื“ืฉื”.

ืœื ื• ืขืฆืžื ื• ื›ื‘ืจ ื™ืฉ ื ื™ืกื™ื•ืŸ ื‘ืฉื™ืžื•ืฉ ื‘-ceph-csi, vsphere-csi ื•ืžื•ื›ื ื™ื ืœื”ื•ืกื™ืฃ ืœืจืฉื™ืžื” ื–ื•! ืขื“ ื›ื”, CSI ืžืชืžื•ื“ื“ืช ืขื ื”ืžืฉื™ืžื•ืช ืฉื”ื•ื˜ืœื• ืขืœื™ื” ื‘ืจืขืฉ ื’ื“ื•ืœ, ืื‘ืœ ื ื—ื›ื” ื•ื ืจืื”.

ืืœ ืชืฉื›ื— ืฉื›ืœ ื“ื‘ืจ ื—ื“ืฉ ื”ื•ื ื—ืฉื™ื‘ื” ืžื—ื•ื“ืฉืช ื˜ื•ื‘ื” ืขืœ ื”ื™ืฉืŸ!

ื .ื‘.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”