ለ Kubernetes ማከማቻ የድምጽ መጠን ተሰኪዎች፡ ከFlexvolume እስከ CSI

ለ Kubernetes ማከማቻ የድምጽ መጠን ተሰኪዎች፡ ከFlexvolume እስከ CSI

ወደ ኋላ Kubernetes አሁንም v1.0.0 ሳለ, የድምጽ መጠን ተሰኪዎች ነበሩ. ቋሚ (ቋሚ) የመያዣ መረጃን ለማከማቸት ስርዓቶችን ከ Kubernetes ጋር ለማገናኘት ያስፈልጋቸው ነበር። ቁጥራቸው ትንሽ ነበር, እና ከመጀመሪያዎቹ መካከል እንደ GCE PD, Ceph, AWS EBS እና ሌሎች የመሳሰሉ የማከማቻ አቅራቢዎች ነበሩ.

ተሰኪዎቹ ከኩበርኔትስ ጋር ተደርገዋል፣ ለዚህም ነው ስማቸውን ያገኙት - በዛፍ ውስጥ። ነገር ግን፣ ለብዙዎች፣ የነባር ተሰኪዎች ስብስብ በቂ ያልሆነ ሆኖ ተገኝቷል። የእጅ ባለሞያዎች ፔቸቶችን በመጠቀም ወደ ኩበርኔትስ ኮር ቀለል ያሉ ተሰኪዎችን ጨምረዉ ከዚያ በኋላ የራሳቸውን ኩበርኔትስ ሰብስበው በአገልጋዮቻቸው ላይ ጫኑት። ግን ከጊዜ በኋላ የኩበርኔትስ ገንቢዎች ይህንን ተገነዘቡ ዓሳ ችግሩ ሊፈታ አይችልም. ሰዎች ያስፈልጋቸዋል የዓሣ ማስገር ዘንግ. እና በ Kubernetes v1.2.0 መለቀቅ ላይ ታየ ...

Flexvolume plugin፡ ትንሹ የዓሣ ማጥመጃ ዘንግ

የኩበርኔትስ ገንቢዎች የFlexVolume ፕለጊን ፈጥረዋል፣ ይህም በሶስተኛ ወገን ገንቢዎች ከተተገበሩ Flexvolume ነጂዎች ጋር አብሮ ለመስራት የተለዋዋጮች እና ዘዴዎች አመክንዮአዊ ማዕቀፍ ነበር።

እስቲ ቆም ብለን የFlexVolume ሾፌር ምን እንደሆነ ጠለቅ ብለን እንመርምር። ይህ የተወሰነ ነው። ሊተገበር የሚችል ፋይል (ሁለትዮሽ ፋይል፣ ፓይዘን ስክሪፕት፣ ባሽ ስክሪፕት፣ ወዘተ)፣ እሱም ሲተገበር የትእዛዝ መስመር ነጋሪ እሴቶችን እንደ ግብአት ወስዶ በJSON ቅርጸት ቀድሞ የታወቁ መስኮች የያዘ መልእክት ይመልሳል። በስምምነት ፣ የመጀመሪያው የትዕዛዝ መስመር ክርክር ሁል ጊዜ ዘዴ ነው ፣ እና ቀሪዎቹ ግቤቶች የእሱ መለኪያዎች ናቸው።

ለ Kubernetes ማከማቻ የድምጽ መጠን ተሰኪዎች፡ ከFlexvolume እስከ CSI
በ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

የቅጂው አሠራር መዘንጋት የለበትም አቶሚክ አይደለም።. ኩብሌቱ የማቅረብ ሂደቱ ከመጠናቀቁ በፊት ሾፌሩን መጠቀም እንዲጀምር ከፍተኛ እድል አለ, ይህም ስርዓቱ እንዲበላሽ ያደርጋል. ትክክለኛው አቀራረብ በመጀመሪያ የነጂውን ፋይሎች በተለየ ስም መቅዳት እና ከዚያም የአቶሚክ ዳግም መሰየም ስራን መጠቀም ነው።

