Kubernetes/Udemy - CKAD with Tests

API Versions

비번변경 2022. 1. 14. 14:37

각 API Group의 버전은 크게 세 가지 버전이 존재하며 그 종류는 아래와 같다.

 

버전

/v1alpha1 : alpha

개발 후 Kubernetes에 처음으로 release 된 API다.

테스트 부족으로 치명적인 버그가 존재할 수 있다. 예고 없이 삭제될 수 있으며 이후 release에서 사용할 수 있다는 보장 자체가 없다. 기본적으로 활성화되지 않아 사용을 위해서는 내부적으로 활성화가 필요하다. API Group 테스트 및 피드백에 관심이 있는 사용자를 위한 API다.

/v1beta1 : beta

alpha 버전의 주요 버그 수정 및 end to end 테스트가 완료된 API 버전이다.

/v1으로 이동될 가능성이 존재해 기본적으로 활성화되어 있으나, 마이너한 버그는 여전히 존재할 수 있기 때문에 피드백을 제공하는 베타테스터를 위한 API라고 홀 수 있다.

/v1 : GA, Stable

몇 달 동한 beta 버전에서 몇 가지 release를 거친 버전으로 대부분의 버그가 수정되어 있어 아주 안정적이다.

모든 사용자를 위한 API로, 기본적으로 활성화되어 있으며 앞으로 출시될 많은 release에서 지원한다.

 

Preferred Version

Kubernetes 클러스터는 하나의 API Group에 대해 여러 버전을 지원할 수 있다. 다만 API에서 사용하는 버전은 한 가지 버전이며, 이것을 Preferred Version이라고 한다.

한 가지 API Version만을 Preferred Version으로 설정할 수 있다.

 

preferred Version 확인 방법

- manifest 문서 조회

kubectl explain <RESOURCE>

# 예시
kubectl explain deployment

kubectl explain &lt;RESOURCE&gt;

- curl로 API를 호출

curl https://kube-apiserver/apigroup

# 예시
curl https://127.0.0.1:8081/apis/batch
{
	"kind": "APIGroup",
	"apiVersion": "v1",
	"name": "batch",
	"versions": [
		{
			"groupVersion": "batch/v1"
			"version": "v1"
		},
		{
			"groupVersion": "batch/v1beta1"
			"version": "v1beta1"
		}
	],
	"preferredVersion": {
		"groupVersion": "batch/v1".
		"version": "v1"
	}
}

 

Storage Version

yaml 파일 내 지정 버전 또는 API 사용 버전과 관계 없이 객체가 ETCD에 저장될 때 사용하는 버전

Storage Version이 아닌 다른 버전으로 개체가 생성되는 경우 ETCD에 개체가 저장되기 전에 Storage Version으로 변환되어 저장된다.

 

Storage Version 버전 확인 방법

특정 API의 Storage Version을 API 또는 명령어를 통해 확인할 방법은 없다.

ETCD에 쿼리를 수행하여 저장된 개체 정보를 봐야 한다.

ETCDCTL_API=3 etcdctl
	--endpoints=https://[127.0.0.1]:2379
    --cacert=/etc/kubernetes/pki/etcd/ca.crt
    --cert=/etc/kubernetes/pki/etcd/server.crt
    --key=/etc/kubernetes/pki/etcd/server.key
    get "/registry/deployments/default/blue" --print-value-only

 

API alpha 버전 활성화

alpha 버전은 기본적으로 활성화되지 않기 때문에 클러스터 내에서 사용하기 위해서는 별도로 활성화가 필요하다.

kube-apiserver.service의 --runtime-config 옵션에 사용할 api를 추가하여 활성화하도록 한다.

ExecStart=/usr/local/bin/kube-apiserver \\
 --advertise-address=${INTERNAL_IP} \\
 --allow-privileged=true \\
 --apiserver-count=3 \\
 --authorization-mode=Node,RBAC \\
 --bind-address=0.0.0.0 \\
 --enable-swagger-ui=true \\
 --etcd-servers=https://192.168.5.11:2379,https://192.168.5.12:2379 \\
 --event-ttl=1h \\
 --runtime-config=api/all \\
 --service-cluster-ip-range=10.96.0.0/24 \\
 --service-node-port-range=30000-32767 \\
 --v=2
 --basic-auth-file=<FILENAME>

 


참고 문서

https://madhuakula.com/content/attacking-and-auditing-docker-containers-and-kubernetes-clusters/kubernetes-101/kubectl.html