Kubernetes v1.32 미리보기

Jmnote (토론 | 기여)님의 2024년 11월 21일 (목) 01:15 판 (→‎Kubernetes에 LoadBalancer 동작 알리기)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
Kubernetes v1.32 sneak peek
Kubernetes v1.32 미리보기

Kubernetes v1.32 출시일이 다가오며, 프로젝트는 더욱 발전하고 성숙해지고 있습니다. 프로젝트의 전반적인 건강을 위해 기능이 사용 중단되거나 제거되거나 더 나은 기능으로 대체될 수 있습니다.

이 블로그는 Kubernetes v1.32 릴리스에서 계획된 몇 가지 변경사항을 소개합니다. 이는 Kubernetes 환경을 계속 유지관리하고 최신 변경사항을 따라잡기 위해 릴리스 팀이 주목해야 한다고 생각하는 사항입니다. 아래에 나열된 정보는 v1.32 릴리스의 현재 상태를 기반으로 하며, 실제 릴리스 날짜 전에 변경될 수 있습니다.

1 Kubernetes API 제거 및 사용 중단 프로세스

Kubernetes 프로젝트에는 잘 문서화된 기능 사용중단 정책이 있습니다. 이 정책에 따르면, 안정적인 API는 새롭고 안정적인 API 버전이 제공될 때에만 사용중단될 수 있으며, API는 안정성 수준에 따라 최소 수명의 기준이 있습니다.

  • 안정적인(GA) API 버전은 사용 중단될 수 있지만 Kubernetes의 주요 버전 내에서는 제거되지 않아야 합니다.
  • 베타 또는 사전 릴리스 API 버전은 사용 중단 후 3개 릴리스 동안 지원되어야 합니다.
  • 알파 또는 실험적 API 버전은 사전 사용 중단 공지 없이 제거될 수 있습니다.

API가 베타에서 안정적인 상태로 승격되었든 해당 API가 성공하지 못해 제거되었든, 모든 제거는 이 정책을 준수합니다. API가 제거될 때마다 사용중단 가이드에서 마이그레이션 옵션이 제공됩니다.

2 기존 DRA 구현의 제거에 대한 알림

개선사항 #3063은 Kubernetes 1.26에서 동적 리소스 할당(DRA)을 도입했습니다.

그러나 Kubernetes v1.32에서는 DRA에 대한 이 접근 방식이 상당히 변경됩니다. 원래 구현과 관련된 코드는 제거되고 KEP #4381이 "새로운" 기본 기능으로 남게 됩니다.

이 변경 결정은 클러스터 오토스케일링과의 비호환성 때문입니다. 자원 가용성이 투명하지 않아 Cluster Autoscaler와 컨트롤러의 의사 결정이 복잡해졌습니다. 새로운 Structured Parameter 모델이 기존 기능을 대체합니다.

이 제거로 인해 Kubernetes는 새로운 하드웨어 요구사항과 자원 요청을 예측 가능하게 처리할 수 있으며, kube-apiserver로의 복잡한 API 호출을 피할 수 있습니다.

자세한 내용은 개선사항 이슈 #3063을 참조하세요.

3 API 제거

Kubernetes v1.32에서 제거될 예정인 API는 다음과 같습니다:

  • FlowSchema와 PriorityLevelConfiguration의 flowcontrol.apiserver.k8s.io/v1beta3 API 버전이 제거됩니다. 이를 대비하려면 기존 매니페스트를 수정하고 클라이언트 소프트웨어를 flowcontrol.apiserver.k8s.io/v1 API 버전을 사용하도록 다시 작성하세요.

v1 버전은 v1.29부터 사용가능합니다. 모든 기존 객체는 새 API를 통해 액세스할 수 있습니다. flowcontrol.apiserver.k8s.io/v1beta3의 주요 변경사항은, PriorityLevelConfiguration의 spec.limited.nominalConcurrencyShares 필드가 지정되지 않은 경우 기본값 30으로 설정되고, 명시적 값 0인 경우 30으로 변경되지 않다는 것입니다.

추가 정보는 API 사용중단 가이드를 참조하세요.

4 Kubernetes v1.32의 주요 기능

다음은 v1.32 릴리스에 포함될 가능성이 높은 기능 목록입니다. 이는 최종 확정된 내용이 아니며, 릴리스 내용은 변경될 수 있습니다.

4.1 더욱 향상된 DRA!