ለ Kubernetes ማከማቻ የድምጽ መጠን ተሰኪዎች፡ ከFlexvolume እስከ CSI
በሮክ ኦፕሬተር ውስጥ ከሴፍ ጋር የመሥራት ንድፍ፡ በሥዕሉ ላይ ያለው የFlexvolume ሾፌር በሮክ ወኪል ውስጥ ይገኛል።

የFlexvolume ነጂዎችን ሲጠቀሙ የሚቀጥለው ችግር ለአብዛኛው በክላስተር መስቀለኛ መንገድ ማከማቻ ነው። ለዚህ አስፈላጊው ሶፍትዌር መጫን አለበት (ለምሳሌ የሴፍ-የጋራ ጥቅል ለሴፍ)። መጀመሪያ ላይ የ Flexvolume ፕለጊን እንደዚህ ያሉ ውስብስብ ስርዓቶችን ለመተግበር አልተነደፈም.

ለዚህ ችግር የመጀመሪያ መፍትሄ በሮክ ኦፕሬተር የFlexvolume አሽከርካሪ አተገባበር ላይ ይታያል፡

አሽከርካሪው ራሱ እንደ RPC ደንበኛ ነው የተቀየሰው። ለግንኙነት የአይፒሲ ሶኬት ከአሽከርካሪው ጋር በተመሳሳይ ማውጫ ውስጥ ይገኛል። የአሽከርካሪ ፋይሎችን ለመቅዳት DaemonSet ን መጠቀም ጥሩ እንደሚሆን እናስታውሳለን, ይህም ማውጫውን ከአሽከርካሪው ጋር እንደ ጥራዝ ያገናኛል. አስፈላጊ የሆኑትን የሮክ ሾፌር ፋይሎችን ከገለበጡ በኋላ ይህ ፖድ አይሞትም, ነገር ግን ከአይፒሲ ሶኬት ጋር በተያያዙት የድምጽ መጠን እንደ ሙሉ የ RPC አገልጋይ ይገናኛል. የሴፍ-የጋራ ጥቅል አስቀድሞ በፖድ ዕቃው ውስጥ ተጭኗል። የአይፒሲ ሶኬት ኩቤሌቱ በተመሳሳይ መስቀለኛ መንገድ ላይ ካለው ፖድ ጋር በትክክል መገናኘቱን ያረጋግጣል። ሁሉም ብልህነት ቀላል ነው! ..

ደህና ሁኑ፣ የእኛ ተወዳጅ... በዛፍ ውስጥ ተሰኪዎች!

የኩበርኔትስ ገንቢዎች በዋናው ውስጥ ለማከማቻ የተሰኪዎች ብዛት ሃያ መሆኑን ደርሰውበታል። እና በእያንዳንዳቸው ላይ ለውጥ, አንድ መንገድ ወይም ሌላ, ሙሉውን የኩበርኔትስ መልቀቂያ ዑደት ውስጥ ያልፋል.

አዲሱን የማከማቻ ተሰኪውን ለመጠቀም ፣ መላውን ስብስብ ማዘመን ያስፈልግዎታል. ከዚህ በተጨማሪ አዲሱ የኩበርኔትስ ስሪት ከምትጠቀመው ሊኑክስ ከርነል ጋር የማይጣጣም መሆኑ ሊያስገርምህ ይችላል።...ስለዚህ እንባህን ጠርገህ ጥርሶችህን እያፋጨህ ከአስተዳደርህ እና ከተጠቃሚዎችህ ጋር ጊዜህን አስተባብረህ የሊኑክስ ከርነል እና የኩበርኔትስ ክላስተር አዘምን። በአገልግሎቶች አቅርቦት ውስጥ ሊኖር ከሚችለው የእረፍት ጊዜ ጋር።

