ฉันใช้https://github.com/kubernetes/client-goและใช้งานได้ดี
ฉันมีรายการ (YAML) สำหรับแผงควบคุม Kubernetes อย่างเป็นทางการ: https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
ฉันต้องการเลียนแบบkubectl apply
รายการนี้ในโค้ด Go โดยใช้ client-go
ฉันเข้าใจว่าฉันจำเป็นต้องทำ marshalling (ไม่) จำนวนหนึ่งของ YAML เป็นประเภท API ที่ถูกต้องที่กำหนดไว้ในแพ็คเกจ: https://github.com/kubernetes/api
ฉันประสบความสำเร็จในการสร้างCreate
API ชนิดเดียวให้กับคลัสเตอร์ของฉันแต่ฉันจะทำสิ่งนี้เพื่อรายการที่มีรายการประเภทที่ไม่เหมือนกันได้อย่างไร มีทรัพยากรkind: List*
ที่สนับสนุนประเภทต่าง ๆ เหล่านี้หรือไม่?
วิธีแก้ปัญหาปัจจุบันของฉันคือการแยกไฟล์ YAML ที่ใช้csplit
ด้วย --- เป็นตัวคั่น
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
ต่อไปฉันวนซ้ำส่วน (14) ใหม่ที่สร้างขึ้นอ่านไบต์สลับประเภทของวัตถุที่ส่งคืนโดยตัวถอดรหัสของ UniversalDeserializer และเรียกวิธีการ API ที่ถูกต้องโดยใช้ไคลเอนต์ k8s ของฉัน
ฉันต้องการทำสิ่งนี้โดยทางโปรแกรมเพื่อทำการอัพเดตแดชบอร์ดเวอร์ชันใหม่ใด ๆ ลงในคลัสเตอร์ของฉัน ฉันจะต้องทำสิ่งนี้เพื่อเซิร์ฟเวอร์ Metrics และทรัพยากรอื่น ๆ อีกมากมาย ทางเลือกที่ (อาจจะง่าย) วิธีการคือการจัดส่งรหัสของฉันกับ kubectl ติดตั้งให้ภาพภาชนะและโทรโดยตรงkubectl apply -f -
; แต่นั่นหมายความว่าฉันต้องเขียนการตั้งค่า kube ไปยังดิสก์หรืออาจส่งผ่านอินไลน์เพื่อให้ kubectl สามารถใช้งานได้
ฉันพบว่าปัญหานี้มีประโยชน์: https://github.com/kubernetes/client-go/issues/193 ตัวถอดรหัสอาศัยอยู่ที่นี่: https://github.com/kubernetes/apimachinery/tree/master/pkg/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และคิดว่าฉัน สามารถให้ตัวเลือกทั่วไปของฉันเองiOSได้รับผลลัพธ์หรือไม่
ดูเหมือนว่า RunConvert อยู่บนเส้นทางที่เลิกใช้แล้ว
ฉันได้ดูคำถามอื่น ๆ ที่ติดแท็ก [client-go] แต่ส่วนใหญ่ใช้ตัวอย่างเก่าหรือใช้ไฟล์ YAML ที่มีการkind
กำหนดเดียวและ API ก็เปลี่ยนไป
แก้ไข: เนื่องจากฉันต้องทำสิ่งนี้มากกว่าหนึ่งคลัสเตอร์และกำลังสร้างกลุ่มโดยทางโปรแกรม (AWS EKS API + CloudFormation / eksctl ) ฉันต้องการลดค่าใช้จ่ายในการสร้างเนื้อหาServiceAccount
ในหลายบริบทคลัสเตอร์ในบัญชี AWS จำนวนมาก ตามหลักแล้วขั้นตอนการพิสูจน์ตัวตนเท่านั้นที่เกี่ยวข้องกับการสร้างชุดไคลเอ็นต์ของฉันคือการใช้aws-iam-authenticatorเพื่อรับโทเค็นโดยใช้ข้อมูลคลัสเตอร์ (ชื่อภูมิภาคภูมิภาคใบรับรอง CA ฯลฯ ) ยังไม่มีการเผยแพร่ aws-iam-authenticator มาระยะหนึ่งแล้ว แต่เนื้อหาของการmaster
อนุญาตให้ใช้บทบาทข้ามบัญชีบทบาทบุคคลที่สามและรหัสภายนอกที่จะส่งผ่าน IMO นี้สะอาดกว่าการใช้ServiceAccount
(และIRSA) เนื่องจากมีบริการ AWS อื่น ๆ แอปพลิเคชัน (API ส่วนหลังที่สร้างและใช้งานส่วนเสริมกับกลุ่มเหล่านี้) จำเป็นต้องโต้ตอบกับ
แก้ไข: ฉันได้พบเมื่อเร็ว ๆ นี้https://github.com/ericchiang/k8s มันใช้งานง่ายกว่าการใช้งานของลูกค้าในระดับสูง แต่ไม่รองรับพฤติกรรมนี้
^---$
รหัสของคุณ?