የማጠራቀሚያ አቅም ክትትል የሚደረግባቸው የኢፌመር መጠኖች፡ EmptyDir በስቴሮይድ ላይ

የማጠራቀሚያ አቅም ክትትል የሚደረግባቸው የኢፌመር መጠኖች፡ EmptyDir በስቴሮይድ ላይ

አንዳንድ አፕሊኬሽኖች እንዲሁ ውሂብ ማከማቸት አለባቸው ፣ ግን እንደገና ከተጀመረ በኋላ ውሂቡ አይቀመጥም በሚለው እውነታ በጣም ተመችተዋል።

ለምሳሌ፣ መሸጎጫ አገልግሎቶች በ RAM የተገደቡ ናቸው፣ ነገር ግን ብዙ ጊዜ ጥቅም ላይ የማይውሉትን መረጃዎች ከ RAM ያነሰ ቀርፋፋ ወደ ማከማቻ ማንቀሳቀስ ይችላሉ፣ ይህም በአጠቃላይ አፈጻጸም ላይ አነስተኛ ነው። ሌሎች አፕሊኬሽኖች በፋይሎች ውስጥ አንዳንድ ተነባቢ-ብቻ ግብዓት ሊኖሩ እንደሚችሉ ማወቅ አለባቸው፣ ለምሳሌ መቼቶች ወይም ሚስጥራዊ ቁልፎች።

ኩበርኔትስ አስቀድሞ በርካታ ዓይነቶች አሉት የኢፌመር ጥራዞች, ነገር ግን ተግባራቸው በ K8s ውስጥ በተተገበረው ብቻ የተገደበ ነው.

ኢፍሜራል የሲኤስአይ መጠኖች ለቀላል ክብደት የአካባቢ ጥራዞች ድጋፍ ለመስጠት Kubernetes ከሲኤስአይ አሽከርካሪዎች ጋር እንዲራዘም ተፈቅዶለታል። በዚህ መንገድ መጠቀም ይቻላል የዘፈቀደ መዋቅሮች: መቼቶች፣ ሚስጥሮች፣ የመታወቂያ ውሂብ፣ ተለዋዋጮች እና የመሳሰሉት። መደበኛ ደረጃቸውን የጠበቁ አሽከርካሪዎች አይሰሩም ተብሎ ስለሚታሰብ የሲኤስአይ አሽከርካሪዎች ይህንን የኩበርኔትስ ባህሪን ለመደገፍ መስተካከል አለባቸው - ነገር ግን እንደዚህ ያሉ ጥራዞች ለፖድ በተመረጠው ማንኛውም መስቀለኛ መንገድ ላይ ሊጠቀሙበት ይችላሉ ተብሎ ይታሰባል።

ይህ ምናልባት ጉልህ የሆነ የአስተናጋጅ ሀብቶችን ለሚጠቀሙ መጠኖች ወይም በአንዳንድ አስተናጋጆች ላይ ብቻ ለሚገኝ ማከማቻ ችግር ሊሆን ይችላል። ለዚህም ነው ኩበርኔትስ 1.19 በፅንሰ-ሀሳብ ከ EmptyDir ጥራዞች ጋር ተመሳሳይ የሆኑ ሁለት አዳዲስ የአልፋ ሙከራ ጥራዝ ባህሪያትን ያስተዋወቀው፡-

  • አጠቃላይ ዓላማ የኢፌመር ጥራዞች;

  • የ CSI ማከማቻ አቅም መከታተያ።

