አንዳንድ አፕሊኬሽኖች እንዲሁ ውሂብ ማከማቸት አለባቸው ፣ ግን እንደገና ከተጀመረ በኋላ ውሂቡ አይቀመጥም በሚለው እውነታ በጣም ተመችተዋል።
ለምሳሌ፣ መሸጎጫ አገልግሎቶች በ RAM የተገደቡ ናቸው፣ ነገር ግን ብዙ ጊዜ ጥቅም ላይ የማይውሉትን መረጃዎች ከ RAM ያነሰ ቀርፋፋ ወደ ማከማቻ ማንቀሳቀስ ይችላሉ፣ ይህም በአጠቃላይ አፈጻጸም ላይ አነስተኛ ነው። ሌሎች አፕሊኬሽኖች በፋይሎች ውስጥ አንዳንድ ተነባቢ-ብቻ ግብዓት ሊኖሩ እንደሚችሉ ማወቅ አለባቸው፣ ለምሳሌ መቼቶች ወይም ሚስጥራዊ ቁልፎች።
ኩበርኔትስ አስቀድሞ በርካታ ዓይነቶች አሉት
ኢፍሜራል
ይህ ምናልባት ጉልህ የሆነ የአስተናጋጅ ሀብቶችን ለሚጠቀሙ መጠኖች ወይም በአንዳንድ አስተናጋጆች ላይ ብቻ ለሚገኝ ማከማቻ ችግር ሊሆን ይችላል። ለዚህም ነው ኩበርኔትስ 1.19 በፅንሰ-ሀሳብ ከ EmptyDir ጥራዞች ጋር ተመሳሳይ የሆኑ ሁለት አዳዲስ የአልፋ ሙከራ ጥራዝ ባህሪያትን ያስተዋወቀው፡-
-
አጠቃላይ ዓላማ የኢፌመር ጥራዞች;
-
የ CSI ማከማቻ አቅም መከታተያ።
የአዲሱ ዘዴ ጥቅሞች:
-
ማከማቻ አካባቢያዊ ወይም በአውታረ መረብ በኩል የተገናኘ ሊሆን ይችላል;
-
ጥራዞች በማመልከቻው ሊያልፍ የማይችል የተወሰነ መጠን ሊኖራቸው ይችላል;
-
ቋሚ መጠኖች አቅርቦትን ከሚደግፉ እና (የአቅም ክትትልን ለመደገፍ) ጥሪውን ተግባራዊ ከሚያደርጉ የሲኤስአይ አሽከርካሪዎች ጋር ይሰራል
GetCapacity
; -
በሾፌሩ እና በቅንብሮች ላይ በመመስረት ጥራዞች የተወሰነ የመጀመሪያ ውሂብ ሊኖራቸው ይችላል ።
-
ሁሉም መደበኛ ስራዎች በድምጽ (ቅጽበተ-ፎቶ መፍጠር, መጠን መቀየር, ወዘተ) ይደገፋሉ;
-
ጥራዞች የሞጁሉን ወይም የድምጽ መግለጫዎችን ከሚቀበል ከማንኛውም የመተግበሪያ መቆጣጠሪያ ጋር መጠቀም ይቻላል;
-
የኩበርኔትስ መርሐግብር አዘጋጅ በራሱ ተስማሚ ኖዶችን ይመርጣል፣ ስለዚህ የመርሐግብር አውጪ ቅጥያዎችን ማቅረብ እና ማዋቀር ወይም የድር መንጠቆዎችን ማስተካከል አያስፈልግም።
የትግበራ አማራጮች
ስለዚህ አጠቃላይ ዓላማ የኢፌመር ጥራዞች ለሚከተሉት የአጠቃቀም ጉዳዮች ተስማሚ ናቸው፡
ለሜምካሼድ ራም ምትክ ቋሚ ማህደረ ትውስታ
የቅርብ ጊዜ የተለቀቁት memcached
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 መርሐግብር አውጪው ጊዜው ያለፈበት ሊሆን ከሚችለው መረጃ ጋር ለመስራት ስለሚገደድ፣ መጠኑ በሚፈጠርበት ጊዜ በእያንዳንዱ ጉዳይ ላይ አቅም እንደሚገኝ ምንም ዋስትና የለም፣ ነገር ግን እንደገና ሳይሞከር የመፈጠር ዕድሉ እየጨመረ ነው።
ማሳሰቢያ የበለጠ ዝርዝር መረጃ ማግኘት ይችላሉ ፣ እንዲሁም በደህና “በድመቶች ላይ ይለማመዱ” ፣ እና ሙሉ በሙሉ ለመረዳት የማይቻል ሁኔታ ካለ ፣ በብቃት ኮርሶች ላይ ብቃት ያለው የቴክኒክ ድጋፍ ያግኙ -
ደህንነት
CSIS የማጠራቀሚያ አቅም
የሲኤስአይኤስ የማጠራቀሚያ አቅም ዕቃዎች በስም ቦታዎች ውስጥ ይኖራሉ፤ እያንዳንዱን የሲኤስአይ ሾፌር በራሱ የስም ቦታ ላይ ሲያወጣ፣ መረጃው ከየት እንደመጣ ግልጽ ስለሆነ የRBAC መብቶችን በCSISstorage አቅም መገደብ ይመከራል። ለማንኛውም ኩበርኔትስ ይህንን አይፈትሽም ፣ እና አሽከርካሪዎች ብዙውን ጊዜ የሚቀመጡት በተመሳሳይ የስም ቦታ ነው ፣ ስለሆነም ሾፌሮቹ እንዲሰሩ እና የተሳሳተ መረጃ እንዳያትሙ ይጠበቅባቸዋል (እና የእኔ ካርድ ያልተሳካለት እዚህ ነው ፣ በግምት በፂም ቀልድ ላይ የተመሰረተ ተርጓሚ)
አጠቃላይ ዓላማ ኢፌመር ጥራዞች
ተጠቃሚዎች ፖድ የመፍጠር መብት ካላቸው (በቀጥታም ሆነ በተዘዋዋሪ)፣ እንዲሁም በድምጽ ላይ ጥያቄ የመፍጠር መብት ባይኖራቸውም አጠቃላይ ዓላማ ያላቸውን ኢፌመር ጥራዞች መፍጠር ይችላሉ። ምክንያቱም የRBAC ፍቃድ ፍተሻዎች የሚተገበሩት PVC በሚፈጥረው መቆጣጠሪያ ላይ እንጂ ለተጠቃሚው አይደለም። ይህ ለመጨመር ዋናው ለውጥ ነው
ለምሳሌ:
የተለየ
ተስማሚ በሆነ ማሽን ላይ (ሊኑክስ, መደበኛ ተጠቃሚ መጠቀም ይችላል
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