मैं सभी संसाधनों को एक नए नाम स्थान पर कैसे कॉपी करूं?
मैं एक नया नामस्थान बनाना चाहूंगा जो पुराने के समान हो।
मेरा दृष्टिकोण कुछ इस तरह होगा (नीचे पूर्ण आदेश):
kubectl get <resources> -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f -
यह मूल रूप से एक json प्रारूप में सभी संसाधन परिभाषाएं प्राप्त करता है, पुराने नाम स्थान को नए के साथ बदल देता है, और सब कुछ लागू होता है।
दुर्भाग्य से, यह काम नहीं करता है, क्योंकि पुरानी परिभाषाओं में नाम स्थान विशिष्ट चीजें हैं। इससे बचने के लिए, एक --export
ध्वज हुआ करता था, जिसे यहाँ देखने के लिए चित्रित किया गया है ।
किसी भी विचार मैं यह कैसे कर सकता है?
पूर्ण आदेश:
kubectl get bindings,configmaps,endpoints,limitranges,persistentvolumeclaims,persistentvolumes,pods,podtemplates,replicationcontrollers,resourcequotas,secrets,mutatingwebhookconfigurations,validatingwebhookconfigurations,controllerrevisions,daemonsets,deployments,replicasets,statefulsets,tokenreviews,localsubjectaccessreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,horizontalpodautoscalers,cronjobs,jobs,certificatesigningrequests,leases,endpointslices,events,ingressclasses,networkpolicies,runtimeclasses,poddisruptionbudgets,rolebindings,roles,debugattachments,csidrivers,volumeattachments -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f -
जवाब
आप यह कोशिश कर सकते हैं
kubectl get all -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace: NEW_NAMESPACE/' | kubectl apply -f -
यह काम करेगा
आप 1.14 से ऊपर एक उच्च K8s संस्करण का उपयोग कर रहे हैं sed नामस्थान को बदलने के लिए काम करेंगे
यदि kubectl get all
हम सभी संसाधनों को नहीं जोड़ सकते हैं तो हम इस तरह आवेदन कर सकते हैं
kubectl get bindings,configmaps,endpoints,limitranges,persistentvolumeclaims,persistentvolumes,pods,podtemplates,replicationcontrollers,resourcequotas,secrets,mutatingwebhookconfigurations,validatingwebhookconfigurations,controllerrevisions,daemonsets,deployments,replicasets,statefulsets,tokenreviews,localsubjectaccessreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,horizontalpodautoscalers,cronjobs,jobs,certificatesigningrequests,leases,endpointslices,events,ingressclasses,networkpolicies,runtimeclasses,poddisruptionbudgets,rolebindings,roles,debugattachments,csidrivers,volumeattachments -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace: NEW_NAMESPACE/' | kubectl apply -f -
अभी के लिए आपके कार्य को हल करने का कोई स्थापित तरीका नहीं है।
कुछ सामान्य दृष्टिकोण हैं जिन्हें आप आज़मा सकते हैं।
इसके अलावा चर्चा को देखें यहाँ ।
यदि एक संसाधन बनाया जाता है kubectl apply
तो लागू यम को विशेष एनोटेशन में बचाया जाएगा।
kubectl.kubernetes.io/last-applied-configuration
आप इसे इस तरह से पुनः प्राप्त कर सकते हैं:
kubectl get deploy example -o json | \
jq -r '.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"' | jq .
ध्यान दें कि kubectl create
और kubectl replace
इस एनोटेशन को बरकरार न रखें।
अधिक उदाहरण यहां देखें ।
यह भी ध्यान रखें कि यह दृष्टिकोण ऑब्जेक्ट अपडेट के साथ कैसे काम करता है ।
वैकल्पिक रूप से आप डायरेक्ट जसन / यामल प्रोसेसिंग का सहारा ले सकते हैं।
kubectl get deploy example -ojson | \ice
jq 'del(.metadata.creationTimestamp, .metadata.managedFields, \
.metadata.namespace, .metadata.ownerReferences, \
.metadata.resourceVersion, .metadata.selfLink, \
.metadata.uid, .status)'
सुनिश्चित करें कि आप सभी सेवा क्षेत्रों को हटा दें (उदाहरण के लिए, हेल्म बहुत सारे सामान जोड़ता है)।
अधिकांश शायद kubectl get all
आपके लिए काम नहीं करेंगे। पहले यह वास्तव में सभी संसाधनों को नहीं दिखाता है।
यहाँ उर्फ विस्तार के नियम हैं all
।
- No cluster scoped resources
- No namespace admin level resources (limits, quota, policy, authorization rules)
- No resources that are potentially unrecoverable (secrets and pvc)
- Resources that are considered "similar" to #3 should be grouped the same (configmaps)
भ्रामक रूप से, यह जानकारी कुबेरनेट्स डॉक्स से हटा दी गई है और केवल संग्रहीत प्रतियों में मौजूद है, लेकिन यह अभी भी प्रासंगिक है।
इसके अलावा kubectl get all
आपको पॉड्स और डेप्लॉयमेंट कंट्रोलर (जैसे डिप्लॉयमेंट या स्टेटफुलसेट) दोनों वापस मिल जाएंगे, जो कि आप नहीं चाहते हैं, जैसा कि ज्यादातर समय में आप स्पष्ट रूप से पॉड्स नहीं बनाना चाहते हैं।