የአዲሱ ዘዴ ጥቅሞች:

  • ማከማቻ አካባቢያዊ ወይም በአውታረ መረብ በኩል የተገናኘ ሊሆን ይችላል;

  • ጥራዞች በማመልከቻው ሊያልፍ የማይችል የተወሰነ መጠን ሊኖራቸው ይችላል;

  • ቋሚ መጠኖች አቅርቦትን ከሚደግፉ እና (የአቅም ክትትልን ለመደገፍ) ጥሪውን ተግባራዊ ከሚያደርጉ የሲኤስአይ አሽከርካሪዎች ጋር ይሰራል GetCapacity;

  • በሾፌሩ እና በቅንብሮች ላይ በመመስረት ጥራዞች የተወሰነ የመጀመሪያ ውሂብ ሊኖራቸው ይችላል ።

  • ሁሉም መደበኛ ስራዎች በድምጽ (ቅጽበተ-ፎቶ መፍጠር, መጠን መቀየር, ወዘተ) ይደገፋሉ;

  • ጥራዞች የሞጁሉን ወይም የድምጽ መግለጫዎችን ከሚቀበል ከማንኛውም የመተግበሪያ መቆጣጠሪያ ጋር መጠቀም ይቻላል;

  • የኩበርኔትስ መርሐግብር አዘጋጅ በራሱ ተስማሚ ኖዶችን ይመርጣል፣ ስለዚህ የመርሐግብር አውጪ ቅጥያዎችን ማቅረብ እና ማዋቀር ወይም የድር መንጠቆዎችን ማስተካከል አያስፈልግም።

የትግበራ አማራጮች

ስለዚህ አጠቃላይ ዓላማ የኢፌመር ጥራዞች ለሚከተሉት የአጠቃቀም ጉዳዮች ተስማሚ ናቸው፡

ለሜምካሼድ ራም ምትክ ቋሚ ማህደረ ትውስታ

የቅርብ ጊዜ የተለቀቁት memcached ተጨማሪ ድጋፍ የማያቋርጥ ማህደረ ትውስታን በመጠቀም (ኢንቴል ኦፕቴን ፣ ወዘተ.) በግምት ተርጓሚ) ከመደበኛ RAM ይልቅ. ሜምካሼድን በአፕሊኬሽን ተቆጣጣሪ በኩል ሲያሰማሩ፣ የተወሰነ መጠን ያለው መጠን ከPMEM ሲኤስአይ ሾፌርን በመጠቀም እንዲመደብ ለመጠየቅ አጠቃላይ ዓላማ ያላቸውን ኢፌመር ጥራዞች መጠቀም ይችላሉ። PMEM-CSI.

LVM አካባቢያዊ ማከማቻ እንደ የስራ ቦታ

ከ RAM በላይ ከሆነ ዳታ ጋር የሚሰሩ አፕሊኬሽኖች ከ Kubernetes መደበኛ የ EmptyDir ጥራዞች ሊሰጡ በማይችሉት የመጠን ወይም የአፈጻጸም መለኪያዎች የአካባቢ ማከማቻ ሊፈልጉ ይችላሉ። ለምሳሌ, ለዚህ ዓላማ ተብሎ ተጽፏል ቶፖኤልቪኤም.

ለውሂብ ጥራዞች ተነባቢ-ብቻ መዳረሻ

የድምፅ ክፍፍል በሚከተለው ጊዜ ሙሉ መጠን እንዲፈጠር ሊያደርግ ይችላል-

እነዚህ ጥራዞች በተነባቢ-ብቻ ሁነታ ሊሰቀሉ ይችላሉ።

ይህን ሥራ የሚያደርገው እንዴት ነው?

አጠቃላይ ዓላማ ኢፌመር ጥራዞች

የአጠቃላይ ዓላማ ጊዜያዊ ጥራዞች ቁልፍ ባህሪ አዲሱ የድምጽ ምንጭ ነው፣ EphemeralVolumeSource, የድምጽ መጠን ጥያቄን ለመፍጠር ሁሉንም መስኮች የያዘ (በታሪካዊ መልኩ ቀጣይነት ያለው የድምፅ ጥያቄ, PVC) ይባላል. አዲስ ተቆጣጣሪ በ kube-controller-manager እንዲህ ዓይነቱን የድምፅ ምንጭ የሚፈጥሩትን እንክብሎችን ይመለከታል, ከዚያም ለእነዚያ ጥጥሮች PVC ይፈጥራል. ለሲኤስአይ ሹፌር፣ ይህ ጥያቄ ከሌሎቹ ጋር ተመሳሳይ ነው፣ ስለዚህ እዚህ ምንም ልዩ ድጋፍ አያስፈልግም።

