मेरी डॉकटर छवि में मेरे पास एक निर्देशिका /opt/myapp/etc
है जिसमें कुछ फ़ाइलें और निर्देशिकाएं हैं। मैं अपने ऐप के लिए स्टेटफुलसेट बनाना चाहता हूं। उस स्टेटफुलसेट में मैं लगातार वॉल्यूम का दावा कर रहा हूं और /opt/myapp/etc
से जुड़ा हूं। स्टेटफुलसेट yaml
नीचे संलग्न है। क्या कोई मुझे बता सकता है कि इस मामले में कंटेनर में वॉल्यूम कैसे संलग्न करें?
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset
labels:
app: myapp
spec:
serviceName: myapp
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: 10.1.23.5:5000/redis
name: redis
ports:
- containerPort: 6379
name: redis-port
- image: 10.1.23.5:5000/myapp:18.1
name: myapp
ports:
- containerPort: 8181
name: port
volumeMounts:
- name: data
mountPath: /opt/myapp/etc
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 5Gi
यहाँ वर्णन पॉड का आउटपुट है
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 3m (x4 over 3m) default-scheduler pod has unbound PersistentVolumeClaims
Normal Scheduled 3m default-scheduler Successfully assigned controller-statefulset-0 to dev-k8s-2
Normal SuccessfulMountVolume 3m kubelet, dev-k8s-2 MountVolume.SetUp succeeded for volume "default-token-xpskd"
Normal SuccessfulAttachVolume 3m attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-77d2cef8-a674-11e8-9358-fa163e3294c1"
Normal SuccessfulMountVolume 3m kubelet, dev-k8s-2 MountVolume.SetUp succeeded for volume "pvc-77d2cef8-a674-11e8-9358-fa163e3294c1"
Normal Pulling 2m kubelet, dev-k8s-2 pulling image "10.1.23.5:5000/redis"
Normal Pulled 2m kubelet, dev-k8s-2 Successfully pulled image "10.1.23.5:5000/redis"
Normal Created 2m kubelet, dev-k8s-2 Created container
Normal Started 2m kubelet, dev-k8s-2 Started container
Normal Pulled 1m (x4 over 2m) kubelet, dev-k8s-2 Container image "10.1.23.5:5000/myapp:18.1" already present on machine
Normal Created 1m (x4 over 2m) kubelet, dev-k8s-2 Created container
Normal Started 1m (x4 over 2m) kubelet, dev-k8s-2 Started container
Warning BackOff 1m (x7 over 2m) kubelet, dev-k8s-2 Back-off restarting failed container
स्टोरेजक्लास परिभाषा
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
namespace: controller
provisioner: kubernetes.io/cinder
reclaimPolicy: Retain
parameters:
availability: nova
2 जवाब
Kubernetes एक ही निर्देशिका में 2 वॉल्यूम माउंट करने की अनुमति नहीं देगा। दूसरा माउंट पहले द्वारा बनाई गई फाइलों को अधिलेखित कर देगा। मेरे मामले में डॉकर इमेज में आदि डायरेक्टरी में कुछ फाइलें थीं, जिन्हें वॉल्यूम बढ़ाने के बाद हटा दिया गया था। उपपथ का उपयोग करके समस्या का समाधान किया।
जांचें कि क्या आपके क्लस्टर में स्टोरेज क्लास परिभाषित है। <कोड> Kubectl को स्टोरेजक्लास मिलता है कोड> यदि आप डिफ़ॉल्ट स्टोरेज क्लास को होस्ट-पथ (मिनीक्यूब के मामले में) के रूप में उपयोग कर रहे हैं तो आपको स्टोरेज क्लास को अपने टेम्पलेट में शामिल करने की आवश्यकता नहीं है।
<कोड> वॉल्यूम क्लेम टेम्प्लेट: - मेटाडेटा: नाम: डेटा कल्पना: एक्सेस मोड: ["रीडराइटऑन"] साधन: अनुरोध: भंडारण: 5Gi कोड> कोई स्टोरेज क्लास निर्दिष्ट करके k8s आगे नहीं बढ़ेंगे और डिफॉल्ट स्टोरेज क्लास के साथ लगातार वॉल्यूम शेड्यूल करेंगे जो कि मिनीक्यूब के मामले में होस्ट-पथ होगा, यह भी सुनिश्चित करें कि /opt/myapp/etc
उस नोड पर मौजूद है जहां पॉड शेड्यूल किया जा रहा है।
kubectl logs your-pod-name
के साथ कंटेनर के लॉग की जांच कर सकते हैं।