-
Notifications
You must be signed in to change notification settings - Fork 47
Provider Managed Kubernetes and Driver API
- CB-Spider PMKS(Provider Managed Kubernetes) Specification V0.6
- CB-Spider는 연동 대상 클라우드(CSP)가 제공하는 관리형 Kubernetes(Provider Managed K8S 또는 Managed K8S)를
- 동일한 인터페이스를 사용하여 제어할 수 있는 Cluster(Kubernetes Cluster 또는 PMKS Cluster) 제어 기능을 제공한다.
- K8S가 필요한 CB-Spider 사용자(인프라 관리자 또는 서비스 개발자)는 아래 그림과 같이,
- ① CB-Spider 인터페이스를 활용하여 동일한 방법으로
- 원하는 대상 클라우드에 K8S 인스턴스 생성을 요청할 수 있다.
- ② 사용자의 요청은 Spider의 대상 연동 드라이버를 통해서
- 대상 클라우드의 API를 호출하여 대상 클라우드의 관리형 K8S 인스턴스가 생성된다.
- ③ 사용자는 생성된 K8S에 대하여 K8S CLI(kubectl) 또는 API 등의 풍부한 K8S 인터페이스를 사용하여
- 사용자의 워크로드를 배포 및 관리할 수 있다.
- 또한, Lens 및 Kubesphere와 같은 K8S IDE에 연동하여 생성된 K8S의 기능을 편리하게 활용할 수도 있다.
- ① CB-Spider 인터페이스를 활용하여 동일한 방법으로
[CB-Spider PMKS Overview]
- 사용자에 의해 생성된 하나의 PMKS 인스턴스는 아래 그림에서 보는 바와 같이 Cluster라고 한다.
- Cluster는 크게 Control plane, Node Group, Addons 및 Endpoint로 구성된다.
[CB-Spider PMKS Components]
-
컴포넌트별 세부 내용은 다음과 같다.
- 컨트롤 플레인은 Cluster의 전체 동작 및 실행을 관장하는 마스터로서의 역할을 담당하는 컴포넌트들의 모임이며, - 관리형 K8S의 경우에는 컨트롤 플레인의 관리 주체는 CSP의 Cloud 플랫폼(CloudOS)이며, - CSP 사용자(=CB-Spider 사용자)는 상태 확인 및 제어를 할 수 없다. - 참고로, Control plane은 kube-apiserver, etcd, kube-scheduler 및 kube-controller-manager, Cloud Controller Manager 등으로 구성된다.
- 하나의 노드 그룹은 동일한 이미지와 규격으로 생성된 VM들로 구성되며, - 하나의 Cluster는 서로 다른 종류의 여러 개의 노드 그룹을 포함할 수 있다. - 이와 같은 이질적인 노드 그룹 구성을 통하여 하나의 Cluster에서 다양한 종류의 워크로드의 실행 설정이 가능하다. - 참고로, Node(=VM)은 컨트롤 플레인과의 협업 및 실제 Pod의 실행 처리 등을 위하여 kubelet, kube-proxy 및 Container runtime 등을 포함한다.
- 에드온은 CNI, DNS 및 Container Resource Monitoring 등으로 - Cluster 수준의 기능을 제공하는 컴포넌트다. - 다양한 에드온들이 존재하며, 선택적으로 구성하여 활용할 수 있다.
- 외부에서 Cluster에 접근할 수 있는 URL을 제공한다.
- Cluster 생성과 NodeGroup 추가 순서에 따라 다음과 같이 2가지 타입으로 구분된다.
-
- 대상 CSP: AWS, Alibaba, Tencent 등
-
- 대상 CSP: Azure, GCP, IBM, NHN 등
- 참고: CSP별 특징 및 제약 사항은 다음 참고
- https://docs.google.com/spreadsheets/d/1mPmfnfmyszYimVzplZMzsqO3WsBmOdes/edit#gid=1299745060
- 참고: 노드 그룹 OS로 선택 가능한 이미지 목록
- Tencent: 다음 목록에서
OS Name
을 ImageId로 설정
- Tencent: 다음 목록에서
- 제공 기능: Cluster 생성/삭제, NodeGroup 추가/삭제, Kubeconfig 제공 및 OpenLens 연동(=kubectl 활용 가능) ----- 현재 배포 기능
- 검증 필요 기능: AutoScaling 설정 변경, Upgrade (전체 또는 일부 CSP 지원, 전체 검증 필요한 기능)
- 추후 제공 고려: Addons(구현 안됨)
- (1) CSP별 Version, VMSpec 등의 입력 설정 값은 AdminWeb 초기 설정 값으로 Cluster 및 NodeGroup 생성
- (2) Kubeconfig OpenLens 등록 및 연동 확인
CSP (test region) |
AdminWeb 통합 시험 | KubeConfig: OpenLens 연동 시험 | 특이사항 |
---|---|---|---|
AWS (us-east2) |
O | O | * Type-I Cluster * 관련 Role 설정 필요 * 서로 다른 Zone의 2개 이상 Subnet 필요 |
Azure (northeurope) |
O | O | * Type-II Cluster * 관련 Role 설정 필요 * Subnet CIDR 조건: 333 Address 이상 • /24 =256개,/23 =510개 |
GCP (us-central1) |
O | O | * Type-II Cluster * GCP Note 참고 |
Alibaba (cn-beijing) |
O | O | * Type-I Cluster |
Tencent (ap-seoul) |
O | O | * Type-I Cluster * 관련 Role 설정 필요 |
NHNCloud (KR1) |
O | O | * Type-II Cluster |
IBM | - | - | * Type-II Cluster * 추후 통합 예정(Driver 1차 개발 완료) |
※ GCP Note: OpenLens, kubectl 등에서 Kubeconfig 활용한 외부 접근 시 참고
- gcloud 및 gke-gcloud-auth-plugin 사전 설치 필요
- OpenLens 설치 이후 설치 시에는 System Reboot 필요
- Swagger UI: Cluster Management 참고
- ※ CSP별 Custer 생성 및 NodeGroup 생성 시 필요 인자는 AdminWeb 관련 default 설정 값 참고
-
PMKS Driver API는 Async 호출 방식으로 제공
- 예시) CSP Create API 호출 후 Running 상태 기다림 없이 Driver API도 반환
-
Zonal vs Regional 관련 선택 옵션 제공하는 경우
- 현재는 Zonal로 설정, Zone 값은 Connection에서 획득 후 적용
-
Cluster 생성과 NodeGroup 추가 관련
- Type-I: Cluster 생성 후 NodeGroup 별도 추가/삭제
- 대상 CSP: AWS, Alibaba, Tencent 등
- Type-II: 최초 Cluster 생성시 최소 1개 이상의 NodeGroup을 함께 생성
- 이후 NodeGroup 추가/삭제 가능
- 대상 CSP: Azure, GCP, IBM, NHN 등
- Type-I: Cluster 생성 후 NodeGroup 별도 추가/삭제
-
Version 관련
- 1.21(AWS), 1.21.6-gke.1500(GCP), v1.23.3(NHN) 등 CSP별로 차이가 있음
- Driver는 "" 또는 "default"를 수신하면, CSP가 default 버전으로 생성하는 처리 지원하면 default 생성 처리,
- 제공하지 않는 경우는 현 시점의 대상 CSP Web Console 기준 default 값으로 생성
-
버전 값을 입력 받으면-현재: 1.23.3 형식으로 입력 받음, driver에서는 1.23.3 정보에서 유효한 정보를 파싱 후 활용,그 외 정보는 CSP의 default에 가까운 값으로 설정
- GCP: Region별 제공 버전이 다름
- 2022/12/08: 일단,
default("" or "default")
만 제공
- 2022/12/08: 일단,
-
PMKS는 VPC 의존적이다. 즉, 특정 VPC에 소속되는 관리형 K8S를 생성 및 구성할 수 있다.
-
사용자는 PMKS 생성 요청 전에 필요한 VPC/Subnet 및 Security Group을 적절하게 생성 하여 인자로 함께 호출함을 가정한다.
- AWS의 경우 사전에 Role의 생성이 필요하며, 현재는 role 이름을 다음 이름으로 일치 시킨다.(추후 필요시 개선)
- Cluster: cloud-barista-spider-eks-cluster-role
- NodeGroup: cloud-barista-spider-eks-nodegroup-role
- 추가로 사전 생성이 필요한 자원이 있는 CSP는 상단 링크의 이슈에 현황을 공유 부탁드립니다.
- AWS의 경우 사전에 Role의 생성이 필요하며, 현재는 role 이름을 다음 이름으로 일치 시킨다.(추후 필요시 개선)
-
IP Address Family의 경우 Driver 내부에서 IPv4로 설정한다. (IPv6 필요시 추후 고려)
-
공통 API에서 제공되지 않는 설정일 경우는 상단 링크의 이슈에 현황을 공유하고,
- Driver 내에서 기본 값(최신 버전 등 가급적 CSP의 default 값 활용)으로 설정 처리해 주시기 바랍니다. (추후 개선)
- 예시) AWS에서 kube-proxy version 값 등
-
NodeGroup의 Node(VM) 제공 정보 범위
- IID(SystemId만 포함) 목록만 반환
-
Cluster Access 정보 제공
- Endpoint URL 제공
- Kubeconfig 정보 제공
-
Addons 설정 관련: cni, dns 등 설정 API 존재시 이슈 공유 및 현재는 default 설정, 추후 재고려
-
Upgrade Cluster: Cluster Version을 업그레이드한다.
-
PMKS는 주로 공통 API를 이용한 Cluster 관리 중심의 제어 기능을 제공하며,
- 사용자는 Addon 설치/관리, Workload deploy 및 모니터링이나 Taint, Tag, Label 설정 등과 같은
- K8S 활용 자체는 K8S kubectl과 K8S 인터페이스 또는 Lens와 같은 Third party 지원 도구를 활용한다.
-
Tag, Key-Value 기록 규칙
- CSP가 제공하지 않는 정보 기록이 필요하여,
- Tagging이나 Description에 기록이 필요한 경우
- 가급적 다음 규칙을 따른다.
-
그 외에 대상 CSP Driver 개발시 부족한 부분이 있으시면 이슈에 공유 부탁 드립니다.
-
Source Tree
$tree cb-spider/cloud-control-manager/cloud-driver/interfaces/ cb-spider/cloud-control-manager/cloud-driver/interfaces/ |-- CloudDriver.go |-- README.md |-- connect | `-- CloudConnect.go `-- resources |-- AnyCallHandler.go |-- ClusterHandler.go <======================= PMKS Driver API |-- DiskHandler.go |-- IId.go |-- ImageHandler.go |-- KeyPairHandler.go |-- KeyValue.go |-- MyImageHandler.go |-- NLBHandler.go |-- SecurityHandler.go |-- VMHandler.go |-- VMSpecHandler.go `-- VPCHandler.go
-
Driver API Spec (latest)
package resources import "time" // -------- Const type ClusterStatus string const ( ClusterCreating ClusterStatus = "Creating" ClusterActive ClusterStatus = "Active" ClusterInactive ClusterStatus = "Inactive" ClusterUpdating ClusterStatus = "Updating" ClusterDeleting ClusterStatus = "Deleting" ) type NodeGroupStatus string const ( NodeGroupCreating NodeGroupStatus = "Creating" NodeGroupActive NodeGroupStatus = "Active" NodeGroupInactive NodeGroupStatus = "Inactive" NodeGroupUpdating NodeGroupStatus = "Updating" NodeGroupDeleting NodeGroupStatus = "Deleting" ) // -------- Info Structure type ClusterInfo struct { IId IID // {NameId, SystemId} Version string // Kubernetes Version, ex) 1.23.3 Network NetworkInfo // --- NodeGroupList []NodeGroupInfo AccessInfo AccessInfo Addons AddonsInfo Status ClusterStatus CreatedTime time.Time KeyValueList []KeyValue } type NetworkInfo struct { VpcIID IID // {NameId, SystemId} SubnetIIDs []IID SecurityGroupIIDs []IID // --- KeyValueList []KeyValue } type NodeGroupInfo struct { IId IID // {NameId, SystemId} // VM config. ImageIID IID VMSpecName string RootDiskType string // "SSD(gp2)", "Premium SSD", ... RootDiskSize string // "", "default", "50", "1000" (GB) KeyPairIID IID // Scaling config. OnAutoScaling bool // default: true DesiredNodeSize int MinNodeSize int MaxNodeSize int // --- Status NodeGroupStatus Nodes []IID KeyValueList []KeyValue } type AccessInfo struct { Endpoint string // ex) https://1.2.3.4:6443 Kubeconfig string } // CNI, DNS, .... @todo type AddonsInfo struct { KeyValueList []KeyValue } // -------- Cluster API type ClusterHandler interface { //------ Cluster Management CreateCluster(clusterReqInfo ClusterInfo) (ClusterInfo, error) ListCluster() ([]*ClusterInfo, error) GetCluster(clusterIID IID) (ClusterInfo, error) DeleteCluster(clusterIID IID) (bool, error) //------ NodeGroup Management AddNodeGroup(clusterIID IID, nodeGroupReqInfo NodeGroupInfo) (NodeGroupInfo, error) SetNodeGroupAutoScaling(clusterIID IID, nodeGroupIID IID, on bool) (bool, error) ChangeNodeGroupScaling(clusterIID IID, nodeGroupIID IID, DesiredNodeSize int, MinNodeSize int, MaxNodeSize int) (NodeGroupInfo, error) RemoveNodeGroup(clusterIID IID, nodeGroupIID IID) (bool, error) //------ Upgrade K8S UpgradeCluster(clusterIID IID, newVersion string) (ClusterInfo, error) }
- V0.5 => V0.6
- CB-Spider Cluster 제공 현황 추가
- V0.4 => V0.5
- ClusterInfo.AccessInfo 추가
- V0.3 => V0.4
- 불필요 API 삭제 (#794)
- 삭제 API: ListNodeGroup(), GetNodeGroup()
- V0.2 => V0.3
- Attribute Naming 규칙 반영 (#786)
- SubnetIID => SubnetIIDs
- NodeList => Nodes
- V0.1 => V0.2
- Cluster 생성시 default NodeGroup 동시 생성
- 독립적이던 NodeGroup 생성 및 관리를 특정 Cluster 하에서 관리
- NodeGroup Size 관리를 Autoscaling 방법으로만 제공
- NodeGroupHandler를 ClusterHandler 안으로 통합
- NodeGroup.Status 추가
- NodeGroup AutoScaling On/Off 설정 API 추가
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]