मेरे पास एक पॉड yaml फ़ाइल है (नीचे देखें)। इसमें वे सभी गुण हैं जो मैं चाहता हूं, प्रतिकृति गुणों को छोड़कर। ताकि मुझे परिनियोजन yaml लिखना पड़े।

apiVersion: v1
kind: Pod
metadata:
  name: app-ykt
  labels:
    app: app-ykt
    purpose: ykt_production
spec:
  containers:
  - name: app-ykt
    image: app
    imagePullPolicy: IfNotPresent
    ports:
      - containerPort: 80
    volumeMounts:
      - name: volume-app-ykt
        mountPath: /usr/application
    env:
      - name: spring.config.location
        value: application.properties
  volumes:
      - name: volume-app-ykt
        hostPath:
          path: /opt/docker/datalook-pre-core
          type: Directory

परिनियोजन फ़ाइल लिखते समय, मुझे छवि और अन्य गुणों का उल्लेख करना होगा जो मुझे नहीं चाहिए। क्या अधिक है, यह एक और पॉड बनाता है और मेरे पास कुछ गुण गायब हैं, उदाहरण के लिए वॉल्यूम। मेरा लक्ष्य सिर्फ यह प्रतिकृति है, ताकि मुझे पॉड के लिए उच्च उपलब्धता मिल सके। कोई भी समाधान?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-ykt
  labels:
    app: app-ykt
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-ykt
  template:
    metadata:
      labels:
        app: app-ykt
    spec:
      containers:
      - name: app-ykt
        image: app
        ports:
        - containerPort: 80
0
user84592 20 जून 2018, 11:30

2 जवाब

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

प्रत्येक कुबेरनेट्स वस्तु की अपनी आवश्यकताएं होती हैं। यदि आप Deployment बनाना चाहते हैं तो आपको यह गुण निर्दिष्ट करना होगा। Deployment ऑब्जेक्ट ReplicaSet के निर्माण और इसे प्रबंधित करने के लिए एक "अमूर्त" परत है। आप कोई भी Deployment (RelicaSet) कंटेनर गुण विवरण (छवियां, वॉल्यूम आदि) के बिना नहीं बना सकते हैं।

यदि आप कुबेरनेट्स का उपयोग करने जा रहे हैं तो आपको "कुबेरनेट्स वे" द्वारा अपने ऐप्स को परिनियोजित करने की आवश्यकता है। आप अपने ऐप विवरण के साथ Deployment .yml फ़ाइल बना सकते हैं, फिर आप किसी भी प्रतिकृति की संख्या के लिए Deployment को मापेंगे।

Service और शायद Ingress ऑब्जेक्ट आपको प्रतिकृतियों के बीच संतुलन लोड करने में मदद कर सकते हैं, जैसा कि @Daein ने ऊपर उल्लेख किया है

आपका Deployment ऐसा दिखाई दे सकता है:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-ykt
  namespace: elk
  labels:
    app: app-ykt
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app-ykt
  template:
    metadata:
      labels:
        app: app-ykt
    spec:
      containers:
      - name: app-ykt
        image: <your_image>
        ports:
        - containerPort: 80
        env:
        - name: spring.config.location
          value: application.properties
        volumeMounts:
          - name: volume-app-ykt
            mountPath: /usr/application
      volumes:
      - name: volume-app-ykt
        hostPath:
          path: /opt/docker/datalook-pre-core
          type: Directory

यह Deployment बनाएगा, जो बदले में स्वचालित रूप से केवल एक app-ykt कंटेनर के साथ 3 प्रतिकृतियां (3 पॉड्स) बनाएगा

नोट: मुझे यह भी लगता है कि यहां hostPath का उपयोग करना एक अच्छा विचार नहीं है, जैसा कि @Daein ने उल्लेख किया है, भले ही मैं आपके ऐप कॉन्फ़िगरेशन को नहीं जानता। hostPath आमतौर पर आपके नोड्स पर किसी भी फाइल को एक्सेस करने के लिए उपयोग किया जाता है...

होस्टपाथ वॉल्यूम का उपयोग केवल तभी करना याद रखें जब आपको नोड पर सिस्टम फ़ाइलों को पढ़ने या लिखने की आवश्यकता हो। पॉड्स में डेटा बनाए रखने के लिए उनका उपयोग कभी न करें। "कुबेरनेट्स इन एक्शन" (सी) मार्को लुक्सा

1
Konstantin Vustin 22 जून 2018, 07:42

सबसे पहले, मुझे लगता है कि होस्टपाथ वॉल्यूम एचए समाधान नहीं है, इसलिए आपको कुबेरनेट्स क्लस्टर में रीडवाइटमैनी पर्सिस्टेंट वॉल्यूम के रूप में वॉल्यूम साझा करने की चिंता करनी चाहिए। और फिर आपको सेवाओं [0] जैसे प्रतिकृति पॉड्स के बीच आंतरिक लोड बैलेंसर की भी आवश्यकता होती है।

मुझे आशा है कि यह आपकी मदद करेगा।

[0][https://kubernetes.io/docs/concepts/services- नेटवर्किंग/सेवा/]

2
Daein Park 20 जून 2018, 16:09