እንደነዚህ ያሉት የ PVC ዎች እስካሉ ድረስ በድምጽ መጠን ላይ እንደ ማንኛውም ሌሎች ጥያቄዎች ሊጠቀሙባቸው ይችላሉ. በተለይም ድምጽን ሲገለብጡ ወይም ከድምጽ ቅፅበታዊ ገጽ እይታ ሲፈጥሩ እንደ የውሂብ ምንጭ ሊጠቀሱ ይችላሉ. የ PVC እቃው የአሁኑን የድምፅ መጠን ይይዛል.

በራስ-ሰር የተፈጠሩ የ PVC ስሞች አስቀድሞ ተለይተዋል-የፖድ ስም እና የድምጽ ስም ጥምረት ፣ በሰረዝ ተለያይተዋል። አስቀድሞ የተገለጹ ስሞች ከ PVC ጋር መገናኘትን ቀላል ያደርጉታል ምክንያቱም የፖድ ስም እና የድምጽ ስም ካወቁ እሱን መፈለግ አያስፈልግዎትም። ጉዳቱ ስሙ ቀድሞውኑ በአገልግሎት ላይ ሊሆን ይችላል ፣ ይህም በኩበርኔትስ የተገኘ እና በዚህ ምክንያት ፖድ እንዳይጀምር ታግዷል።

ድምጹ ከፖድ ጋር አብሮ መሰረዙን ለማረጋገጥ ተቆጣጣሪው በባለቤቱ ስር ያለውን የድምፅ መጠን ጥያቄ ያቀርባል. ፖድው ሲሰረዝ መደበኛው የቆሻሻ ማጠራቀሚያ ዘዴ ይሠራል, ይህም ጥያቄውን እና ድምጹን ይሰርዛል.

ጥያቄዎች በማከማቻው ሾፌር በተለመደው የማከማቻ ክፍል ዘዴ ይዛመዳሉ። ምንም እንኳን ክፍሎች ወዲያውኑ እና ዘግይተው አስገዳጅ (aka WaitForFirstConsumer) የሚደገፉ ናቸው፣ ለጊዜያዊ ጥራዞች መጠቀም ተገቢ ነው። WaitForFirstConsumer, ከዚያም መርሐግብር አውጪው መስቀለኛ መንገድን በሚመርጡበት ጊዜ ሁለቱንም የመስቀለኛ መንገድ አጠቃቀም እና የማከማቻ መገኘትን ግምት ውስጥ ማስገባት ይችላል. አዲስ ባህሪ እዚህ ይታያል።

የማከማቻ አቅም መከታተያ

በተለምዶ የጊዜ ሰሌዳ አውጪው የሲኤስአይ ሹፌር ድምጹን የት እንደሚፈጥር ምንም እውቀት የለውም። እንዲሁም ይህን መረጃ ለመጠየቅ የጊዜ ሰሌዳው ሾፌሩን በቀጥታ የሚያነጋግርበት መንገድ የለም። ስለዚህ መርሐግብር አውጪው የትኛውን ጥራዞች ማግኘት እንደሚቻል (ዘግይቶ ማሰሪያ) እስኪያገኝ ድረስ ወይም የቦታውን ምርጫ ሙሉ በሙሉ ለአሽከርካሪው (ወዲያውኑ ማሰር) እስኪያገኝ ድረስ ይመርጣል።

አዲስ ኤ ፒ አይ CSIStorageCapacity, በአልፋ ደረጃ ላይ ያለው, አስፈላጊውን መረጃ በ etcd ውስጥ እንዲከማች ያስችለዋል ይህም ለ መርሐግብር አውጪው ይገኛል. ለአጠቃላይ ዓላማ ጊዜያዊ ጥራዞች ከሚሰጠው ድጋፍ በተለየ፣ ነጂውን ስታሰማሩ፣ የማከማቻ አቅም መከታተልን ማንቃት አለብህ፡ external-provisioner ከአሽከርካሪው የተቀበለውን የአቅም መረጃ በተለመደው መንገድ ማተም አለበት GetCapacity.

