2017-04-18 2 views
1

저는 비교적 golang에 익숙하며 올바른 방향을 가리키는 도움이 필요합니다.Kubernetes API 유형 선언에 대한 유형을 선언 할 수 없습니다.

새로운 Deployment 유형을 선언하려고합니다. 내가 좋아 배포 개체를 만들려고 할 때

import (
    "encoding/json" 
    "fmt" 
    yaml "gopkg.in/yaml.v2" 
    "io/ioutil" 
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 
    "k8s.io/kubernetes/pkg/api/v1" 
    "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" 
) 

:

내 수입과 같이 의미가 있습니다

test := v1beta1.Deployment{ 
    Spec: v1beta1.DeploymentSpec{ 
     Template: v1.PodTemplateSpec{ 
     Spec: v1.PodSpec{ 
      Containers: []v1.Container{{ 
      Name: "test", 
      Image: "image_url", 
      }, 
      }, 
     }, 
     }, 
    }, 
    } 

하지만, 어떤 반환 배포 개체는 Kind이 없습니다 객체 식별에 필요합니다.

https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/extensions/types.go#L162

에 따르면 내가 필요로하는 Kind 개체가 포함 된 metav1.TypeMeta있다. (참고 : https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/types.go#L38)

나는 구조체 문자 등의 metav1.TypeMeta 선언 시도 :

test := v1beta1.Deployment{ 
    metav1.TypeMeta: metav1.TypeMeta{Kind: "Deployment"} 
    Spec: v1beta1.DeploymentSpec{ 
     Template: v1.PodTemplateSpec{ 
     Spec: v1.PodSpec{ 
      Containers: []v1.Container{{ 
      Name: "test", 
      Image: "image_url", 
      }, 
      }, 
     }, 
     }, 
    }, 
    } 

을하지만 나는

을 얻을 unknown field '"k8s.io/apimachinery/pkg/apis/meta/v1".TypeMeta' in struct literal of type v1beta1.Deployment

나는 그것이에서 metav1.TypeMeta 선언으로 인해 의심 Deployment struct는 안 export 된 필드입니다.

종류를 어떻게 선언해야합니까?

답변

0

내장 된 구조체를 사용할 때 키는 일반적으로 패키지가없는 유형 이름입니다. 이처럼 TypeMeta를 선언 할 수

test := v1beta1.Deployment{ 
    TypeMeta: metav1.TypeMeta{ 
    APIVersion: "apps/v1beta1", 
    Kind: "Deployment", 
    }, 
} 

을하지만, 수동으로 보통 필요한 모든는 Kubernetes의 API 개체의 TypeMeta을 설정하면 이러한 개체 자신을 (예를 들어, YAML 파일을 생성하기 위해) 계속하려는 경우.

Kubernetes 클라이언트 API (예 : k8s.io/client-go 패키지 사용)를 사용하여 API 서버와 통신 할 때 TypeMeta 속성은 필요하지 않습니다. 모든 API 작업은 강력하게 입력되므로 메타 데이터를 안전하게 유추 할 수 있습니다. 결국, v1beta1.Deployment 구조체의 API 버전 및 종류가 분명해야하고 클라이언트 라이브러리에 분명해야합니다.

+0

클라이언트 검색을 사용하여 리소스를 가져오고 일부 스위치 결정에 "종류"를 사용해야하지만 검색된 객체에서 종류가 비어 있습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? –

관련 문제