यह पेज दिखाता है कि storage के लिए Volume उपयोग करने हेतु Pod को कैसे कॉन्फ़िगर करें।
किसी Container का file system केवल उतनी देर तक रहता है जितनी देर Container रहता है।इसलिए जब कोई Container terminate होकर फिर restart होता है, तो filesystem में किए गए बदलाव खो जाते हैं।Container से स्वतंत्र और अधिक consistent storage के लिए आपVolume का उपयोग कर सकते हैं।यह stateful applications (जैसे key-value stores, उदाहरण के लिए Redis, और databases) के लिए विशेष रूप से महत्वपूर्ण है।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
संस्करण की जांच करने के लिए, लिखें kubectl version.
इस अभ्यास में आप ऐसा Pod बनाते हैं जिसमें एक Container चलता है। इस Pod मेंemptyDir प्रकार का Volume होता है जो Pod के जीवनकाल तक बना रहता है, भले ही Container terminate होकर restart हो जाए।यह Pod की configuration file है:
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
Pod बनाएं:
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
जांचें कि Pod का Container चल रहा है, और फिर Pod में होने वाले बदलाव देखें:
kubectl get pod redis --watch
आउटपुट इस तरह दिखेगा:
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 13s
दूसरे terminal में, चल रहे Container का shell खोलें:
kubectl exec -it redis -- /bin/bash
अपनी shell में /data/redis पर जाएँ, और फिर एक फ़ाइल बनाएं:
root@redis:/data# cd /data/redis/
root@redis:/data/redis# echo Hello > test-file
अपनी shell में चल रही processes की सूची देखें:
root@redis:/data/redis# apt-get update
root@redis:/data/redis# apt-get install procps
root@redis:/data/redis# ps aux
आउटपुट इस तरह होगा:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379
root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash
root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
अपनी shell में Redis process को kill करें:
root@redis:/data/redis# kill <pid>
जहाँ <pid> Redis process ID (PID) है।
अपने मूल terminal में Redis Pod में होने वाले बदलाव देखें। अंततः आपको कुछ ऐसा दिखाई देगा:
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 13s
redis 0/1 Completed 0 6m
redis 1/1 Running 1 6m
इस बिंदु पर Container terminate होकर restart हो चुका है। ऐसा इसलिए है क्योंकि
Redis Pod कीrestartPolicy
Always है।
restarted Container के अंदर shell खोलें:
kubectl exec -it redis -- /bin/bash
अपनी shell में /data/redis पर जाएँ, और सत्यापित करें कि test-file अभी भी मौजूद है।
root@redis:/data/redis# cd /data/redis/
root@redis:/data/redis# ls
test-file
इस अभ्यास के लिए बनाया गया Pod हटाएं:
kubectl delete pod redis
Volume देखें।
Pod देखें।
emptyDir द्वारा दिए गए local disk storage के अलावा, Kubernetes कई प्रकार के
network-attached storage solutions को सपोर्ट करता है, जिनमें GCE पर PD और EC2 पर EBS शामिल हैं।ये critical data के लिए अधिक उपयुक्त हैं और nodes पर devices को mount/unmount करने जैसे
विवरण संभालते हैं। अधिक जानकारी के लिएVolumes देखें।