የጊዜ ሰሌዳ አስማሚው ዘግይቶ ማሰርን የሚጠቀም ያልተሰካ ድምጽ ላለው ፖድ መስቀለኛ መንገድ መምረጥ ከፈለገ እና አሽከርካሪው በተሰማራበት ጊዜ ባንዲራውን በማዘጋጀት ይህን ባህሪ ካነቃው CSIDriver.storageCapacity, ከዚያም በቂ የማከማቻ አቅም የሌላቸው አንጓዎች ወዲያውኑ ይጣላሉ. ይህ ለሁለቱም አጠቃላይ ዓላማ ጊዜያዊ እና ቀጣይነት ያለው ጥራዞች ይሰራል፣ ነገር ግን ለሲኤስአይ ኢፌመር ጥራዞች አይሰራም ምክንያቱም የእነሱ መለኪያዎች በኩበርኔትስ ሊነበቡ አይችሉም።

ልክ እንደተለመደው ፖድፖች ከመዘጋጀቱ በፊት ወዲያውኑ የተገናኙ ጥራዞች ይፈጠራሉ, እና ቦታቸው በማከማቻ ሾፌር ይመረጣል, ስለዚህ ሲያዋቅሩ external-provisioner በነባሪ፣ ይህ ውሂብ ለማንኛውም ጥቅም ላይ ስለማይውል ወዲያውኑ ማሰር ያላቸው የማከማቻ ክፍሎች ተዘለዋል።

የ kubernetes መርሐግብር አውጪው ጊዜው ያለፈበት ሊሆን ከሚችለው መረጃ ጋር ለመስራት ስለሚገደድ፣ መጠኑ በሚፈጠርበት ጊዜ በእያንዳንዱ ጉዳይ ላይ አቅም እንደሚገኝ ምንም ዋስትና የለም፣ ነገር ግን እንደገና ሳይሞከር የመፈጠር ዕድሉ እየጨመረ ነው።

ማሳሰቢያ የበለጠ ዝርዝር መረጃ ማግኘት ይችላሉ ፣ እንዲሁም በደህና “በድመቶች ላይ ይለማመዱ” ፣ እና ሙሉ በሙሉ ለመረዳት የማይቻል ሁኔታ ካለ ፣ በብቃት ኮርሶች ላይ ብቃት ያለው የቴክኒክ ድጋፍ ያግኙ - Kubernetes Base በሴፕቴምበር 28-30 እና ለበለጠ የላቀ ስፔሻሊስቶች ይካሄዳል Kubernetes ሜጋ ጥቅምት 14-16

ደህንነት

CSIS የማጠራቀሚያ አቅም

የሲኤስአይኤስ የማጠራቀሚያ አቅም ዕቃዎች በስም ቦታዎች ውስጥ ይኖራሉ፤ እያንዳንዱን የሲኤስአይ ሾፌር በራሱ የስም ቦታ ላይ ሲያወጣ፣ መረጃው ከየት እንደመጣ ግልጽ ስለሆነ የRBAC መብቶችን በCSISstorage አቅም መገደብ ይመከራል። ለማንኛውም ኩበርኔትስ ይህንን አይፈትሽም ፣ እና አሽከርካሪዎች ብዙውን ጊዜ የሚቀመጡት በተመሳሳይ የስም ቦታ ነው ፣ ስለሆነም ሾፌሮቹ እንዲሰሩ እና የተሳሳተ መረጃ እንዳያትሙ ይጠበቅባቸዋል (እና የእኔ ካርድ ያልተሳካለት እዚህ ነው ፣ በግምት በፂም ቀልድ ላይ የተመሰረተ ተርጓሚ)

አጠቃላይ ዓላማ ኢፌመር ጥራዞች

