मैं https://github.com/kubernetes/client-go का उपयोग कर रहा हूं और सभी अच्छे से काम कर रहे हैं।
मेरे पास आधिकारिक कुबर्नेटेस डैशबोर्ड के लिए एक मैनिफ़ेस्ट (YAML) है: https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/ycommended.yaml
मैं kubectl applyक्लाइंट-गो का उपयोग करके गो कोड में इस प्रकटीकरण की नकल करना चाहता हूं ।
मैं समझता हूं कि मुझे पैकेज में परिभाषित सही एपीआई प्रकारों में YAML बाइट्स के कुछ (संयुक्त राष्ट्र) मार्शलिंग करने की आवश्यकता है: https://github.com/kubernetes/api
मैंने Createअपने क्लस्टर में एकल एपीआई प्रकारों को सफलतापूर्वक संपादित किया है, लेकिन मैं इसे कैसे प्रकट करता हूं जिसमें ऐसे प्रकारों की सूची है जो समान नहीं हैं ? क्या कोई संसाधन है kind: List*जो इन विभिन्न प्रकारों का समर्थन करता है?
मेरे वर्तमान समाधान csplit--- के साथ उपयोग कर YAML फ़ाइल को विभाजित करना है - सीमांकक के रूप में
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
इसके बाद, मैं नए (14) भागों पर लूप करता हूं, जो उनके बाइट्स को पढ़ते हैं, यूनिवर्सलडेसरीलाइज़र के डिकोडर द्वारा लौटाए गए ऑब्जेक्ट के प्रकार पर स्विच करते हैं और मेरे k8s क्लाइंटसेट का उपयोग करके सही एपीआई तरीकों को कॉल करते हैं।
मैं इसे अपने क्लस्टर में डैशबोर्ड के किसी भी नए संस्करण में अपडेट करने के लिए प्रोग्रामेटिक रूप से करना चाहूंगा। मुझे मेट्रिक्स सर्वर और कई अन्य संसाधनों के लिए भी ऐसा करने की आवश्यकता होगी। वैकल्पिक (शायद सरल) विधि मेरे कोड को कंटेनर छवि और सीधे कॉल पर स्थापित कुबेकेल के साथ जहाज करना हैkubectl apply -f - ; लेकिन इसका मतलब है कि मुझे डिस्क के लिए क्यूब कॉन्फिग्रेशन लिखना होगा या हो सकता है कि इसे इनलाइन पास कर दें ताकि कुबेकटेल इसका इस्तेमाल कर सके।
मुझे यह मुद्दा मददगार लगा: https://github.com/kubernetes/client-go/issues/193 डिकोडर यहाँ रहता है: https://github.com/kubernetes/apimachinery/tree/master/bkg/runtime/ serializer
यह क्लाइंट-गो में यहाँ उजागर किया गया है: https://github.com/kubernetes/client-go/blob/master/kubernetes/scheme/register.go#L69
मैंने RunConvert विधि पर भी एक नज़र डाली है जो kubectl द्वारा उपयोग की जाती है: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/convert.convert.go#L139 और मान लें कि मैं अपने स्वयं के सामान्य प्रदान कर सकते हैं उत्पादन प्राप्त करने के लिए ।
ऐसा लगता है कि RunConvert एक पदावनत पथ पर है
मैंने [क्लाइंट-गो] टैग किए गए अन्य प्रश्नों को भी देखा है, लेकिन ज्यादातर पुराने उदाहरणों का उपयोग करते हैं या एकल के साथ एक YAML फ़ाइल का उपयोग करते हैं kind परिभाषित के , और एपीआई तब से बदल गया है।
संपादित करें: क्योंकि मुझे एक से अधिक क्लस्टर के लिए ऐसा करने की आवश्यकता है और क्रमिक रूप से क्लस्टर बनाए जा रहे हैं (AWS EKS API + CloudFormation / eksctl ), मैं ServiceAccountकई AWS खातों में कई क्लस्टर संदर्भों के निर्माण के ओवरहेड को कम करना चाहूंगा । आदर्श रूप से, मेरे क्लाइंटसेट बनाने में शामिल एकमात्र प्रमाणीकरण चरण aws-iam- Authator का उपयोग करके क्लस्टर डेटा (नाम, क्षेत्र, CA प्रमाणपत्र, आदि) का उपयोग करके टोकन प्राप्त करने के लिए किया जाता है। वहाँ थोड़ी देर के लिए aws-iam-Authator की रिलीज़ नहीं हुई है, लेकिन masterएक तृतीय-पक्ष भूमिका क्रॉस-अकाउंट भूमिका और बाहरी आईडी को पारित करने के लिए अनुमति की सामग्री पारित की जाती है। IMO, यह एक का उपयोग करने से क्लीनर हैServiceAccount (और IRSA)) क्योंकि अन्य एडब्ल्यूएस सेवाएं हैं (इन समूहों के लिए ऐड-ऑन बनाने और लागू करने वाले बैकएंड एपीआई) के साथ बातचीत करने की आवश्यकता है।
संपादित करें: मैंने हाल ही में https://github.com/ericchiang/k8s पाया है । यह उच्च स्तर पर क्लाइंट-गो की तुलना में निश्चित रूप से सरल है, लेकिन इस व्यवहार का समर्थन नहीं करता है।
^---$अपने कोड में सिर्फ YAML फ़ाइल और विभाजन की सामग्री क्यों नहीं पढ़ते हैं ?