Tôi đang sử dụng https://github.com/kubernetes/client-go và tất cả đều hoạt động tốt.
Tôi có một bảng kê khai (YAML) cho Bảng điều khiển Kubernetes chính thức: https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommends.yaml
Tôi muốn bắt chước kubectl apply
bảng kê khai này trong mã Go, sử dụng client-go.
Tôi hiểu rằng tôi cần thực hiện một số (un) sắp xếp các byte YAML thành các loại API chính xác được xác định trong gói: https://github.com/kubernetes/api
Tôi đã chỉnh sửa thành công Create
các loại API đơn thành cụm của mình, nhưng làm cách nào để làm điều này cho một bảng kê khai có chứa danh sách các loại không giống nhau ? Có một nguồn kind: List*
hỗ trợ các loại khác nhau?
Cách giải quyết hiện tại của tôi là phân tách tệp YAML bằng cách sử dụng csplit
--- làm dấu phân cách
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
Tiếp theo, tôi lặp qua các phần (14) mới đã được tạo, đọc byte của chúng, bật loại đối tượng được bộ giải mã của UniversalDeserializer trả về và gọi các phương thức API chính xác bằng cách sử dụng máy khách k8s của tôi.
Tôi muốn làm điều này để lập trình để cập nhật cho bất kỳ phiên bản mới nào của bảng điều khiển vào cụm của tôi. Tôi cũng sẽ cần phải làm điều này cho Máy chủ Metrics và nhiều tài nguyên khác. Phương pháp thay thế (có thể đơn giản hơn) là gửi mã của tôi với kubectl được cài đặt vào hình ảnh container và gọi trực tiếp kubectl apply -f -
; nhưng điều đó có nghĩa là tôi cũng cần phải viết cấu hình kube vào đĩa hoặc có thể truyền nội tuyến để kubectl có thể sử dụng nó.
Tôi thấy vấn đề này rất hữu ích: https://github.com/kubernetes/client-go/issues/193 Bộ giải mã sống ở đây: https://github.com/kubernetes/apimachowder/tree/master/pkg/r nb / nối tiếp
Nó được hiển thị trong ứng dụng khách - truy cập tại đây: https://github.com/kubernetes/client-go/blob/master/kubernetes/scheme/register.go#L69
Tôi cũng đã xem phương thức RunConvert được sử dụng bởi kubectl: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/convert/convert.go#L139 và cho rằng tôi có thể cung cấp genericclioptions của riêng tôi.IOStreams để có được đầu ra?
Có vẻ như RunConvert đang trên con đường phản đối
Tôi cũng đã xem xét các câu hỏi khác được gắn thẻ [client-go] nhưng hầu hết sử dụng các ví dụ cũ hoặc sử dụng tệp YAML với một kind
định nghĩa duy nhất và API đã thay đổi kể từ đó.
Chỉnh sửa: Bởi vì tôi cần phải làm điều này cho nhiều cụm và đang tạo các cụm theo chương trình (API AWS EKS + CloudFormation / eksctl ), tôi muốn giảm thiểu chi phí tạo ra ServiceAccount
trên nhiều bối cảnh cụm, trên nhiều tài khoản AWS. Lý tưởng nhất, bước xác thực duy nhất liên quan đến việc tạo ứng dụng khách của tôi là sử dụng aws-iam-Authenticator để nhận mã thông báo bằng cách sử dụng dữ liệu cụm (tên, vùng, chứng chỉ CA, v.v.). Đã không có bản phát hành aws-iam-Authenticator trong một thời gian, nhưng nội dung master
cho phép sử dụng vai trò tài khoản chéo của bên thứ ba và ID bên ngoài được thông qua. IMO, điều này sạch hơn so với sử dụng ServiceAccount
(và IRSA) bởi vì có các dịch vụ AWS khác mà ứng dụng (API phụ trợ tạo và áp dụng các tiện ích bổ sung cho các cụm này) cần phải tương tác.
Chỉnh sửa: Gần đây tôi đã tìm thấy https://github.com/ericchiang/k8s . Nó chắc chắn đơn giản để sử dụng hơn so với máy khách, ở cấp độ cao, nhưng không hỗ trợ hành vi này.
^---$
trong mã của bạn?