주요 개념
Kubernetes Engine 서비스의 주요 개념은 다음과 같습니다.
클러스터
클러스터는 Kubernetes Engine의 기본 리소스로, 컨테이너 애플리케이션을 포함한 모든 Kubernetes 객체가 클러스터에서 실행됩니다. Kubernetes Engine에서 제공하는 클러스터는 고가용성이 보장된 형태로, 카카오클라우드가 관리하는 VPC에 배포되어 관리되는 제어 영역(Control Plane)과 사용자의 VPC에 배포되어 사용자가 직접 관리할 수 있는 노드로 구성되어 있습니다. Kubernetes Engine의 클러스터 아키텍처는 다음과 같습니다.
클러스터 아키텍처
제어 영역
제어 영역은 클러스터를 관리하는 마스터 노드로 클러스터의 통합 엔드포인트 역할을 합니다. 클러스터와의 모든 상호작용은 제어 영역에 있는 Kubernetes API 서버에서 API를 호출하여 이루어집니다. HTTP, gRPC 프로토콜 혹은 Kubernetes 커맨드 라인 도구(kubectl)에서 명령어를 실행하거나, 콘솔 UI를 활용해 Kubernetes API 서버와 통신하여 클러스터를 관리할 수 있습니다. 클러스터의 제어 영역은 카카오클라우드가 관리하는 VPC에 배포되어 관리되며, 사용자에게는 엔드포인트만 노출됩니다.
노드
컨테이너 애플리케이션이 실행되는 서버를 노드 혹은 워커 노드라고 합니다. 클러스터는 하나 이상의 노드로 구성되며, 이 노드는 Virtual Machine 서비스에서 제공되는 VM 인스턴스입니다. Kubernetes Engine 서비스에서 클러스터를 생성할 때 사용자는 직접 노드 풀을 만들 수 있습니다. 이때 생성된 노드 풀의 조건에 따라 노드가 자동으로 생성되며, 개별 노드는 사용자가 지정한 VPC의 특정 서브넷에서 실행됩니다.
노드는 컨테이너 애플리케이션을 실행하는데 필요한 리소스와 서비스를 지원하며, 클러스터의 워커 노드 역할을 수행하는 데 필요한 쿠버네티스 노드 에이전트(kubelet)가 포함됩니다. 쿠버네티스 노드 에이전트(kubelet)는 제어 영역과 통신하여 제어 영역이 노드에 컨테이너 스케줄링을 할 수 있도록 합니다.
노드 풀
노드 풀은 동일한 인스턴스 유형을 가지는 노드 그룹이며, Kubernetes Engine에서는 노드를 노드 풀 단위로 관리합니다. 클러스터를 만들 때 생성하는 노드 풀이 최초의 노드 풀이 됩니다. 이후 다른 인스턴스 유형을 가지는 추가 노드 풀을 클러스터에 추가할 수 있습니다. 노드 풀의 각 노드에는 노드 풀의 이름을 값으로 가지는 kakaoi.io/kke-nodepool이라는 Kubernetes 노드 레이블이 설정되어 있습니다.
- 노드 풀 설정에서 노드 수를 조절하여 클러스터에서의 노드 풀 크기를 조절할 수 있으며, 노드 풀에서 특정 노드만 삭제하는 것은 불가능합니다.
- 초기 노드 풀 생성 시 클러스터에 설정된 최신 Kubernetes 버전을 선택합니다. 이후 사용자는 각 노드 풀을 독립적으로 업데이트하고 관리할 수 있습니다.
CNI
Kubernetes Engine에서 사용할 수 있는 CNI (Container Network Interface)를 지원합니다. CNI는 Kubernetes 네트워크 통신을 담당하는 표준 인터페이스로, 클러스터에서 실행 중인 노드와 파드 네트워크의 구성 및 통신을 관리합니다. 카카오클라우드의 Kubernetes Engine은 Calico
와 Cilium
CNI 플러그인을 지원하며, 클러스터 생성 시 선택한 CNI 플러그인이 클러스터와 함께 설치됩니다. CNI 플러그인을 직접 선택할 수 있어 네트워크를 사용자의 서비스 환경에 맞게 더욱 효율적으로 이용할 수 있습니다.
클러스터에서 사용하는 CNI는 최초 생성 이후 변경할 수 없습니다.
IAM 역할 관리
Kubernetes Engine의 IAM 역할 관리는 역할 기반 액세스 제어(Role-Based Access Control, RBAC)를 따르며, IAM의 프로젝트 역할과 연계하여 클러스터 리소스를 관리합니다. 따라서 프로젝트 내 권한을 가진 사용자는 프로젝트와 프로젝트 내 클러스터 리소스를 관리할 수 있습니다. 제품 내 모든 리소스는 프로젝트 하위로 생성되어 관리됩니다. 프로젝트 권한은 프로젝트 관리자(Admin), 프로젝트 멤버(Member), 프로젝트 리더(Reader) 로 구분되며, 프로젝트 권한이 있는 사용자는 하위의 모든 리소스를 생성하고 관리할 수 있습니다.
IAM 권한 | 프로젝트 관리자(Admin) | 프로젝트 멤버(Member) | 프로젝트 리더(Reader) |
---|---|---|---|
프로젝트 멤버 관리 | ✓ | ||
클러스터 생성 | ✓ | ✓ | |
클러스터 삭제 | ✓ | ✓ | |
클러스터 설정 | ✓ | ✓ | |
클러스터 조회 | ✓ | ✓ | ✓ |
노드 풀 추가 | ✓ | ✓ | |
노드 풀 삭제 | ✓ | ✓ | |
노드 풀 설정 | ✓ | ✓ | |
노드 풀 조회 | ✓ | ✓ | ✓ |
노드 삭제 | ✓ | ✓ | |
노드 조회 | ✓ | ✓ | ✓ |
Kubernetes RBAC
Kubernetes는 클러스터 내에서 세분화된 역할을 만들 수 있는 RBAC 지원 기능을 지원하며, Kubernetes Engine에서도 이 기능을 사용할 수 있습니다. Kubernetes RBAC에 대한 자세한 설명은 Kubernetes 레퍼런스에서 확인하시기 바랍니다.
리소스 상태 정보
Kubernetes Engine에서 상태를 확인할 수 있는 리소스는 클러스터, 노드 풀, 노드입니다. 리소스별 상태 정보는 다음과 같습니다.
클러스터 생명주기 및 상태
클러스터의 생명주기
클러스터 상태 | 설명 |
---|---|
Provisioned | 클러스터 프로비저닝 완료 |
Pending | 클러스터 프로비저닝 준비 중 |
Provisioning | 클러스터 프로비저닝 중 |
Deleting | 클러스터 삭제 중 |
Failed | 사용자의 개입이 필요한 실패 상태 |
노드 풀 생명주기 및 상태
노드 풀 생명주기
노드 풀 상태 | 설명 |
---|---|
Running | 노드 풀 정상 실행 중 (노드 상태와는 무관) |
Running (Scheduling Disable) | 노드 풀의 모든 노드가 스케줄링 차단된 상태 |
Updating | 노드 풀 설정 변경 중 |
ScalingUp | 노드 개수 확장 중 |
ScalingDown | 노드 개수 축소 중 |
Deleting | 노드 풀 삭제 중 |
Failed | 사용자의 개입이 필요한 실패 상태 |
노드 생명주기 및 상태
노드 생명주기
노드 상태 | 설명 |
---|---|
Running | 노드가 준비되어 실행 중 |
Running (Scheduling Disable) | 해당 노드로 신규 스케줄링 차단된 상태 (이미 할당되어 실행 중인 파드와는 무관) |
Provisioned | 노드 프로비저닝 완료 |
Deleted | 노드 삭제 완료 |
Pending | 노드 프로비저닝 준비 중 |
Provisioning | 노드 프로비저닝 중 |
Deleting | 노드 삭제 중 |
Failed | 사용자의 개입이 필요한 실패 상태 |
클러스터/노드 풀 생성 시 자동 생성 리소스
Kubernetes Engine에서 클러스터 혹은 노드 풀 생성 시 리소스는 자동 생성됩니다. 클러스터 삭제 시 리소스도 같이 삭제됩니다.
클러스터/노드 풀 생성 시 자동 생성 리소스
유형 | 설명 |
---|---|
인스턴스 | 노드로 사용되는 VM 인스턴스 |
볼륨 | 노드로 사용되는 VM 인스턴스에서 사용하거나 NFS Client Provisioner로 생성한 모든 볼륨 |
보안 그룹 | 노드에 적용되는 보안 그룹 |
자동 생성된 리소스(인스턴스, 볼륨, 보안 그룹)는 이름 변경, 삭제 등의 설정 정보를 변경할 수 없습니다. 관련 리소스의 정보가 변경되면 Kubernetes Engine 서비스가 정상적으로 제공되기 어려우니, 주의하시기 바랍니다.
지원 정보
Kubernetes Engine 서비스에서는 최신 Kubernetes 버전을 안정화 및 테스트 후 업데이트를 제공합니다.
지원 Kubernetes 버전
Kubernetes Engine은 최신 Kubernetes 버전을 안정화 및 테스트 후 제공합니다. 최신 버전 출시 시 클러스터 업데이트를 참고하여 업데이트하시기 바랍니다.
Kubernetes 버전 | Kubernetes Engine 지원 시작일 | 클러스터 신규 생성 | 생성된 클러스터 사용 |
---|---|---|---|
1.28 | 2024년 5월 28일 | 가능 | 가능 |
1.27 | 2024년 3월 18일 | 가능 | 가능 |
1.26 | 2023년 8월 16일 | 가능 | 가능 |
1.25 | 2023년 8월 16일 | 불가능 | 가능 |
1.24 | 2023년 2월 1일 | 불가능 | 가능 |
1.23 | 2022년 7월 7일 | 불가능 | 가능 |
1.22 | 2022년 7월 7일 | 불가능 | 가능 |
지원 노드 이미지
Kubernetes Engine에서 제공하는 워커 노드 이미지는 Ubuntu 기반이며, Kubernetes 버전에 최적화된 OS 이미지를 제공합니다. 최신 노드 이미지 출시 시 노드 업데이트를 참고하여 노드 이미지를 업데이트하시기 바랍니다.
지원 인스턴스
Kubernetes Engine에서 노드로 사용할 수 있는 인스턴스는 Virtual Machine 서비스에서 제공하는 인스턴스 유형과 동일합니다. 인스턴스 유형에 대한 자세한 설명은 인스턴스 유형을 참고하시기 바랍니다.