https://github.com/kubernetes/client-go를 사용 하고 있으며 모두 잘 작동합니다.
공식 Kubernetes 대시 보드에 대한 매니페스트 (YAML)가 있습니다 : https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
kubectl apply
client-go를 사용하여 Go 코드 에서이 매니페스트 를 모방하고 싶습니다 .
패키지에 정의 된 올바른 API 유형으로 YAML 바이트를 마샬링 해제해야한다는 것을 알고 있습니다 : https://github.com/kubernetes/api
Create
클러스터에 단일 API 유형을 성공적으로 추가 했지만 동일한 유형 목록이 포함 된 매니페스트에 대해 어떻게해야 합니까? kind: List*
이러한 다른 유형을 지원 하는 리소스 가 있습니까?
현재 해결 방법은 csplit
---를 구분 기호로 사용하여 YAML 파일을 분할하는 것입니다
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
다음으로, 생성 된 새로운 (14) 부분을 반복하고 바이트를 읽고 UniversalDeserializer의 디코더가 반환 한 객체 유형을 전환 한 다음 k8s 클라이언트 세트를 사용하여 올바른 API 메소드를 호출합니다.
프로그래밍 방식으로 새 버전의 대시 보드를 클러스터로 업데이트하기 위해이 작업을 수행하고 싶습니다. 또한 Metrics Server 및 기타 여러 자원에 대해서도이 작업을 수행해야합니다. 대안 (아마도 더 간단한) 방법은 컨테이너 코드에 kubectl이 설치된 코드를 제공하고 직접 호출하는 것입니다 kubectl apply -f -
. 그러나 이것은 또한 kubec 설정을 디스크에 쓰거나 kubectl이 사용할 수 있도록 인라인으로 전달해야 함을 의미합니다.
이 문제가 도움이된다는 것을 알았습니다. https://github.com/kubernetes/client-go/issues/193 디코더는 여기에 있습니다 : https://github.com/kubernetes/apimachinery/tree/master/pkg/runtime/ 시리얼 라이저
https://github.com/kubernetes/client-go/blob/master/kubernetes/scheme/register.go#L69 에서 클라이언트 이동에 노출됩니다.
또한 kubectl 사용하는 RunConvert 방법에 대해 살펴 찍은 : https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/convert/convert.go#L139을 하고 난 가정 내 자신의 genericclioptions.IOStreams 를 제공하여 출력을 얻을 수 있습니까?
RunConvert가 지원 중단 경로에있는 것 같습니다.
또한 [client-go]로 태그 된 다른 질문을 보았지만 대부분 오래된 예제를 사용하거나 단일 kind
정의가 있는 YAML 파일을 사용 하면 API가 변경되었습니다.
편집 : 둘 이상의 클러스터에 대해이 작업을 수행하고 프로그래밍 방식으로 클러스터를 생성하고 있기 때문에 (AWS EKS API + CloudFormation / eksctl ) ServiceAccount
많은 AWS 계정에서 여러 클러스터 컨텍스트 에서을 생성하는 오버 헤드를 최소화하고 싶습니다 . 이상적으로, 내 클라이언트 세트를 만드는 데 관련된 유일한 인증 단계는 aws-iam-authenticator 를 사용하여 클러스터 데이터 (이름, 지역, CA 인증서 등)를 사용하여 토큰을 얻는 것입니다. 잠시 동안 aws-iam-authenticator가 릴리스되지 않았지만 master
타사 역할 교차 계정 역할 및 외부 ID 사용을 허용 하는 내용이 있습니다. IMO, 이것은 ServiceAccount
(그리고 IRSA를 사용하는 것보다 깨끗합니다.) 다른 AWS 서비스가 있기 때문에 애플리케이션 (이러한 클러스터에 애드온을 생성하고 적용하는 백엔드 API)과 상호 작용해야합니다.
편집 : 최근 https://github.com/ericchiang/k8s를 발견했습니다 . 상위 수준에서 클라이언트 이동보다 사용이 훨씬 간단하지만이 동작을 지원하지는 않습니다.
^---$
코드에서 나누는 것이 어떻습니까?