áá° áá Kubernetes á ááá v1.0.0 áłá, á¨áľáá˝ áá á á°á°áŞáá˝ áá áŠ. áá (áá) á¨ááŤáŁ áá¨áá ááá¨áá¸áľ áľáááśá˝á ᨠKubernetes áá ááááááľ áŤáľáááá¸á áá áᢠááĽáŤá¸á áľáá˝ áá á, áĽá á¨ááááŞáŤááš ááŤá¨á áĽáá° GCE PD, Ceph, AWS EBS áĽá ááá˝ á¨ááłá°á á¨áá¨ááť á á
áŤá˘áá˝ áá áŠ.
á°á°áŞááš á¨áŠá áááľáľ áá á°á°ááááᣠááá
á áá áľáá¸áá áŤáááľ - á áá ááľáĽá˘ ááá ááᣠááĽááá˝áŁ á¨ááŁá á°á°áŞáá˝ áľáĽáľáĽ á á áŤááá áá á°áááˇáᢠá¨áĽá
áŁáááŤáá˝ áá¸áśá˝á á áá áá áá° áŠá áááľáľ áŽá ááá áŤá á°á°áŞáá˝á á¨áá¨á á¨á፠á áá á¨áŤáłá¸áá áŠá áááľáľ á°áĽáľá á á á ááááŽáťá¸á áá áŤááľá˘ áá á¨áá á áá á¨áŠá áááľáľ ááá˘áá˝ áá
áá á°áááᥠááł á˝áአáááł á áá˝áá. á°áá˝ áŤáľáááá¸áá á¨áᣠááľáá ááá. áĽá á Kubernetes v1.2.0 áááá
áá áłá¨ ...
Flexvolume pluginᥠáľááš á¨áᣠááĽáá ááá
á¨áŠá áááľáľ ááá˘áá˝ á¨FlexVolume áááá ááĽá¨ááᣠáá á á áśáľá°á ááá ááá˘áá˝ á¨á°á°áá አFlexvolume áááá˝ áá á áĽáŽ áááľáŤáľ á¨á°ááááŽá˝ áĽá áá´áá˝ á ááááŽá á áááá áá áá˘
áĽáľá˛ áá áĽáá á¨FlexVolume ážáá áá áĽáá°áá á áá áĽáá áĽáááááᢠáá á¨á°áá°á ááᢠáá°áá á á¨áá˝á ááá (áááľáŽá˝ áááᣠáááá áľááŞááľáŁ áŁá˝ áľááŞááľáŁ ááá°)ᣠáĽáąá á˛á°áá á á¨áľáĽáá ááľáá áá᪠áĽá´áśá˝á áĽáá° ááĽá áľ ááľáś á JSON á áá¸áľ ááľá á¨áłáá ááľáŽá˝ á¨áŤá áááĽááľ ááááłáᢠá áľáááᾠᣠá¨ááááŞáŤá á¨áľááá ááľáá áááá áá áá áá´ áá ᣠáĽá ááŞááš áá¤áśá˝ á¨áĽáą áááŞáŤáá˝ áá¸áá˘
á OpenShift ááľáĽ á CIFS áááŤáśá˝ á¨áááááľ ááľáᢠ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
, áĽá á áĽáą á ááŤáááľ áá áá˝á á áĽááá°á áá á¨ááá¨á á˝ááł, áĽáŤáľáá á á°áἠááá
áá˝áá
áĽá á¨á¤áá¤áá¤áľ áá áááľáŤáľ á¨Flexvolume áá áľáá ፠ááłá áĽáá á á
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
áľááá , áľáááááá á°ááťá ááá áŤááá á áá, áŤáľáááááłá áááá áá° áŠá áááľáľ áááľá°á ááľááá˘. á á˝á¨ááŤáŞá á áľááľá á á°áá°áá ááááľ á áĽáŤááłááą á¨áááľá°á ááľááá ááááľ áá áááἠá áá áľá˘ á ááŁáŞ á°ááá§ááĄ-
/usr/libexec/kubernetes/kubelet-plugins/volume/exec/иПŃ_пОŃŃавŃика_Ń
ŃаниНиŃĐ°~иПŃ_Đ´ŃаКвоŃĐ°/
... áá á¨á°ááŤáŠ á¨áŠá áááľáľ áľáááśá˝á (OpenShift, Rancher ...) á˛á áá ááááą á¨á°áᨠááá áá˝áá.
Flexvolume á˝ááŽá˝-á¨áᣠááĽáá ááá á áľááá áĽáá´áľ ááŁá áĽáá°ááťá?
á¨Flexvolume áááá áá° áááľá°á ááśá˝ ááŤá ááá áŤááá á°ááŁá áá á°áááˇáᢠááááá á ááľ áá á áĽá áŤá°á¨á á áá á áááľá°á ááľáĽ á áłá˛áľ á áááá˝ á¨ááłáŠá áľ áááł á ááá ááŤááĽáááľ áá˝áá-á á á˛áľ ááľááá ááááľ áá¨áá ᣠá ááśáá˛á á ááľá ááá ᣠááá - á¨á¨áá - á á°á áḠááááŤáľ á¨ááľááá áááá áá°áŤáľá˘ á áá áááł, á áĽááá á áááá˝ áá á¨áá¨ááťá áá ááľáŤáľ áá°á¨á á áá áľ á¨áááťá ááá ááá á¨Flexvolume áááá áĽáŤáľá áĽáľáŞá¨ááŠáá¸á áľá¨áľá˘
ááá
á˝áá áááľáá á¨áŠá áááľáľ áĽááłáááľ á ááą áá á - DaemonSet
. á áááľá°á ááľáĽ á á˛áľ ááľááá ááááľ á˛ááŁáŁ á áŤáľ-á°á á¨Flexvolume áááá˝á áááááľ á á áŤáŁá˘á á¨áľáá˝ áá á á°áŤáááᢠá á°áłáŤ áááł á˛áá á ááą ááá áá° á˛áľá áĽáá˛á°áŤ á áľááááášá áááá˝ áááá áŁá.
á¨Flexvolume áááá ááááááľ á¨áĽáá°áá á áááľ DaemonSet ááłá áá¸áááĄ
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>
... áĽá á¨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
á¨á áá á á áŤá áááááľ á¨áá áľá á áśáá á áá°ááá˘. áŠáĽááą á¨áá á¨áĽ áá°áą á¨áá ááá á ááľ ážááŠá áá áá áĽáá˛ááá á¨áá°á áĽáľá á á, áá á áľáááą áĽáá˛á áá˝ áŤá°ááá. áľááááá á ááŤá¨áĽ á ááááŞáŤ á¨áááá áááá˝ á á°áᨠáľá áá áłáľ áĽá á¨ááŤá á¨á áśáá áłáá áá°á¨á áľáŤá áá áá ááá˘
á áŽá áŚááŹá°á ááľáĽ á¨á´á áá á¨ááĽáŤáľ ááľáᥠá áĽáá áá áŤáá á¨Flexvolume ážáá á áŽá ááŞá ááľáĽ ááááá˘
á¨Flexvolume áááá˝á á˛á áá á¨áááĽáá á˝áá áá áĽááá á áááľá°á ááľááá ááááľ áá¨ááť ááᢠááá á áľáááá áśááľáá ááŤá á áá áľ (áááłá á¨á´á-á¨á፠áĽá á áá´á)ᢠááááŞáŤ áá ᨠFlexvolume áááá áĽáá°áá áŤá ááľáĽáľáĽ áľáááśá˝á ááá°áá á á áá°áá°áá.
ááá á˝áá á¨ááááŞáŤ áááľá á áŽá áŚááŹá°á á¨Flexvolume á á˝á¨ááŤáŞ á á°ááŁá á áá ááłáŤááĄ
á á˝á¨ááŤáŞá áŤáą áĽáá° RPC á°áá á áá á¨á°áá¨á°áᢠááááááľ á¨á ááᲠáśáŹáľ á¨á á˝á¨ááŤáŞá áá á á°ááłáłá áá፠ááľáĽ ááááᢠá¨á á˝á¨ááŤáŞ áááá˝á ááá áłáľ DaemonSet á áá áá áĽáŠ áĽáá°ááá áĽááľáłááłáá, áá á áááŤáá á¨á á˝á¨ááŤáŞá áá áĽáá° áĽáŤá áŤáááá. á áľááá á¨áááľá á¨áŽá ážáá áááá˝á á¨ááá ᥠá áá áá ááľ á áááľá, ááá áá á¨á ááᲠáśáŹáľ áá á á°áŤáŤááľ á¨áľáá˝ áá á áĽáá° áá ᨠRPC á áááá ááááá. á¨á´á-á¨á፠áĽá á á áľááľá á ááľ ááá ááľáĽ á°áááᢠá¨á ááᲠáśáŹáľ áŠá¤ááą á á°ááłáłá ááľááá ááááľ áá áŤáá ááľ áá á áľááá áááááąá áŤá¨áááŁáᢠááá áĽáá ááľ ááá áá! ..
á°á á ááᣠá¨áĽá á°ááłá ... á áá ááľáĽ á°á°áŞáá˝!
á¨áŠá áááľáľ ááá˘áá˝ á ááá ááľáĽ ááá¨ááť á¨á°á°áŞáá˝ áĽááľ á፠áááá á°áá°áá áłáᢠáĽá á áĽáŤááłááłá¸á áá áááĽ, á ááľ ááááľ ááá áá, áááá á¨áŠá áááľáľ áááá፠áá°áľ ááľáĽ áŤááá.
á á˛áąá á¨áá¨ááť á°á°áŞáá ááá áá ᣠáááá áľáĽáľáĽ áááá áŤáľáááááłá. á¨áá á á°á¨á᪠á á˛áą á¨áŠá áááľáľ áľáŞáľ á¨ááľá ááá ááááľ á¨ááá áá á¨áááŁáŁá ááá ááŤáľáááá áá˝ááá˘...áľááá áĽááŁá á á ááá áĽááśá˝á á áĽáŤáá¨á á¨á áľá°áłá°áá áĽá á¨á°á áááá˝á áá ááá á á áľá°áŁáĽá¨á á¨ááááľ á¨ááá áĽá á¨áŠá áááľáľ áááľá°á á áááᢠá á áááááśá˝ á á ááŚáľ ááľáĽ ááá á¨áá˝áá á¨áĽá¨ááľ áá ááá˘
áááłá á¨á áľáá á áá áá, á áááľáááľá? á áŤááą áá¤áłá áĽááłááá áááá á áĽá¨á°á°áĽ ááá˝ ááᢠáá á°áĽá ááłáᣠá¨áŠá áááľáľ ááá˘áá˝ á¨áá¨ááť áá á¨áá°áŠ á áłá˛áľ á°á°áŞáá˝ á¨á áá á áá áá° á¨ááá áĽáá°áááá á áŤáľáłáááᢠá á°á¨ááŞáᣠáá°á áĽáá áĽáá°áááááᣠá Flexvolume áááá áľáá ፠áá á ááŤáł áľáááśá˝ á°ááá°áá...
á Kubernetes, CSI ááľáĽ áŤáá á¨á
áἠáá á¨á°á¨áá¨á áááá ááłáŠá á á°á¨áłáłá á¨ááἠáá¨ááť áá áá´á ááá¨á¨áť áá áĽáá˛ááá á°á ááś áá áᢠá¨á áá áĽáŞáľáŁ á¨áá á᪠CSI áĽáŤá ááááá˝ á ááŁá á¨ááłáááᣠá á°áááá
á¨ááŤáŁ áá¨ááť á áááá˝áŁ ááá CSI 3000 á¨áá˝á¨á¨á¨á ááá!
á ááááŞáŤ á°á¨á, CSI á¨áľáá˝ áááá áĽáť áłááá áĽááá°á áááá ááľá°áá áĽááááá
á Kubernetes ááľáĽ á¨CSI á°á°áŞá ááá á áááľáá? ᨠCSI áááá á¨áአážááŽá˝ áá áá°áŤá (á¨á˛á¤áľá á á á˝á¨ááŤáŞáá˝) á áśáľá°á ááá ááá˘áá˝ á¨á°ááᢠá áŠá áááľáľ ááľáĽ áŤá á¨á˛á¤áľá á ášáá á áľááš áááľ á áŤááľá (ááľáľ) ááŤá á áá áľáĄ-
- áááŁá áŞáŤ - ááŤá áá áá¨ááťáá˝á áŤáľá°áłáľáŤá. áĽáą áĽáá° gRPC á áááá áá á¨áá°áá á¨áᣠááá
á áĽááłáá áĽá
á áá áááá
StatefulSet
. - á áá - áá áá¨ááťá áá° áááľá°á ááśá˝ á¨ááľá¨á áááááľ á áá áľá˘ áĽáą áĽáá° gRPC á ááááá áá°áá áŤáᣠááá áá ááŞáá˛á ááĽáą áĽá
á áá áááá
DaemonSet
.
ᨠCSI á°á°áŞ á áŠá áááľáľ ááľáĽ áĽáá´áľ áĽáá°áá°áŤ
áľá CSI áĽáŤ ááá˝ ááááŽá˝ áááłá á¨á˝áá ááá áľá˝ááá
á¨áĽáá°áá á áááľ á á°ááŁá á áĽá áá˝
- áĽáá° ááľááá ááááľ ášáá ááááἠáá áá°á¨áłá áááŽá˝ á¨áŠá áááľáľ ááá˘áá˝ á¨áĽá ááŤáŁ áľáĽáľáĽá á°ááŁáŤá á áľááááᢠáFlexvolume áááá áĽáá°á°á°á¨áá á¨á áá á áá á¨á˝ááłáá˝ áá á¨JSON ááá˝ áááá¨áľ á áŤáľáááááľáá˘
- áá°áá አá¨áá˝á áááá˝á á ááľááá ááááľ áá "á¨ááá¸áŤá°áľ" ááá ᣠá áá ááľáá˝á áá° áááľá°á áĽáá°á áááᢠá¨áŠá áááľáľ ááááŞáŤ á¨ááá áĽáá áá ááᥠááá áá°áśá˝ á¨áá¨á°áąáľ Kubernetes primitivesá á áá áá á á°áá¨áá áŽáá´áááŽá˝ ááľáĽ ááá˘
- ááľáĽáľáĽ áááá˝á ááá°áá á á¨á áá á áá ᨠRPC á áááá áĽá RPC á°áá áá ááłá á á áŤáľáááááľáᢠá°áá áá á áŠá áááľáľ ááá˘áá˝ ááĽá á°á°ááĽáŻá.
- á gRPC ááŽáśáŽá áá áááľáŤáľ ááááŽá˝á ááá á áľáĽáá ááľáá áá᪠áĽá´áśá˝ á¨ááá á¨á áá ááš áŁá°áááá áĽá á áľá°ááá ááᢠá°á¨ááá á¨á á á á¨áá ááᲠáá´á á áá¨á ááľáá˝ á á ááá áááŞáŤáá˝ áľááá áá° CSI áĽáá´áľ áá¨á áĽáá°ááťá ááá¨áłáľ á¨áá¨á°ááá ááá ἠáá˝áááĄ-
á¨áĽá á¨ááłáĽ áĽáŤá á vsphere-csi ážáá. - áŽáááŹá˝á á á ááᲠáśáŹáśá˝ á áŠá áá¨á°áłáᣠáľááá áŠá¤ááą áĽáŤááá áá° áľááááá ááľ áᎠáĽáá°áá á፠áĽááłáááĄá˘
áá áááá á¨áá ááá áŤáľáłáá°ááłá? ᨠCSI áĽá áá˝ áá¸á á°ááłáłá á˝ááŽá˝á áááłáľá¨ Flexvolume áááá á˛ááĽáŠ áááľ ááľáĽ áŤáááĄ.
áááśá˝
CSI á¨áá¨á ááááá˝ áá ááľá°ááĽá áááá á áĽá ááááá˝á ááá°áá á áĽáá° ááľáááľ á áá á á¨á°áĄ áááľ áá áŤá á ááŁá á á°á°ááááłáᢠá á°á¨ááŞáᣠá áĽá áá¸á áĽá ááááĽááłá¸áᣠá¨á˛á¤áľá á á á˝á¨ááŤáŞáá˝ áĽáá° Ceph ááá AWS EBS áá á¨áá¨ááť áľáááśá˝ á¨á°áá áŠáľ á°á°áŞáá˝ á áááááŤá á¨áŠá áááľáľ áĽáľá áá á°á¨áá¨ááá˘
á 2019 ááááŞáŤ ááᣠá áá ááľáĽ á°á°áŞáá˝
áĽá áĽáŤáłá˝á áá°á á˛á ceph-csi, vsphere-csi á¨áá áá áááľ á áá áĽáá áá°áá áááá ááá¨áá ááá áá! áĽáľáŤááᣠá˛á¤áľá á á¨á°áá°á ááľá á°ááŁá á áĽáá áááááᣠáá áĽáá áĽááá áĽááŤááá˘
á á˛áľ ááá áá á¨áľáŽáá áĽáá°áá áá°áĽ áááá á áľááá!
PS
á áĽááá˝á áá áŤááĽáĄáĄ-
- ÂŤ
á¨ááŤáŁ áá¨ááť á áááá˝á áĽáá¨áłáá (á áŠá áááľáľ áĽáť áłááá) "; - ÂŤ
áá° áŠá ááá ááááľá¨á - áĽáŤáá ááᢠ"; - ÂŤ
á Kubernetes ááľáĽ á¨áľáá˝ á á˝á áłá áá˝ áĽááłáá˝á á¨á áá áľáŞáľ á ááľá°ááá áá Âť.
ááá: hab.com