이번 릴리스에서 이전 릴리스와 마찬가지로 Kubernetes 프로젝트는 Kubernetes 리소스 관리 시스템의 핵심 구성 요소인 동적 리소스 할당(DRA)에 대한 여러 가지 향상을 계속 제안합니다. 이러한 향상은 GPU, FPGA 및 네트워크 어댑터와 같은 특수 하드웨어가 필요한 워크로드에 대한 리소스 할당의 유연성과 효율성을 개선하는 것을 목표로 합니다. 이 릴리스에서는 KEP #4680에 설명된 대로 Pod 상태에 리소스 상태를 추가하는 것을 포함한 개선사항을 도입합니다.

4.2 Pod 상태에 리소스 상태 추가

Pod가 실패했거나 일시적으로 건강하지 않은 장치를 사용하는 경우를 아는 것은 쉽지 않습니다. KEP #4680은 Pod 상태를 통해 장치 상태를 노출하여 Pod 충돌 문제 해결을 더 쉽게 만드는 것을 제안합니다.

4.3 Windows가 돌아왔다!

KEP #4802는 Kubernetes 클러스터에서 Windows 노드의 우아한 종료에 대한 지원을 추가합니다. 이 릴리스 이전에 Kubernetes는 Linux 노드에 대한 우아한 노드 종료 기능을 제공했지만 Windows에 대한 동등한 지원이 부족했습니다. 이 개선 사항을 통해 Windows 노드의 kubelet이 시스템 종료 이벤트를 제대로 처리할 수 있습니다. 이를 통해 Windows 노드에서 실행 중인 Pod가 우아하게 종료되어 중단 없이 워크로드를 다시 예약할 수 있습니다. 이 개선 사항은 특히 계획된 유지 관리 또는 시스템 업데이트 중에 Windows 노드가 포함된 클러스터의 안정성과 신뢰성을 향상시킵니다.

4.4 환경변수에 특수문자 허용

개선사항이 베타로 전환되면서 Kubernetes는 이제 거의 모든 인쇄 가능한 ASCII 문자("=" 제외)를 환경변수 이름으로 사용할 수 있습니다. 이 변경사항은 이전에 변수 명명에 부과된 제한사항을 해결하여 다양한 애플리케이션 요구사항을 수용함으로써 Kubernetes를 보다 광범위하게 채택할 수 있도록 합니다. 완화된 검증은 RelaxedEnvironmentVariableValidation 기능 게이트를 통해 기본적으로 활성화되어 사용자가 엄격한 제약 없이 환경변수를 쉽게 활용할 수 있도록 보장하고 구성에 특수문자가 필요한 .NET Core와 같은 애플리케이션을 사용하는 개발자의 유연성을 향상시킵니다.

4.5 Kubernetes에 LoadBalancer 동작 알리기

KEP #1860은 GA로 전환하여 LoadBalancer 유형의 서비스에 대한 ipMode 필드를 도입합니다. 이 필드는 "VIP" 또는 "Proxy"로 설정할 수 있습니다. 이 개선사항은 클라우드 공급자 로드 밸런서가 kube-proxy와 상호작용하는 방식을 개선하는 것을 목표로 하며 최종 사용자에게 투명한 변경사항입니다. "VIP"를 사용할 때 kube-proxy의 기존 동작은 kube-proxy가 부하 분산을 처리하는 경우 유지됩니다. "Proxy"를 사용하면 트래픽이 부하 분산 장치로 직접 전송되어 클라우드 공급자가 kube-proxy에 의존하는 것을 더 잘 제어할 수 있습니다. 즉, 일부 클라우드 공급자의 경우 부하 분산 장치 성능이 향상될 수 있습니다.

4.6 리소스에 대한 이름 생성 재시도

개선사항generateName 필드로 생성된 Kubernetes 리소스에 대한 이름 충돌을 처리하는 방식을 개선합니다. 이전에는 이름 충돌이 발생하면 API 서버에서 409 HTTP 충돌 오류를 반환하고 클라이언트가 수동으로 요청을 재시도해야 했습니다. 이 업데이트를 사용하면 API 서버에서 충돌이 발생할 경우 최대 7회까지 새 이름 생성을 자동으로 재시도합니다. 이를 통해 충돌 가능성이 크게 줄어들어 충돌 가능성이 0.1% 미만인 최대 100만 개의 이름을 원활하게 생성할 수 있어 대규모 워크로드에 대한 복원력이 향상됩니다.

5 더 많은 정보를 원하십니까?

Kubernetes 릴리스 노트에서 새로운 기능과 사용중단에 대한 공지가 발표됩니다. 이 릴리스의 CHANGELOG의 일부로 Kubernetes v1.32의 새로운 기능을 공식적으로 발표합니다.

릴리스 노트에서 변경사항 발표를 확인할 수 있습니다.

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}