ተጠቃሚዎች ፖድ የመፍጠር መብት ካላቸው (በቀጥታም ሆነ በተዘዋዋሪ)፣ እንዲሁም በድምጽ ላይ ጥያቄ የመፍጠር መብት ባይኖራቸውም አጠቃላይ ዓላማ ያላቸውን ኢፌመር ጥራዞች መፍጠር ይችላሉ። ምክንያቱም የRBAC ፍቃድ ፍተሻዎች የሚተገበሩት PVC በሚፈጥረው መቆጣጠሪያ ላይ እንጂ ለተጠቃሚው አይደለም። ይህ ለመጨመር ዋናው ለውጥ ነው ወደ መለያዎያልታመኑ ተጠቃሚዎች ጥራዞችን የመፍጠር መብቶች በማይኖሩባቸው ስብስቦች ላይ ይህን ባህሪ ከማንቃትዎ በፊት።

ለምሳሌ:

የተለየ ቅርንጫፍ PMEM-CSI የኩበርኔትስ 1.19 ክላስተርን በQEMU ቨርቹዋል ማሽኖች ውስጥ ለማስኬድ ሁሉንም አስፈላጊ ለውጦችን በአልፋ ደረጃ ይዟል። የአሽከርካሪው ኮድ አልተለወጠም, ማሰማራቱ ብቻ ተቀይሯል.

ተስማሚ በሆነ ማሽን ላይ (ሊኑክስ, መደበኛ ተጠቃሚ መጠቀም ይችላል Docker, ተመልከት እዚህ ዝርዝሮች) እነዚህ ትዕዛዞች ክላስተር ያመጣሉ እና የPMEM-CSI ሾፌርን ይጭናሉ፡

git clone --branch=kubernetes-1-19-blog-post https://github.com/intel/pmem-csi.git
cd pmem-csi
export TEST_KUBERNETES_VERSION=1.19 TEST_FEATURE_GATES=CSIStorageCapacity=true,GenericEphemeralVolume=true TEST_PMEM_REGISTRY=intel
make start && echo && test/setup-deployment.sh

ሁሉም ነገር ከሰራ በኋላ ውጤቱ የአጠቃቀም መመሪያዎችን ይይዛል-

The test cluster is ready. Log in with [...]/pmem-csi/_work/pmem-govm/ssh.0, run
kubectl once logged in.  Alternatively, use kubectl directly with the
following env variable:
   KUBECONFIG=[...]/pmem-csi/_work/pmem-govm/kube.config

secret/pmem-csi-registry-secrets created
secret/pmem-csi-node-secrets created
serviceaccount/pmem-csi-controller created
...
To try out the pmem-csi driver ephemeral volumes:
   cat deploy/kubernetes-1.19/pmem-app-ephemeral.yaml |
   [...]/pmem-csi/_work/pmem-govm/ssh.0 kubectl create -f -

የCSIStorage አቅም ዕቃዎች በሰዎች እንዲነበቡ የታሰቡ አይደሉም፣ ስለዚህ አንዳንድ ሂደት ያስፈልጋል። የጎላንግ አብነት ማጣሪያዎች የማከማቻ ክፍሎችን ያሳያሉ፣ ይህ ምሳሌ ስሙን፣ ቶፖሎጂን እና አቅምን ያሳያል፡

$ kubectl get 
        -o go-template='{{range .items}}{{if eq .storageClassName "pmem-csi-sc-late-binding"}}{{.metadata.name}} {{.nodeTopology.matchLabels}} {{.capacity}}
{{end}}{{end}}' 
        csistoragecapacities
csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 30716Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

አንድ ነጠላ ነገር የሚከተለው ይዘት አለው፡-

$ kubectl describe csistoragecapacities/csisc-6cw8j
Name:         csisc-sqdnt
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  storage.k8s.io/v1alpha1
Capacity:     30716Mi
Kind:         CSIStorageCapacity
Metadata:
  Creation Timestamp:  2020-08-11T15:41:03Z
  Generate Name:       csisc-
  Managed Fields:
    ...
  Owner References:
    API Version:     apps/v1
    Controller:      true
    Kind:            StatefulSet
    Name:            pmem-csi-controller
    UID:             590237f9-1eb4-4208-b37b-5f7eab4597d1
  Resource Version:  2994
  Self Link:         /apis/storage.k8s.io/v1alpha1/namespaces/default/csistoragecapacities/csisc-sqdnt
  UID:               da36215b-3b9d-404a-a4c7-3f1c3502ab13