ሁኔታው ከአስቂኝ በላይ ነው, አይመስልዎትም? አካሄዱ ውጤታማ እንዳልሆነ ለመላው ህብረተሰብ ግልጽ ሆነ። ሆን ተብሎ ውሳኔ፣ የኩበርኔትስ ገንቢዎች ከማከማቻ ጋር የሚሰሩ አዳዲስ ተሰኪዎች ከአሁን በኋላ ወደ ከርነል እንደማይቀበሉ ያስታውቃሉ። በተጨማሪም፣ ቀደም ብለን እንደምናውቀው፣ በFlexvolume ፕለጊን ትግበራ ላይ በርካታ ድክመቶች ተለይተዋል...

በKubernetes, CSI ውስጥ ያለው የቅርብ ጊዜ የተጨመረው ፕለጊን ጉዳዩን በተከታታይ የውሂብ ማከማቻ ለአንዴና ለመጨረሻ ጊዜ እንዲዘጋው ተጠርቶ ነበር። የአልፋ ሥሪት፣ ከዛፍ ውጪ CSI ጥራዝ ፕለጊኖች በመባል የሚታወቀው፣ በተለቀቀው ኩበሬቶች 1.9.

የመያዣ ማከማቻ በይነገጽ፣ ወይም CSI 3000 የሚሽከረከር ዘንግ!

በመጀመሪያ ደረጃ, CSI የድምጽ ፕለጊን ብቻ ሳይሆን እውነተኛ መሆኑን ማስተዋል እፈልጋለሁ ደረጃ። ከመረጃ መጋዘኖች ጋር ለመስራት ብጁ ክፍሎችን በመፍጠር ላይ. እንደ ኩበርኔትስ እና ሜሶስ ያሉ የኮንቴይነር ኦርኬስትራ ስርዓቶች በዚህ መስፈርት መሰረት ከተተገበሩ አካላት ጋር እንዴት መስራት እንደሚችሉ "መማር" ነበረባቸው። እና አሁን ኩበርኔትስ ተምሬአለሁ።

በ Kubernetes ውስጥ የCSI ተሰኪው መዋቅር ምንድነው? የ CSI ፕለጊን ከልዩ ሾፌሮች ጋር ይሰራል (የሲኤስአይ አሽከርካሪዎች) በሶስተኛ ወገን ገንቢዎች የተፃፈ። በኩበርኔትስ ውስጥ ያለ የሲኤስአይ ሹፌር በትንሹ ሁለት አካላትን (ፖድስ) መያዝ አለበት፡-

  • መቆጣጠሪያ - ውጫዊ ቋሚ ማከማቻዎችን ያስተዳድራል. እሱ እንደ gRPC አገልጋይ ነው የሚተገበረው፣ ለዚህም ጥንታዊው ጥቅም ላይ ይውላል StatefulSet.
  • አንጓ - ቋሚ ማከማቻን ወደ ክላስተር ኖዶች የመትከል ሃላፊነት አለበት። እሱ እንደ gRPC አገልጋይም ይተገበራል፣ ነገር ግን ፕሪሚቲቭ ለእሱ ጥቅም ላይ ይውላል DaemonSet.

ለ Kubernetes ማከማቻ የድምጽ መጠን ተሰኪዎች፡ ከFlexvolume እስከ CSI
የ CSI ተሰኪ በኩበርኔትስ ውስጥ እንዴት እንደሚሰራ

ስለ CSI ሥራ ሌሎች ዝርዝሮች ለምሳሌ ከጽሑፉ መማር ትችላለህየሲ.ኤስ.አይ.አይ.», የትርጉም ሥራ ከአመት በፊት አሳትመናል።

