Kubernetes๊ฐ v1.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 ํ์์ ๋ฏธ๋ฆฌ ์๋ ค์ง ํ๋๊ฐ ํฌํจ๋ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค. ๊ด๋ก์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๋ช ๋ น์ค ์ธ์๋ ํญ์ ๋ฉ์๋์ด๊ณ ๋๋จธ์ง ์ธ์๋ ํด๋น ๋งค๊ฐ ๋ณ์์ ๋๋ค.
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
๋๋ผ์ด๋ฒ๋ฅผ ํธ์ถํ ๋ kubelet์ด ํฅํ ์๋ํ ์๋๋ฆฌ์ค๋ฅผ ์ ์ํฉ๋๋ค. ํน๋ณํ ๋ฐฉ๋ฒ๋ ์์ด์ expandvolume
ะธ expandfs
, ๋ณผ๋ฅจ์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
๋ฉ์๋๊ฐ ์ถ๊ฐํ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ expandvolume
, ์ค์๊ฐ์ผ๋ก ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๊ธฐ๋ฅ์ ํตํด ๋ค์ ์ฌํญ์ ์ต์ํด์ง ์ ์์ต๋๋ค.
๋ค์์ NFS ์์ ์ ์ํ 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
๋ฐ๋ผ์ ์ค์ ์คํ ํ์ผ์ ์ค๋นํ ํ์๋ Kubernetes ํด๋ฌ์คํฐ์ ๋๋ผ์ด๋ฒ ์ ๋ก๋. ๋๋ผ์ด๋ฒ๋ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ๊ฐ ํด๋ฌ์คํฐ ๋ ธ๋์ ์์นํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์ด ์ ํ๋์์ต๋๋ค.
/usr/libexec/kubernetes/kubelet-plugins/volume/exec/ะธะผั_ะฟะพััะฐะฒัะธะบะฐ_ั
ัะฐะฝะธะปะธัะฐ~ะธะผั_ะดัะฐะนะฒะตัะฐ/
... ํ์ง๋ง ๋ค๋ฅธ Kubernetes ๋ฐฐํฌํ(OpenShift, Rancher...)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
Flexvolume ๋ฌธ์ : ๋์ฏ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์บ์คํ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
Flexvolume ๋๋ผ์ด๋ฒ๋ฅผ ํด๋ฌ์คํฐ ๋ ธ๋์ ์ ๋ก๋ํ๋ ๊ฒ์ ๊ฐ๋จํ ์์ ์ด ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์์ ์ ์๋์ผ๋ก ํ ๋ฒ ์ํํ๋ฉด ์ ๋ ธ๋ ์ถ๊ฐ, ์๋ ์ํ ํ์ฅ ๋๋ ์ค์๋์ผ๋ก ์ธํ ๋ ธ๋ ๊ต์ฒด๋ก ์ธํด ํด๋ฌ์คํฐ์ ์ ๋ ธ๋๊ฐ ๋ํ๋๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋น ๋ ธ๋์ ์คํ ๋ฆฌ์ง ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ๋ถ๊ฐ๋ฅํ, Flexvolume ๋๋ผ์ด๋ฒ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ ๋๊น์ง.
์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์ Kubernetes ๊ธฐ๋ณธ ์์ ์ค ํ๋์์ต๋๋ค. DaemonSet
. ํด๋ฌ์คํฐ์ ์ ๋
ธ๋๊ฐ ๋ํ๋๋ฉด Flexvolume ๋๋ผ์ด๋ฒ๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ก์ปฌ ๋ณผ๋ฅจ์ด ์ฐ๊ฒฐ๋๋ DaemonSet์ ํฌ๋๊ฐ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋๋ฉด ํฌ๋๋ ๋๋ผ์ด๋ฒ๊ฐ ๋์คํฌ์ ์๋ํ๋ ๋ฐ ํ์ํ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
๋ค์์ 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 ๋๋ผ์ด๋ฒ๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํ Bash ์คํฌ๋ฆฝํธ์ ์:
#!/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์ด ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ฌ ์์คํ ์ถฉ๋์ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋จผ์ ๋๋ผ์ด๋ฒ ํ์ผ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณต์ฌํ ๋ค์ ์์์ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
Rook ์ด์์์ Ceph ์์
๋ค์ด์ด๊ทธ๋จ: ๋ค์ด์ด๊ทธ๋จ์ Flexvolume ๋๋ผ์ด๋ฒ๋ Rook ์์ด์ ํธ ๋ด๋ถ์ ์์ต๋๋ค.
Flexvolume ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ๋์ ๋ค์ ๋ฌธ์ ๋ ํด๋ฌ์คํฐ ๋ ธ๋์ ๋๋ถ๋ถ์ ์คํ ๋ฆฌ์ง์ ๋ํ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด ํ์ํ ์ํํธ์จ์ด๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค (์: Ceph์ฉ ceph-common ํจํค์ง) ์ฒ์์๋ Flexvolume ํ๋ฌ๊ทธ์ธ์ด ์ด๋ฌํ ๋ณต์กํ ์์คํ ์ ๊ตฌํํ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ์๋์ ํด๊ฒฐ์ฑ ์ Rook ์ฐ์ฐ์์ Flexvolume ๋๋ผ์ด๋ฒ ๊ตฌํ์์ ๋ณผ ์ ์์ต๋๋ค.
๋๋ผ์ด๋ฒ ์์ฒด๋ RPC ํด๋ผ์ด์ธํธ๋ก ์ค๊ณ๋์์ต๋๋ค. ํต์ ์ ์ํ IPC ์์ผ์ ๋๋ผ์ด๋ฒ ์์ฒด์ ๋์ผํ ๋๋ ํฐ๋ฆฌ์ ์์ต๋๋ค. ๋๋ผ์ด๋ฒ ํ์ผ์ ๋ณต์ฌํ๋ ค๋ฉด ๋๋ ํฐ๋ฆฌ๋ฅผ ๋๋ผ์ด๋ฒ์ ๋ณผ๋ฅจ์ผ๋ก ์ฐ๊ฒฐํ๋ DaemonSet์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํฉ๋๋ค. ํ์ํ ๋ฃจํฌ ๋๋ผ์ด๋ฒ ํ์ผ์ ๋ณต์ฌํ ํ ์ด ํฌ๋๋ ์ฃฝ์ง ์๊ณ ๋ณธ๊ฒฉ์ ์ธ RPC ์๋ฒ๋ก์ ์ฐ๊ฒฐ๋ ๋ณผ๋ฅจ์ ํตํด IPC ์์ผ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ceph-common ํจํค์ง๋ ์ด๋ฏธ ํฌ๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ค์น๋์ด ์์ต๋๋ค. IPC ์์ผ์ kubelet์ด ๋์ผํ ๋ ธ๋์ ์๋ Pod์ ์ ํํ๊ฒ ํต์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ ์ฐฝ์ ์ธ ๋ชจ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค!..
์๋ , ์ฐ๋ฆฌ์ ๋ค์ ํ... ํธ๋ฆฌ ๋ด ํ๋ฌ๊ทธ์ธ๋ค!
Kubernetes ๊ฐ๋ฐ์๋ ์ฝ์ด ๋ด ์คํ ๋ฆฌ์ง์ฉ ํ๋ฌ๊ทธ์ธ ์๊ฐ XNUMX๊ฐ๋ผ๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ด๋ค ์์ผ๋ก๋ ์ ์ฒด Kubernetes ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
์๋ก์ด ๋ฒ์ ์ ์ ์ฅ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ ์ฒด ํด๋ฌ์คํฐ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ด์ ๋ํด, ์ ๋ฒ์ ์ Kubernetes๊ฐ ๊ฐ์๊ธฐ ์ฌ์ฉ ์ค์ธ Linux ์ปค๋๊ณผ ํธํ๋์ง ์๊ฒ ๋๋ค๋ ์ฌ์ค์ ๋๋ผ์ค ์๋ ์์ต๋๋ค... ๋ฐ๋ผ์ ๋๋ฌผ์ ๋ฆ๊ณ ์ด๋ฅผ ์ ๋ฌผ๊ณ ๊ฒฝ์์ง ๋ฐ ์ฌ์ฉ์์ ํ์ํ์ฌ ๋ค์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค. Linux ์ปค๋ ๋ฐ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์๋น์ค ์ ๊ณต ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ํฉ์ด ์ฐ์ค๊ฝ์ค๋ฝ๋ค๊ณ ์๊ฐํ์ง ์๋์? ์ด ์ ๊ทผ ๋ฐฉ์์ด ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ์ด ์ ์ฒด ์ปค๋ฎค๋ํฐ์ ๋ถ๋ช ํด์ก์ต๋๋ค. ์๋์ ์ธ ๊ฒฐ์ ์ ๋ฐ๋ผ Kubernetes ๊ฐ๋ฐ์๋ ์คํ ๋ฆฌ์ง ์์ ์ ์ํ ์๋ก์ด ํ๋ฌ๊ทธ์ธ์ด ๋ ์ด์ ์ปค๋์ ํ์ฉ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋ฐํํ์ต๋๋ค. ๋ํ ์ด๋ฏธ ์๊ณ ์๋ฏ์ด Flexvolume ํ๋ฌ๊ทธ์ธ ๊ตฌํ์์ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ํ์ธ๋์์ต๋๋ค...
Kubernetes์ ๋ณผ๋ฅจ์ฉ์ผ๋ก ์ต๊ทผ ์ถ๊ฐ๋ ํ๋ฌ๊ทธ์ธ์ธ CSI๋ ์๊ตฌ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฒญ๋์์ต๋๋ค. Out-of-Tree CSI Volume Plugins๋ผ๊ณ ๋ ์์ธํ ์๋ ค์ง ์ํ ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ค์์ ๋ฐํ๋์์ต๋๋ค.
์ปจํ ์ด๋ ์คํ ๋ฆฌ์ง ์ธํฐํ์ด์ค ๋๋ CSI 3000 ์คํผ๋ ๋ก๋!
์ฐ์ , CSI๋ ๋จ์ํ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ด ์๋๋ผ ์ค์ ํ๋ฌ๊ทธ์ธ์ด๋ผ๋ ์ ์ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค.
Kubernetes์ CSI ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ๋ ๋ฌด์์ ๋๊น? CSI ํ๋ฌ๊ทธ์ธ์ ํน์ ๋๋ผ์ด๋ฒ(CSI ๋๋ผ์ด๋ฒ) ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์์ฑํ์ต๋๋ค. Kubernetes์ CSI ๋๋ผ์ด๋ฒ๋ ์ต์ํ ๋ ๊ฐ์ง ๊ตฌ์ฑ ์์(ํฌ๋)๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค.
- ์ ์ด ์ฅ์น โ ์ธ๋ถ ์๊ตฌ ์ ์ฅ์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฌ์ฉํ๋ gRPC ์๋ฒ๋ก ๊ตฌํ๋ฉ๋๋ค.
StatefulSet
. - ๋
ธ๋ โ ์๊ตฌ ์คํ ๋ฆฌ์ง๋ฅผ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ง์ดํธํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. gRPC ์๋ฒ๋ก๋ ๊ตฌํ๋์ง๋ง ์ด๋ฅผ ์ํด ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
DaemonSet
.
Kubernetes์์ CSI ํ๋ฌ๊ทธ์ธ์ด ์๋ํ๋ ๋ฐฉ์
์๋ฅผ ๋ค์ด ๋ค์ ๊ธฐ์ฌ์์ CSI ์์
์ ๋ค๋ฅธ ์ธ๋ถ ์ฌํญ์ ๋ํด ์์๋ณผ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ตฌํ์ ์ฅ์
- ๋ ธ๋ ๋๋ผ์ด๋ฒ ๋ฑ๋ก๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ์ํด Kubernetes ๊ฐ๋ฐ์๋ ์ปจํ ์ด๋ ์ธํธ๋ฅผ ๊ตฌํํ์ต๋๋ค. Flexvolume ํ๋ฌ๊ทธ์ธ์์์ฒ๋ผ ๋ ์ด์ ๊ธฐ๋ฅ์ด ํฌํจ๋ JSON ์๋ต์ ์ง์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
- ์คํ ํ์ผ์ ๋ ธ๋์ "์ฌ๋ฆฝ"ํ๋ ๋์ ์ด์ ํด๋ฌ์คํฐ์ ํฌ๋๋ฅผ ์ ๋ก๋ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฒ์์ Kubernetes์์ ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ํ๋ก์ธ์ค๋ Kubernetes ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ ์ปจํ ์ด๋ ๋ด์์ ๋ฐ์ํฉ๋๋ค.
- ๋ณต์กํ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ ์ด์ RPC ์๋ฒ์ RPC ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ๋ฐํ ํ์๊ฐ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ Kubernetes ๊ฐ๋ฐ์๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ํด ๊ตฌํํ์ต๋๋ค.
- gRPC ํ๋กํ ์ฝ์ ํตํด ์์
ํ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ช
๋ น์ค ์ธ์๋ฅผ ํตํด ์ ๋ฌํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํธ๋ฆฌํ๊ณ ์ ์ฐํ๋ฉฐ ์์ ์ ์
๋๋ค. ํ์คํ๋ gRPC ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ฌ CSI์ ๋ณผ๋ฅจ ์ฌ์ฉ๋ ์ธก์ ํญ๋ชฉ์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ค๋ฉด ๋ค์์ ์ฝ์ด๋ณด์ธ์.
์ฐ๋ฆฌ์ ํ ๋ฆฌํ์คํธ vsphere-csi ๋๋ผ์ด๋ฒ์ฉ. - ํต์ ์ IPC ์์ผ์ ํตํด ์ด๋ฃจ์ด์ง๋ฏ๋ก kubelet์ด ์ฌ๋ฐ๋ฅธ Pod์ ์์ฒญ์ ๋ณด๋๋์ง ํผ๋ํ์ง ์์ต๋๋ค.
์ด ๋ชฉ๋ก์ ์๊ฐ๋๋ ๊ฒ์ด ์๋์? CSI์ ์ฅ์ ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค, ์ด๋ Flexvolume ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํ ๋ ๊ณ ๋ ค๋์ง ์์์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ํ ํ์ค์ธ CSI๋ ์ปค๋ฎค๋ํฐ์์ ๋งค์ฐ ํธํ์ ๋ฐ์์ต๋๋ค. ๋ํ ์ฅ์ ๊ณผ ๋ค์์ฑ์ผ๋ก ์ธํด Ceph ๋๋ AWS EBS์ ๊ฐ์ ์คํ ๋ฆฌ์ง ์์คํ ์ฉ CSI ๋๋ผ์ด๋ฒ๋ ์์ฑ๋๋ฉฐ, Kubernetes์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ถ๊ฐ๋ ์์ ์ฉ ํ๋ฌ๊ทธ์ธ์ ๋๋ค.
2019๋
์ด, ํธ๋ฆฌ ๋ด ํ๋ฌ๊ทธ์ธ
์ฐ๋ฆฌ๋ ์ด๋ฏธ ceph-csi, vsphere-csi๋ฅผ ์ฌ์ฉํ ๊ฒฝํ์ด ์์ผ๋ฉฐ ์ด ๋ชฉ๋ก์ ์ถ๊ฐํ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค! ์ง๊ธ๊น์ง CSI๋ ํ ๋น๋ ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์ง๋ง ๊ธฐ๋ค๋ ค ๋ณด๊ฒ ์ต๋๋ค.
์๋ก์ด ๊ฒ์ ๋ชจ๋ ์ ์๊ฐํ ์ค๋๋ ๊ฒ์์ ์์ง ๋ง์ญ์์ค!
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
์ฐ๋ฆฌ๋ ์ปจํ ์ด๋ ์คํ ๋ฆฌ์ง ์ธํฐํ์ด์ค๋ฅผ ์ดํดํฉ๋๋ค(Kubernetes๋ฟ๋ง ์๋๋ผ) "; - ยซ
Rook์ด๋ ์๋๋-๊ทธ๊ฒ์ด ๋ฌธ์ ๋ก๋ค "; - ยซ
Kubernetes์ ๋ณผ๋ฅจ ์ค๋ ์ท ์ํ ๋ฒ์ ์๊ฐ ".
์ถ์ฒ : habr.com