Node Topology:
  Match Labels:
    pmem-csi.intel.com/node:  pmem-csi-pmem-govm-worker1
Storage Class Name:           pmem-csi-sc-late-binding
Events:                       <none>

የአንድ አጠቃላይ ዓላማ ጊዜያዊ መጠን ያለው የማሳያ መተግበሪያ ለመፍጠር እንሞክር። ይዘቶችን ፋይል ያድርጉ pmem-app-ephemeral.yaml:

# This example Pod definition demonstrates
# how to use generic ephemeral inline volumes
# with a PMEM-CSI storage class.
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline-volume
spec:
  containers:
    - name: my-frontend
      image: intel/pmem-csi-driver-test:v0.7.14
      command: [ "sleep", "100000" ]
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-volume
  volumes:
  - name: my-csi-volume
    ephemeral:
      volumeClaimTemplate:
        spec:
          accessModes:
          - ReadWriteOnce
          resources:
            requests:
              storage: 4Gi
          storageClassName: pmem-csi-sc-late-binding

ከላይ ባሉት መመሪያዎች ላይ እንደሚታየው ከፈጠርን በኋላ ፣ አሁን ተጨማሪ ፖድ እና PVC አለን።

$ kubectl get pods/my-csi-app-inline-volume -o wide
NAME                       READY   STATUS    RESTARTS   AGE     IP          NODE                         NOMINATED NODE   READINESS GATES
my-csi-app-inline-volume   1/1     Running   0          6m58s   10.36.0.2   pmem-csi-pmem-govm-worker1   <none>           <none>
$ kubectl get pvc/my-csi-app-inline-volume-my-csi-volume
NAME                                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
my-csi-app-inline-volume-my-csi-volume   Bound    pvc-c11eb7ab-a4fa-46fe-b515-b366be908823   4Gi        RWO            pmem-csi-sc-late-binding   9m21s

የ PVC ባለቤት - በ:

$ kubectl get -o yaml pvc/my-csi-app-inline-volume-my-csi-volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: pmem-csi.intel.com
    volume.kubernetes.io/selected-node: pmem-csi-pmem-govm-worker1
  creationTimestamp: "2020-08-11T15:44:57Z"
  finalizers:
  - kubernetes.io/pvc-protection
  managedFields:
    ...
  name: my-csi-app-inline-volume-my-csi-volume
  namespace: default
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: true
    controller: true
    kind: Pod
    name: my-csi-app-inline-volume
    uid: 75c925bf-ca8e-441a-ac67-f190b7a2265f
...

የሚጠበቀው የዘመነ መረጃ ለ pmem-csi-pmem-govm-worker1:

csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 26620Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

ሌላ መተግበሪያ ከ26620ሚ በላይ የሚያስፈልገው ከሆነ፣ መርሐግብር አውጪው ግምት ውስጥ አያስገባም። pmem-csi-pmem-govm-worker1 በማንኛውም ሁኔታ.

ቀጥሎ ምንድነው?

ሁለቱም ባህሪያት አሁንም በመገንባት ላይ ናቸው. በአልፋ ሙከራ ወቅት በርካታ መተግበሪያዎች ተከፍተዋል። የማሻሻያ ፕሮፖዛል አገናኞች ወደ ቅድመ-ይሁንታ ደረጃ ለመሸጋገር መሠራት ያለበትን ሥራ፣ እንዲሁም የትኞቹ አማራጮች ቀደም ብለው ግምት ውስጥ ገብተው ውድቅ እንደተደረገባቸው ይዘረዝራል።

ምንጭ: hab.com

አስተያየት ያክሉ