የእንደዚህ አይነት አተገባበር ጥቅሞች

  • እንደ መስቀለኛ መንገድ ሹፌር መመዝገብ ላሉ መሰረታዊ ነገሮች የኩበርኔትስ ገንቢዎች የእቃ መያዣ ስብስብን ተግባራዊ አድርገዋል። ለFlexvolume ፕለጊን እንደተደረገው ከአሁን በኋላ ከችሎታዎች ጋር የJSON ምላሽ ማመንጨት አያስፈልግዎትም።
  • ሊተገበሩ የሚችሉ ፋይሎችን በመስቀለኛ መንገድ ላይ "ከማንሸራተት" ይልቅ፣ አሁን ፖድዎችን ወደ ክላስተር እንሰቅላለን። ከኩበርኔትስ መጀመሪያ የምንጠብቀው ይህ ነው፡ ሁሉም ሂደቶች የሚከሰቱት Kubernetes primitivesን በመጠቀም በተዘረጋው ኮንቴይነሮች ውስጥ ነው።
  • ውስብስብ ነጂዎችን ለመተግበር ከአሁን በኋላ የ RPC አገልጋይ እና RPC ደንበኛን ማዳበር አያስፈልግዎትም። ደንበኛው በኩበርኔትስ ገንቢዎች ለእኛ ተተግብሯል.
  • በ gRPC ፕሮቶኮል ላይ ለመስራት ክርክሮችን ማለፍ በትእዛዝ መሾመር ነጋሪ እሴቶች ከማለፍ የበለጠ ምቹ ፣ተለዋዋጭ እና አስተማማኝ ነው። ደረጃውን የጠበቀ የጂአርፒሲ ዘዴን በማከል ለድምጽ አጠቃቀም መለኪያዎች ድጋፍን ወደ CSI እንዴት ማከል እንደሚቻል ለመረዳት የሚከተለውን ማንበብ ይችላሉ፡- የእኛ የመሳብ ጥያቄ ለ vsphere-csi ሾፌር.
  • ኮሙኒኬሽን በአይፒሲ ሶኬቶች በኩል ይከሰታል፣ ስለዚህ ኩቤሌቱ ጥያቄውን ወደ ትክክለኛው ፖድ ልኮ እንደሆነ ግራ እንዳይጋቡ።

ይህ ዝርዝር የሆነ ነገር ያስታውሰዎታል? የ CSI ጥቅሞች ናቸው ተመሳሳይ ችግሮችን መፍታትየ Flexvolume ፕለጊን ሲፈጥሩ ግምት ውስጥ ያልገቡ.

ግኝቶች

CSI ከመረጃ መጋዘኖች ጋር መስተጋብር ለመፍጠር ብጁ ፕለጊኖችን ለመተግበር እንደ መስፈርት በማህበረሰቡ ዘንድ ሞቅ ያለ አቀባበል ተደርጎለታል። በተጨማሪም፣ በጥቅማቸው እና ሁለገብነታቸው፣ የሲኤስአይ አሽከርካሪዎች እንደ Ceph ወይም AWS EBS ላሉ የማከማቻ ስርዓቶች የተፈጠሩት ተሰኪዎች በመጀመርያው የኩበርኔትስ እትም ላይ ተጨምረዋል።

በ2019 መጀመሪያ ላይ፣ በዛፍ ውስጥ ተሰኪዎች ጊዜ ያለፈባቸው ናቸው ተብሏል።. የFlexvolume ፕለጊን መደገፉን ለመቀጠል አቅደናል፣ ነገር ግን ለእሱ አዲስ ተግባር አናዳብርም።

እኛ እራሳችን ቀደም ሲል ceph-csi, vsphere-csi የመጠቀም ልምድ አለን እናም ወደዚህ ዝርዝር ለመጨመር ዝግጁ ነን! እስካሁን፣ ሲኤስአይ የተመደበለትን ተግባር በብንግ ይቋቋማል፣ ግን እንጠብቃለን እናያለን።

አዲስ ነገር ሁሉ የድሮውን እንደገና ማሰብ መሆኑን አትዘንጉ!

PS

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