मेरी डॉकटर छवि में मेरे पास एक निर्देशिका /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
Karthik 23 अगस्त 2018, 05:20
क्या आपको कोई त्रुटि मिल रही है या यह संलग्न नहीं हो रही है?
 – 
co2f2e
23 अगस्त 2018, 07:08
मुझे कोई त्रुटि नहीं मिल रही है। 'कुबेक्टल डिस्क्राइब पॉड' कहते हैं नॉर्मल सक्सेसफुलअटैचवॉल्यूम 3m अटैच्ड-कंट्रोलर अटैचवॉल्यूम। वॉल्यूम के लिए अटैच करें "pvc-77d2cef8-a674-11e8-9358-fa163e3294c1" और नॉर्मल सक्सेसफुलअटैचवॉल्यूम 3m अटैचमेंट-कंट्रोलर अटैच वॉल्यूम। -11e8-9358-fa163e3294c1" कंटेनर प्रारंभ विफल हो रहा है। मैंने कुबेक्टल को प्रश्न में पॉड परिणामों का वर्णन करने के लिए संलग्न किया है
 – 
Karthik
23 अगस्त 2018, 08:13

2 जवाब

सबसे बढ़िया उत्तर

Kubernetes एक ही निर्देशिका में 2 वॉल्यूम माउंट करने की अनुमति नहीं देगा। दूसरा माउंट पहले द्वारा बनाई गई फाइलों को अधिलेखित कर देगा। मेरे मामले में डॉकर इमेज में आदि डायरेक्टरी में कुछ फाइलें थीं, जिन्हें वॉल्यूम बढ़ाने के बाद हटा दिया गया था। उपपथ का उपयोग करके समस्या का समाधान किया।

0
Karthik 5 सितंबर 2018, 12:38

जांचें कि क्या आपके क्लस्टर में स्टोरेज क्लास परिभाषित है। <कोड> Kubectl को स्टोरेजक्लास मिलता है यदि आप डिफ़ॉल्ट स्टोरेज क्लास को होस्ट-पथ (मिनीक्यूब के मामले में) के रूप में उपयोग कर रहे हैं तो आपको स्टोरेज क्लास को अपने टेम्पलेट में शामिल करने की आवश्यकता नहीं है।

<कोड> वॉल्यूम क्लेम टेम्प्लेट: - मेटाडेटा: नाम: डेटा कल्पना: एक्सेस मोड: ["रीडराइटऑन"] साधन: अनुरोध: भंडारण: 5Gi कोई स्टोरेज क्लास निर्दिष्ट करके k8s आगे नहीं बढ़ेंगे और डिफॉल्ट स्टोरेज क्लास के साथ लगातार वॉल्यूम शेड्यूल करेंगे जो कि मिनीक्यूब के मामले में होस्ट-पथ होगा, यह भी सुनिश्चित करें कि /opt/myapp/etc उस नोड पर मौजूद है जहां पॉड शेड्यूल किया जा रहा है।

2
captainchhala 23 अगस्त 2018, 07:55
मेरे पास मानक के रूप में स्ट्रोगक्लास है जो ओपनस्टैक है। Kubectl पॉड परिणामों का वर्णन करता है कि इसने PV को सफलतापूर्वक बनाया है। समस्या इसे कंटेनर से जोड़ने के साथ है। कंटेनर से जुड़ने के बाद यह दुर्घटनाग्रस्त हो गया। आप प्रश्न में kubectl का वर्णन पॉड परिणाम देख सकते हैं। चेतावनी बैकऑफ़ 1m (x7 ओवर 2m) क्यूबलेट, dev-k8s-2 बैक-ऑफ़ पुनरारंभ विफल कंटेनर।
 – 
Karthik
23 अगस्त 2018, 08:08
मुझे नहीं लगता कि इसका पीवी के साथ कुछ लेना-देना है, क्या आप अधिक जानकारी प्राप्त करने के लिए kubectl logs your-pod-name के साथ कंटेनर के लॉग की जांच कर सकते हैं।
 – 
captainchhala
23 अगस्त 2018, 08:15
मुझे संदेह है कि /opt/etc कंटेनर में एक निर्देशिका है। इसमें कुछ फाइलें और उप निर्देशिकाएं हैं। क्या स्टार्ट अप/ऑप/आदि निर्देशिका के दौरान कंटेनर में पीवी संलग्न करना संभव है? मेरा इरादा है कि /opt/etc में किया गया कोई भी परिवर्तन हमेशा मात्रा में उपलब्ध होना चाहिए।
 – 
Karthik
23 अगस्त 2018, 08:23
जाहिरा तौर पर उन्हें तब तक होना चाहिए, जब तक कि कंटेनर के पास उस वॉल्यूम तक पढ़ने-लिखने की पहुंच हो।
 – 
captainchhala
23 अगस्त 2018, 08:49