Cloud/k8s-CKAD

[CKAD] k8s API 버전 체계

jinkwon.kim 2024. 10. 17. 00:11
728x90
반응형

개요

k8s에서의 API 버전 체계를 알아보겠습니다. 

버전의 종류 

 

GA( General Availability)(v1, v2)

GA( General Availability) 는완전한 안정성과 호환성을 제공하며, 프로덕션에서 사용하도록 권장.

Alpha (vXalphaY)

  • 초기 실험 단계로, 불안정하고 큰 변경 가능성이 있으므로 프로덕션에서 사용하지 않는 것이 좋음.
  • 새로운 Alpha 버전이 나오거나 Beta이 나오면 이번 Alpha 버전은 삭제됩니다. 

Beta (vXbetaY)

  • 상당히 안정적이지만, 여전히 일부 변경이 가능하며 프로덕션 환경에서 테스트 목적으로 사용할 수 있음.
  • 새로운 버전이 나오면 이전 버전은 Deprecated 됩니다. 
    • Beta API 버전은 도입 후 9개월 또는 3개의 minor release(둘 중 더 긴 기간) 이후에는 더 이상 제공되지 않습니다.

버전별 특징 비교 

Category Alpha (vXalphaY, eg: v1alpha1) Beta (vXbetaY, eg: v1beta1) GA (Stable) (vX, eg: v1)
Enabled No. Can enable via flags Yes by default Yes by default
Tests May lack e2e tests Has e2e tests Has conformance tests
Reliability May have bugs May have minor bugs Highly reliable
Support No commitment, may be dropped later Commits to complete the feature and move to GA Will be present in many future releases
Audience Expert users interested in giving early feedback Users interested in beta testing and providing feedback All users

Preferred Version

특 정 API 그룹 내에서 기본적으로 사용하는 API 버전을 의미합니다.

API resource에는 여러 가지 버전이 있을 수 있으며, Preferred Version은 그 중에서 Kubernetes가 해당 API 그룹에서 기본적으로 사용할 가장 안정적이고 권장되는 버전입니다.

 

Storage Version

etcd에 저장되는 특정 API 리소스의 스키마 버전을 의미합니다. Kubernetes에서 API resource는 다양한 version으로 제공될 수 있지만, etcd와 같은 backend storage에 저장될 때는 항상 하나의 version으로 저장됩니다. 이 저장되는 버전이 바로 Storage Version입니다.

예를 들어 Storage Version이 v1로 설정되어 있으면, client가 v1alpha1 또는 v1beta1 등의 다른 version으로 resource를 생성하거나 update하더라도, etcd에는 v1 형식으로 변환되어 저장됩니다.

즉, API Server는 client가 요청한 version과 상관없이, resource를 Storage Version인 v1 버전으로 변환하여 etcd에 저장합니다. 그리고 나중에 client가 v1alpha1, v1beta1, v1 등의 특정 version으로 요청하면, 해당 요청 version에 맞게 데이터를 변환하여 반환합니다. 하지만 실제로 etcd에 저장된 데이터는 Storage Version에 일관되게 맞춰져 있습니다.

이러한 규칙으로 인해서 지정된 Storage Version에 의해서 resoucer data가 일관성 있게 etcd에 저장됩니다.

API Groups enabling/disabling 하는 법

kube-apiserver 의 --runtime-config 옵션에 사용할 버전을 추가합니다. 

추가는 , 를 사용하여 구분이 가능합니다. 언제 사용하느냐면 alpha  버전을 사용하고 싶을때 사용합니다.

API Deprecations policy

https://kubernetes.io/docs/reference/using-api/deprecation-policy/

 

Kubernetes Deprecation Policy

This document details the deprecation policy for various facets of the system. Kubernetes is a large system with many components and many contributors. As with any such software, the feature set naturally evolves over time, and sometimes a feature may need

kubernetes.io

버전 Deprecation 과정 설명

GA : 안정 버전이 나올때 까지 Deprecated 되지 않음.

Beta : 3개의 Release까지만 존재함

Alpah : 새로운 버전 나오면 이전 버전은 삭제됨.

API Version Converting 방법

설치

kubectl convert는 특정 Kubernetes 리소스의 매니페스트를 다른 API 버전으로 변환하는 데 사용되며, 새로운 버전의 Kubernetes에서는 공식 플러그인으로 제공됩니다.

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-convert-plugin

 

Install and Set Up kubectl on Linux

Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.31 client can communicate with v1.30, v1.31, and v1.32 control planes. Using the latest compatible version of kubectl helps avoid

kubernetes.io

#curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert"

#sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert

사용법

kubectl convert -f <old-file> --output-version <new-api>

Ex) kubectl convert -f nginx.yaml --output-version apps/v1

728x90
반응형

'Cloud > k8s-CKAD' 카테고리의 다른 글

[CKAD] 시험 미흡 사항  (2) 2024.11.03
[CKAD] Custom Resource Definitions(CRD)  (1) 2024.10.29
[CKAD] Admission Controller  (1) 2024.10.16
[CKAD] Statefulset 과 Headless Service  (0) 2024.10.09
[CKAD] Network Policy  (0) 2024.10.03