레이블이 marshal인 게시물을 표시합니다. 모든 게시물 표시
레이블이 marshal인 게시물을 표시합니다. 모든 게시물 표시

k8s deployment or pod serialization

# golang 환경에서 k8s deployment(k8s.io/api/apps/v1 -> Deployment struct) 를 manifest(yaml)로 serialization 할때
# 일반적인 gopkg.in/yaml.v2 패키지를 사용시
yamlDeployment, err := yaml.Marshal(deployment)

# string(yamlDeployment) 결과를 보면
# 다음과 같이 cpu 리소스등의 값이 DecimalSI 포맷이라고만 나오고 정확한 값이 표시되지 않는다.
spec -> template -> spec -> containers -> resources
  limits:
    cpu:
      format: DecimalSI
  requests:
    cpu:
      format: DecimalSI

# pod 나 deployment 는 k8s apimachinery 패키지의 NewYAMLSerializer 를 사용하면 된다.
import k8sJson "k8s.io/apimachinery/pkg/runtime/serializer/json"

e := k8sJson.NewYAMLSerializer(k8sJson.DefaultMetaFactory, nil, nil)
yamlDeployment := new(bytes.Buffer)
err = e.Encode(deployment, yamlDeployment)

# yamlDeployment.String() 결과를 보면 다음과 같이 값이 잘 표시된다.
  limits:
    cpu: 2500m
  requests:
    cpu: "1"