Kubernetes सेवाओं को तैनात करने के लिए YAML प्राप्त करें?


116

मैं Google कंटेनर इंजन में चलने वाले कुबेरनेट्स के लिए अपने ऐप को तैनात करने का प्रयास कर रहा हूं ।

एप्लिकेशन को यहां पाया जा सकता है: https://github.com/Industrial/docker-znc

Dockerfile पर एक छवि में बनाया गया है गूगल कंटेनर रजिस्ट्री

मैंने + बटन के माध्यम से कुबेरनेट्स में ऐप को तैनात किया है । मेरे पास इसके लिए YAML नहीं है।

मैंने एप्लिकेशन द्वारा आवश्यक पीईएम फ़ाइल के लिए कुबेरनेट्स में एक गुप्त डाला है ।

  1. मैं तैनाती , सेवा और के लिए YAML कैसे प्राप्त करूंफॉर्म भरने से मुझे कुबेरनेट्स द्वारा बनाई गई पॉड के लिए YAML ?
  2. उपयोग के लिए मैं अपने पॉड में सीक्रेट कैसे प्राप्त करूं ?

जवाबों:


163

एक तैनाती (सेवा, फली, रहस्य, आदि) के लिए यमल प्राप्त करने के लिए:

kubectl get deploy deploymentname -o yaml --export

3
किसी भी विचार को पूर्ण क्लस्टर (सभी परिनियोजन) के लिए कैसे करना है? निश्चित रूप से, विचार, ठीक उसी सेवाओं के साथ दर्पण वातावरण बनाने के लिए।
सिनास्टेटिक

1
@ सामान्य, सूची निर्यात अभी तक समर्थित नहीं हैं और जल्द ही आने वाले नहीं हैं। आपको अपनी सूची बनाने के लिए संभवतः उन सभी स्रोतों को सूचीबद्ध करने के लिए एक स्क्रिप्ट की आवश्यकता होगी। github.com/kubernetes/kubernetes/issues/…
mababin

23
कुबेरनेट्स 1.14 के रूप में, --exportपदावनत किया जाता है; यहाँ देखें । आप get -o yamlबिना उपयोग कर सकते हैं --export, हालांकि इसमें वर्तमान वस्तु स्थिति के बारे में जानकारी शामिल है, साथ ही साथ (पुनः) वस्तु को कॉन्फ़िगर करने के लिए आवश्यक घोषणात्मक कॉन्फ़िगरेशन भी शामिल है।
जोश केली

अभी भी "-o yaml" द्वारा उत्पन्न यम से कुछ वर्तमान स्थिति को हटाने की आवश्यकता है, उदाहरण के लिए, spec.clusterIPऔर metadata.resourceVersionसेवा में।
टोनी ली

18

फॉर्म में भरकर कुबेरनेट्स द्वारा बनाई गई तैनाती, सेवा और पॉड के लिए यमरल कैसे प्राप्त करूं?

kubectl get deployment,service,pod yourapp -o yaml --export

@ जवाब देने योग्य प्रश्न:

किसी भी विचार को पूर्ण क्लस्टर (सभी परिनियोजन) के लिए कैसे करना है?

kubectl get deploy --all-namespaces -o yaml --export

इस पद्धति के साथ समस्या यह है कि निर्यात में नाम स्थान शामिल नहीं है। इसलिए यदि आप एक ही समय में कई संसाधनों का निर्यात करना चाहते हैं, तो मैं इसे प्रति नाम स्थान पर करने की सलाह देता हूं:

kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml

दुर्भाग्य से kubernetes अभी भी एक सच्चे सभी आदेश प्राप्त करने का समर्थन नहीं करता है , इसलिए आपको मैन्युअल रूप से उन संसाधनों के प्रकार को सूचीबद्ध करने की आवश्यकता है जिन्हें आप निर्यात करना चाहते हैं। आप के साथ संसाधन प्रकारों की एक सूची प्राप्त कर सकते हैं

kubectl api-resources

2
kubectl get $(kubectl api-resources | awk '{print $1}' | tail -n +2 | tr '\n' ',' | sed s/,\$//) -o yaml > manifest.yaml
मेकिंगटन

10

इसी मुद्दे पर kubernetes GitHub मुद्दों पृष्ठ पर चर्चा की गई है और उपयोगकर्ता "अलहजानी" ने एक बैश स्क्रिप्ट बनाई जो सभी yaml का निर्यात करती है और उन्हें एकल फ़ाइलों और फ़ोल्डरों में लिखती है।

चूंकि यह प्रश्न Google पर अच्छी तरह से रैंक करता है और चूंकि मुझे वह समाधान बहुत अच्छा लगा, इसलिए मैं यहां इसका प्रतिनिधित्व करता हूं।

उप-फ़ोल्डरों को यम स्क्रिप्ट निर्यात करने वाली बैश स्क्रिप्ट:

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done

एक अन्य उपयोगकर्ता "एकॉन्ड्रैट" ने एक स्क्रिप्ट बनाई जो निर्देशिकाओं का उपयोग नहीं करती है, जो kubectl apply -fबाद में बनाना आसान बनाता है ।

मौजूदा फ़ोल्डर में यम स्क्रिप्ट निर्यात करने वाली बैश स्क्रिप्ट:

for n in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob | grep -v 'secret/default-token')
do
    kubectl get -o=yaml --export $n > $(dirname $n)_$(basename $n).yaml
