සමහර යෙදුම් වලට දත්ත ගබඩා කිරීමටද අවශ්ය වේ, නමුත් නැවත ආරම්භ කිරීමෙන් පසු දත්ත සුරැකෙන්නේ නැති නිසා ඒවා ඉතා පහසු වේ.
උදාහරණයක් ලෙස, හැඹිලි සේවා RAM මගින් සීමා කර ඇත, නමුත් RAM වලට වඩා මන්දගාමී වන ගබඩා කිරීමට කලාතුරකින් භාවිතා වන දත්ත ගෙනයාමටද හැකිය, සමස්ත කාර්ය සාධනයට සුළු බලපෑමක් ඇති කරයි. සැකසීම් හෝ රහස් යතුරු වැනි ලිපිගොනු තුළ කියවීමට-පමණි ආදානයක් තිබිය හැකි බව වෙනත් යෙදුම් දැන සිටිය යුතුය.
Kubernetes දැනටමත් වර්ග කිහිපයක් තිබේ
එෆීමර්
සැලකිය යුතු ධාරක සම්පත් පරිභෝජනය කරන වෙළුම් සඳහා හෝ සමහර ධාරකවල පමණක් පවතින ගබඩා සඳහා මෙය ගැටළුවක් විය හැක. Kubernetes 1.19 EmptyDir වෙළුම්වලට සංකල්පමය වශයෙන් සමාන වන නව ඇල්ෆා පරීක්ෂණ පරිමාව විශේෂාංග දෙකක් හඳුන්වා දෙන්නේ එබැවිනි:
-
පොදු කාර්ය කාලීන වෙළුම්;
-
CSI ගබඩා ධාරිතාව ලුහුබැඳීම.
නව ප්රවේශයේ වාසි:
-
ගබඩා කිරීම දේශීය හෝ ජාලයක් හරහා සම්බන්ධ විය හැක;
-
වෙළුම් යෙදුමෙන් ඉක්මවිය නොහැකි නිශ්චිත ප්රමාණයක් තිබිය හැක;
-
ස්ථීර වෙළුම් සැපයීමට සහය වන සහ (ධාරිතා ලුහුබැඳීමට සහාය වීම සඳහා) ඇමතුම ක්රියාත්මක කරන ඕනෑම CSI ධාවකයක් සමඟ ක්රියා කරයි
GetCapacity
; -
ධාවක සහ සැකසුම් මත පදනම්ව වෙළුම් වල ආරම්භක දත්ත තිබිය හැක;
-
පරිමාවක් සහිත සියලුම සම්මත මෙහෙයුම් සඳහා (ස්නැප්ෂොට් සෑදීම, ප්රමාණය වෙනස් කිරීම, ආදිය) සහය දක්වයි;
-
මොඩියුලයක් හෝ වෙළුම් පිරිවිතරයක් පිළිගන්නා ඕනෑම යෙදුම් පාලකයක් සමඟ වෙළුම් භාවිතා කළ හැක;
-
Kubernetes උපලේඛකයා විසින්ම සුදුසු නෝඩ් තෝරා ගනී, එබැවින් උපලේඛන දිගු සැපයීමට සහ වින්යාස කිරීමට හෝ webhooks වෙනස් කිරීමට තවදුරටත් අවශ්ය නොවේ.
යෙදුම් විකල්ප
එබැවින්, සාමාන්ය කාර්ය කාලීන පරිමා පහත භාවිත අවස්ථා සඳහා සුදුසු වේ:
memcached සඳහා RAM සඳහා ආදේශකයක් ලෙස ස්ථිර මතකය
memcached හි නවතම නිකුතු
වැඩබිමක් ලෙස LVM දේශීය ගබඩාව
RAM ට වඩා විශාල දත්ත සමඟ ක්රියා කරන යෙදුම් සඳහා Kubernetes වෙතින් සාමාන්ය EmptyDir වෙළුම් ලබා දිය නොහැකි ප්රමාණය හෝ කාර්ය සාධන ප්රමිතික සමඟ දේශීය ආචයනය අවශ්ය විය හැකිය. උදාහරණයක් ලෙස, මෙම කාර්යය සඳහා එය ලියා ඇත
දත්ත පරිමාවන් සඳහා කියවීමට පමණක් ප්රවේශය
පරිමාවක් වෙන් කිරීම සම්පූර්ණ පරිමාවක් නිර්මාණය වීමට හේතු විය හැක්කේ:
-
ප්රතිෂ්ඨාපනය
පරිමාව ස්නැප්ෂොට් ; -
නිර්මාණය
වෙළුම් පිටපත් ; -
වැඩ
දත්ත ස්ථාන දරණ .
මෙම වෙළුම් කියවීමට-පමණි ආකාරයෙන් සවි කළ හැක.
කොහොමද මේ වැඩ කරන්නේ
සාමාන්ය අරමුණු තාවකාලික වෙළුම්
සාමාන්ය කාර්ය කාලීන වෙළුම්වල ප්රධාන ලක්ෂණය වන්නේ නව වෙළුම් ප්රභවයයි, EphemeralVolumeSource
, වෙළුම් ඉල්ලීමක් සෑදීම සඳහා සියලුම ක්ෂේත්ර අඩංගු වේ (ඓතිහාසිකව ස්ථීර වෙළුම් ඉල්ලීමක් ලෙස හැඳින්වේ, PVC). නව පාලකය ඇත kube-controller-manager
එවැනි පරිමාව ප්රභවයක් නිර්මාණය කරන කරල් දෙස බලා, එම කරල් සඳහා PVC නිර්මාණය කරයි. CSI ධාවකය සඳහා, මෙම ඉල්ලීම අනෙක් ඒවාට සමාන බව පෙනේ, එබැවින් මෙහි විශේෂ සහාය අවශ්ය නොවේ.
එවැනි PVC පවතින තාක් කල්, ඒවා පරිමාවේ වෙනත් ඉල්ලීම් මෙන් භාවිතා කළ හැක. විශේෂයෙන්ම, වෙළුමක් පිටපත් කිරීමේදී හෝ පරිමාවකින් ස්නැප්ෂොට් නිර්මාණය කිරීමේදී ඒවා දත්ත මූලාශ්රයක් ලෙස සඳහන් කළ හැක. PVC වස්තුවේ පරිමාවේ වත්මන් තත්ත්වය ද අඩංගු වේ.
ස්වයංක්රීයව සාදන ලද PVC වල නම් පූර්ව නිර්වචනය කර ඇත: ඒවා යටි ඉරකින් වෙන් කරන ලද පොඩ් නම සහ පරිමාවේ නමේ එකතුවකි. පෙර නිර්වචනය කළ නම් PVC සමඟ අන්තර් ක්රියා කිරීම පහසු කරයි, මන්ද ඔබ පොඩ් නම සහ පරිමාවේ නම දන්නේ නම් ඔබට එය සෙවීමට අවශ්ය නොවේ. අවාසිය නම්, නම දැනටමත් භාවිතයේ තිබිය හැකි අතර, එය Kubernetes විසින් හඳුනාගෙන ඇති අතර එහි ප්රතිඵලයක් වශයෙන් පොඩ් ආරම්භය අවහිර වී ඇත.
පොඩ් එක සමඟ පරිමාව මකාදැමීම සහතික කිරීම සඳහා, පාලකය හිමිකරු යටතේ ඇති පරිමාවට ඉල්ලීමක් කරයි. පොඩ් එක මකා දැමූ විට, සම්මත කුණු එකතු කිරීමේ යාන්ත්රණය ක්රියා කරයි, එමඟින් ඉල්ලීම සහ පරිමාව යන දෙකම මකා දමයි.
ගබඩා පන්තියේ සාමාන්ය යාන්ත්රණය හරහා ගබඩා ධාවකය විසින් ඉල්ලීම් ගැලපේ. ක්ෂණික හා ප්රමාද බන්ධන සහිත පන්ති වුවද (aka WaitForFirstConsumer
) සහය දක්වයි, තාවකාලික වෙළුම් සඳහා එය භාවිතා කිරීම අර්ථවත් කරයි WaitForFirstConsumer
, එවිට උපලේඛකයාට නෝඩයක් තෝරාගැනීමේදී නෝඩ් භාවිතය සහ ගබඩා ලබා ගැනීමේ හැකියාව යන දෙකම සලකා බැලිය හැක. මෙහි නව විශේෂාංගයක් දිස්වේ.
ගබඩා ධාරිතාව ලුහුබැඳීම
සාමාන්යයෙන් CSI ධාවක පරිමාව නිර්මාණය කරන්නේ කොතැනද යන්න පිළිබඳව උපලේඛකයාට දැනුමක් නැත. මෙම තොරතුරු ඉල්ලා සිටීම සඳහා උපලේඛනකරුට සෘජුවම රියදුරු සම්බන්ධ කර ගැනීමට ක්රමයක් නොමැත. එම නිසා, උපලේඛකයා ඡන්ද විමසීම් නෝඩ් කරන තෙක් පරිමාවට ප්රවේශ විය හැකි (ප්රමාද බන්ධන) එකක් සොයා ගන්නා තෙක් හෝ ස්ථානය තේරීම සම්පූර්ණයෙන්ම රියදුරුට (ක්ෂණික බැඳීම) ලබා දෙයි.
නව CSIStorageCapacity
, ඇල්ෆා අදියරේ පවතින, අවශ්ය දත්ත ආදිය කාලසටහන් කරන්නාට ලබා ගත හැකි වන පරිදි ආදිය ගබඩා කිරීමට ඉඩ සලසයි. සාමාන්ය කාර්ය කාලීන වෙළුම් සඳහා සහය මෙන් නොව, ඔබ රියදුරු යොදවන විට, ඔබ ගබඩා ධාරිතාව ලුහුබැඳීම සක්රීය කළ යුතුය: external-provisioner
රියදුරුගෙන් ලැබෙන ධාරිතා තොරතුරු සාමාන්ය මාර්ගයෙන් ප්රකාශයට පත් කළ යුතුය GetCapacity
.
උපලේඛකයාට ප්රමාද බන්ධනය භාවිතා කරන අසීමිත පරිමාවක් සහිත පොඩ් එකක් සඳහා නෝඩයක් තෝරා ගැනීමට අවශ්ය නම් සහ ධජය සැකසීම මගින් ධාවකය යෙදවීමේදී මෙම විශේෂාංගය සක්රීය කළේ නම් CSIDriver.storageCapacity
, එවිට ප්රමාණවත් ගබඩා ධාරිතාවක් නොමැති නෝඩ් ස්වයංක්රීයව ඉවතලනු ඇත. මෙය සාමාන්ය කාර්ය කාලීන සහ ස්ථීර වෙළුම් දෙකටම ක්රියා කරයි, නමුත් CSI ephemeral වෙළුම් සඳහා නොවේ, මන්ද ඒවායේ පරාමිතීන් Kubernetes විසින් කියවිය නොහැක.
සාමාන්ය පරිදි, කරල් කාලසටහන් කිරීමට පෙර ක්ෂණිකව සම්බන්ධ කරන ලද වෙළුම් සාදනු ලබන අතර, ඒවායේ ස්ථානගත කිරීම ගබඩා ධාවකය විසින් තෝරා ගනු ලැබේ, එබැවින් වින්යාස කිරීමේදී external-provisioner
පෙරනිමියෙන්, මෙම දත්ත කෙසේ හෝ භාවිතා නොකරන බැවින්, ක්ෂණික බන්ධන සහිත ගබඩා පන්ති මඟ හරිනු ලැබේ.
kubernetes උපලේඛකයාට යල් පැන ගිය තොරතුරු සමඟ වැඩ කිරීමට බල කෙරෙන බැවින්, පරිමාව නිර්මාණය කරන විට සෑම අවස්ථාවකදීම ධාරිතාව පවතින බවට සහතිකයක් නැත, නමුත් නැවත උත්සාහයකින් තොරව එය නිර්මාණය වීමේ සම්භාවිතාව කෙසේ වෙතත් වැඩි වේ.
සැ.යු. ඔබට වඩාත් සවිස්තරාත්මක තොරතුරු ලබා ගත හැකි අතර ආරක්ෂිතව “බළලුන්ගේ ස්ථාවරය මත පුහුණු වන්න”, සහ සම්පූර්ණයෙන්ම තේරුම්ගත නොහැකි තත්වයක් ඇති වුවහොත්, දැඩි පා courses මාලා වලදී සුදුසුකම් ලත් තාක්ෂණික සහාය ලබා ගන්න -
Безопасность
CSIS ගබඩා ධාරිතාව
CSIStorageCapacity වස්තු නාම අවකාශ තුළ පවතී; එක් එක් CSI ධාවක තමන්ගේම නාම අවකාශයේ රෝල් කරන විට, දත්ත පැමිණෙන්නේ කොහෙන්ද යන්න පැහැදිලි බැවින් RBAC හිමිකම් එම අවකාශයේ CSIStorageCapacity වෙත සීමා කිරීම නිර්දේශ කෙරේ. Kubernetes මෙය කෙසේ හෝ පරීක්ෂා නොකරන අතර සාමාන්යයෙන් රියදුරන් එකම නාම අවකාශයේ තබා ඇත, එබැවින් අවසානයේ රියදුරන් ක්රියා කිරීමට බලාපොරොත්තු වන අතර වැරදි දත්ත ප්රකාශනය නොකිරීමට (මගේ කාඩ්පත අසාර්ථක වූ ස්ථානය මෙයයි, ආසන්න වශයෙන් රැවුල සහිත විහිළුවක් මත පදනම් වූ පරිවර්තකයෙක්)
සාමාන්ය අරමුණු තාවකාලික වෙළුම්
පරිශීලකයින්ට පොඩ් එකක් සෑදීමට (සෘජුව හෝ වක්රව) අයිතියක් තිබේ නම්, පරිමාව මත ඉල්ලීමක් සෑදීමට ඔවුන්ට අයිතියක් නොමැති වුවද, සාමාන්ය කාර්ය කාලීන වෙළුම් නිර්මාණය කිරීමට ඔවුන්ට හැකි වේ. මෙයට හේතුව 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 -
CSIStorageCapacity වස්තු මිනිසුන් විසින් කියවීමට අදහස් නොකෙරේ, එබැවින් සමහර සැකසුම් අවශ්ය වේ. Golang සැකිලි පෙරහන් ගබඩා පන්ති පෙන්වනු ඇත, මෙම උදාහරණය නම, ස්ථලකය සහ ධාරිතාව පෙන්වයි:
$ 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
වෙනත් යෙදුමකට 26620Mi ට වඩා අවශ්ය නම්, උපලේඛකයා සැලකිල්ලට නොගනී pmem-csi-pmem-govm-worker1
ඕනෑම අවස්ථාවක් තුළ.
ඊළඟට කුමක්ද?
විශේෂාංග දෙකම තවමත් සංවර්ධනය වෙමින් පවතී. ඇල්ෆා පරීක්ෂණ අතරතුර යෙදුම් කිහිපයක් විවෘත කරන ලදී. වැඩිදියුණු කිරීමේ යෝජනාව සබැඳි බීටා අදියර වෙත යාමට කළ යුතු කාර්යය මෙන්ම දැනටමත් සලකා බලා ප්රතික්ෂේප කර ඇති විකල්ප ලේඛනගත කරයි:
මූලාශ්රය: www.habr.com