done

अंतिम स्क्रिप्ट में सेवा खाता शामिल नहीं है।


6

Kubernetes से yaml को डाउनलोड करने के लिए सिंटैक्स

kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]

पॉड चलाने से यमल फ़ाइल बनाएँ:

  1. kubectl get po -n nginx nginx-deployment-755cfc7dcf-5s7j8 -o yaml > podDetail.yaml

पॉड चलाने से प्रतिकृति फ़ाइल बनाएँ:

  1. kubectl get rs -n nginx -o yaml > latestReplicaSet.yaml

फली चलाने से पदावनति yaml फ़ाइल बनाएँ:

  1. kubectl get deploy -n nginx -o yaml > latestDeployement.yaml

4

रहस्य के बारे में 2 प्रश्न के लिए, यह k8s प्रलेखन से है। अधिक जानकारी के लिए https://kubernetes.io/docs/concepts/configuration/secret/#use-secrets देखें ।

  1. एक रहस्य बनाएँ या किसी मौजूदा का उपयोग करें। एकाधिक पॉड्स एक ही रहस्य को संदर्भित कर सकते हैं।
  2. Spec.volumes [] के तहत एक वॉल्यूम जोड़ने के लिए अपनी पॉड परिभाषा को संशोधित करें। मात्रा को कुछ भी नाम दें, और एक युक्ति है। [स्पैनिश]] गुप्त। SecretName फ़ील्ड गुप्त वस्तु के नाम के बराबर है।
  3. प्रत्येक कंटेनर में एक spec.containers [। VolumeMounts [] जोड़ें जो गुप्त की आवश्यकता होती है। निर्दिष्ट करें Spec.containers []।
  4. अपनी छवि और / या कमांड लाइन को संशोधित करें ताकि प्रोग्राम उस निर्देशिका में फ़ाइलों के लिए दिखे। गुप्त डेटा मानचित्र की प्रत्येक कुंजी माउंटपाथ के तहत फ़ाइल नाम बन जाती है।

मैंने इसका उपयोग किया है और यह ठीक काम करता है।


4
  • जैसा कि ऊपर उल्लेख किया गया है "--export", क्यूबर्नेट्स ऑब्जेक्ट्स के अनुरूप प्रकट होने का एक विकल्प है
  • लेकिन "--export" को छोटी गाड़ी माना जाता है और इसे अपदस्थ करने का प्रस्ताव है
  • वर्तमान में बेहतर विकल्प "-o yaml" या "-o json" करना और अनावश्यक फ़ील्ड को निकालना है
  • मुख्य अंतर "--export" क्लस्टर विशिष्ट सेटिंग्स (जैसे k8 सेवा की क्लस्टर सेवा आईपी) को हटाने की उम्मीद है। लेकिन यह इस संबंध में असंगत पाया जाता है

4

अपनी सेवा के yaml प्रारूप प्राप्त करने के लिए इस कमांड का उपयोग करें

kubectl get service servicename -n <namespace> -o yaml

आप इसे कुछ फ़ाइल में भी डाल सकते हैं

kubectl get service servicename -n <namespace> -o yaml > service.yaml


0
kubectl -n <namespace> get <resource type> <resource Name> -o yaml 

ऊपर दिए गए आदेश के साथ, कुबेरनेट्स में परिभाषित किसी भी संसाधन को YAMLप्रारूप में निर्यात किया जा सकता है ।


0

यदि आपको फ़ाइल का उपयोग देखने और संपादित करने की आवश्यकता है:

kubectl edit service servicename


0
  1. आप इस कमांड का उपयोग करके संसाधनों की yaml फाइलें प्राप्त कर सकते हैं

    kubectl -n <namespace> get <resource type> <resource Name> -o yaml

  2. अपने पॉड में राज पाने के लिए,

कुछ इस तरह का उपयोग करें

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

या

envFrom
- secretRef:
    name: secret_name

 

0

मुझे पता है कि यह जवाब देने के लिए बहुत पुराना है, लेकिन उम्मीद है, कोई इसे मददगार पाएगा।

हम सभी नाम स्थान से एक तरह का निर्यात लाने के लिए कमांड के नीचे कोशिश कर सकते हैं -

kubectl get <kind> --all-namespaces --export -o yaml

0

क्या @ जोनोस लेनार्ट के जवाब से केवल मामूली अंतर है!

kubectl get deploy deploymentname -o yaml > outputFile.yaml करूँगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.