Provider Managed Kubernetes and Driver API - cloud-barista/cb-spider GitHub Wiki

PMKS(Provider Managed Kubernetes) and Driver API

- CB-Spider PMKS(Provider Managed Kubernetes) Specification V0.6

1. CB-Spider Kubernetes Cluster Overview

  • 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์˜ ๊ธฐ๋Šฅ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

2. CB-Spider PMKS Components

  • ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ•˜๋‚˜์˜ PMKS ์ธ์Šคํ„ด์Šค๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋Š” ๋ฐ”์™€ ๊ฐ™์ด Cluster๋ผ๊ณ  ํ•œ๋‹ค.
  • Cluster๋Š” ํฌ๊ฒŒ Control plane, Node Group, Addons ๋ฐ Endpoint๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋ณ„ ์„ธ๋ถ€ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    (1) ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane)

    - ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ Cluster์˜ ์ „์ฒด ๋™์ž‘ ๋ฐ ์‹คํ–‰์„ ๊ด€์žฅํ•˜๋Š” ๋งˆ์Šคํ„ฐ๋กœ์„œ์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๋ชจ์ž„์ด๋ฉฐ, 
    - ๊ด€๋ฆฌํ˜• K8S์˜ ๊ฒฝ์šฐ์—๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๊ด€๋ฆฌ ์ฃผ์ฒด๋Š” CSP์˜ Cloud ํ”Œ๋žซํผ(CloudOS)์ด๋ฉฐ,
    - CSP ์‚ฌ์šฉ์ž(=CB-Spider ์‚ฌ์šฉ์ž)๋Š” ์ƒํƒœ ํ™•์ธ ๋ฐ ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.
    - ์ฐธ๊ณ ๋กœ, Control plane์€ kube-apiserver, etcd, kube-scheduler ๋ฐ kube-controller-manager, Cloud Controller Manager ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 
    

    (2) ๋…ธ๋“œ ๊ทธ๋ฃน(Node Group)

    - ํ•˜๋‚˜์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์€ ๋™์ผํ•œ ์ด๋ฏธ์ง€์™€ ๊ทœ๊ฒฉ์œผ๋กœ ์ƒ์„ฑ๋œ VM๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, 
    - ํ•˜๋‚˜์˜ Cluster๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. 
    - ์ด์™€ ๊ฐ™์€ ์ด์งˆ์ ์ธ ๋…ธ๋“œ ๊ทธ๋ฃน ๊ตฌ์„ฑ์„ ํ†ตํ•˜์—ฌ ํ•˜๋‚˜์˜ Cluster์—์„œ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์›Œํฌ๋กœ๋“œ์˜ ์‹คํ–‰ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
    - ์ฐธ๊ณ ๋กœ, Node(=VM)์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ์˜ ํ˜‘์—… ๋ฐ ์‹ค์ œ Pod์˜ ์‹คํ–‰ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์œ„ํ•˜์—ฌ kubelet, kube-proxy ๋ฐ Container runtime ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค. 
    

    (3) ์—๋“œ์˜จ(Addons)

    - ์—๋“œ์˜จ์€ CNI, DNS ๋ฐ Container Resource Monitoring ๋“ฑ์œผ๋กœ 
    - Cluster ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค.
    - ๋‹ค์–‘ํ•œ ์—๋“œ์˜จ๋“ค์ด ์กด์žฌํ•˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
    

    (4) ์—”๋“œํฌ์ธํŠธ(Endpoint)

    - ์™ธ๋ถ€์—์„œ Cluster์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” URL์„ ์ œ๊ณตํ•œ๋‹ค.
    

3. CB-Spider Cluster ํƒ€์ž…

  • Cluster ์ƒ์„ฑ๊ณผ NodeGroup ์ถ”๊ฐ€ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 2๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  • (1) Type-I: Cluster ์ƒ์„ฑ ํ›„ NodeGroup ๋ณ„๋„ ์ถ”๊ฐ€/์‚ญ์ œ

    • ๋Œ€์ƒ CSP: AWS, Alibaba, Tencent ๋“ฑ
  • (2) Type-II: ์ตœ์ดˆ Cluster ์ƒ์„ฑ์‹œ ์ตœ์†Œ 1๊ฐœ ์ด์ƒ์˜ NodeGroup์„ ํ•จ๊ป˜ ์ƒ์„ฑ ์ดํ›„ NodeGroup ์ถ”๊ฐ€/์‚ญ์ œ ๊ฐ€๋Šฅ

    • ๋Œ€์ƒ CSP: Azure, GCP, IBM, NHN ๋“ฑ

4. CB-Spider Cluster ์ œ๊ณต ํ˜„ํ™ฉ (CB-Spider v0.9.6 ๊ธฐ์ค€)

  • ์ œ๊ณต ๊ธฐ๋Šฅ: Cluster ์ƒ์„ฑ/์‚ญ์ œ, NodeGroup ์ถ”๊ฐ€/์‚ญ์ œ, Kubeconfig ์ œ๊ณต ๋ฐ OpenLens ์—ฐ๋™(=kubectl ํ™œ์šฉ ๊ฐ€๋Šฅ)
  • ๊ฒ€์ฆ ํ•„์š” ๊ธฐ๋Šฅ: AutoScaling ์„ค์ • ๋ณ€๊ฒฝ, Upgrade (์ „์ฒด ๋˜๋Š” ์ผ๋ถ€ CSP ์ง€์›, ์ „์ฒด ๊ฒ€์ฆ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ)
  • ์ถ”ํ›„ ์ œ๊ณต ๊ณ ๋ ค: Addons(๊ตฌํ˜„ ์•ˆ๋จ)

[์‹œํ—˜ ๋ฐฉ๋ฒ•]

  • (1) CSP๋ณ„ Version, VMSpec ๋“ฑ์˜ ์ž…๋ ฅ ์„ค์ • ๊ฐ’์€ AdminWeb ์ดˆ๊ธฐ ์„ค์ • ๊ฐ’์œผ๋กœ Cluster ๋ฐ NodeGroup ์ƒ์„ฑ
    • โ€ป Notices: AdminWeb์˜ CSP๋ณ„ Kubernetes Version ๋ฐ Image ์ •๋ณด ๋“ฑ์€ CSP์—์„œ Deprecated ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ์ˆ˜์ • ํ•„์š”
  • (2) ์ƒ์„ฑ๋œ Cluster์˜ Kubeconfig ์ •๋ณด๋ฅผ OpenLens์— ๋“ฑ๋ก ํ›„ ์—ฐ๋™/Pod ๋ฐฐํฌ ๋“ฑ ํ™•์ธ
    • Cluster ์—ฐ๋™ ๋ฐ Pod ๋ฐฐํฌ ์‹œํ—˜ ๊ฐ€์ด๋“œ: ๋‹ค์Œ ์˜์ƒ ์ค‘ ํ•ด๋‹น ๋ถ€๋ถ„ ์ฐธ๊ณ 
    • OpenLens ์—ฐ๋™ ์„ค์ • ํŠน์ด ์‚ฌํ•ญ: ์ผ๋ถ€ CSP์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€์—์„œ Cluster ์ ‘๊ทผ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์„ค์ • ํ•„์š”
      โ€ป GCP Note: OpenLens, kubectl ๋“ฑ์—์„œ Kubeconfig ํ™œ์šฉํ•œ ์™ธ๋ถ€ ์ ‘๊ทผ ์‹œ ์„ค์ • ๋ฐฉ๋ฒ• ์ฐธ๊ณ 
         - gcloud ๋ฐ gke-gcloud-auth-plugin ์‚ฌ์ „ ์„ค์น˜ ํ•„์š”
         - OpenLens ์„ค์น˜ ์ดํ›„ ์„ค์น˜ ์‹œ์—๋Š” System Reboot ํ•„์š”
      

[์ œ๊ณต ํ˜„ํ™ฉ]

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์ฐจ ๊ฐœ๋ฐœ ์™„๋ฃŒ)

5. CB-Spider Cluster Rest API

  • Swagger UI: Cluster Management ์ฐธ๊ณ 
  • โ€ป CSP๋ณ„ Custer ์ƒ์„ฑ ๋ฐ NodeGroup ์ƒ์„ฑ ์‹œ ํ•„์š” ์ธ์ž๋Š” AdminWeb ๊ด€๋ จ default ์„ค์ • ๊ฐ’ ์ฐธ๊ณ 

6. ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ ๋…ธํŠธ

  • 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 ๋“ฑ
  • 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")๋งŒ ์ œ๊ณต
  • PMKS๋Š” VPC ์˜์กด์ ์ด๋‹ค. ์ฆ‰, ํŠน์ • VPC์— ์†Œ์†๋˜๋Š” ๊ด€๋ฆฌํ˜• K8S๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” PMKS ์ƒ์„ฑ ์š”์ฒญ ์ „์— ํ•„์š”ํ•œ VPC/Subnet ๋ฐ Security Group์„ ์ ์ ˆํ•˜๊ฒŒ ์ƒ์„ฑ ํ•˜์—ฌ ์ธ์ž๋กœ ํ•จ๊ป˜ ํ˜ธ์ถœํ•จ์„ ๊ฐ€์ •ํ•œ๋‹ค.

    • AWS์˜ ๊ฒฝ์šฐ ์‚ฌ์ „์— Role์˜ ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๋ฉฐ, ํ˜„์žฌ๋Š” role ์ด๋ฆ„์„ ๋‹ค์Œ ์ด๋ฆ„์œผ๋กœ ์ผ์น˜ ์‹œํ‚จ๋‹ค.(์ถ”ํ›„ ํ•„์š”์‹œ ๊ฐœ์„ )
      • Cluster: cloud-barista-spider-eks-cluster-role
        • ํ—ˆ์šฉ ๊ถŒํ•œ: AmazonEKSClusterPolicy
      • NodeGroup: cloud-barista-spider-eks-nodegroup-role
        • ํ—ˆ์šฉ ๊ถŒํ•œ: AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryPullOnly, AmazonEKSWorkerNodePolicy, AmazonEKS_CNI_Policy, AmazonEBSCSIDriverPolicy
    • ์ถ”๊ฐ€๋กœ ์‚ฌ์ „ ์ƒ์„ฑ์ด ํ•„์š”ํ•œ ์ž์›์ด ์žˆ๋Š” CSP๋Š” ์ƒ๋‹จ ๋งํฌ์˜ ์ด์Šˆ์— ํ˜„ํ™ฉ์„ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
  • 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 ๊ธฐ๋ก ๊ทœ์น™

  • ๋ณผ๋ฅจ์˜ ๋™์  ํ”„๋กœ๋น„์ €๋‹ (ํ˜„ํ™ฉ)

    • GCP, Azure: ๊ธฐ๋ณธ StorageClass๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ PVC ์ƒ์„ฑ ๊ฐ€๋Šฅ
    • AWS: ์ ์ ˆํ•œ StorageClass๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ธฐ๋ณธ StorageClass๋ฅผ ๋“ฑ๋ก(ebs-sc.yaml)ํ•˜๋ฉด ๊ฐ€๋Šฅ
    • NHNCloud: ์ ์ ˆํ•œ StorageClass๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ธฐ๋ณธ StorageClass๋ฅผ ๋“ฑ๋ก(cinder-sc.yaml)ํ•˜๋ฉด ๊ฐ€๋Šฅ
    • Alibaba: StorageClass๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ PVC ์ƒ์„ฑ์‹œ ๋ช…์‹œํ•˜๊ณ  20GB ์ด์ƒ ์ง€์ • ํ•„์š”
    • Tencent: ๊ธฐ๋ณธ StorageClass๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋ฐ”๋กœ PVC ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‚˜ 10GB ์ด์ƒ ์ง€์ • ํ•„์š”
  • ๊ทธ ์™ธ์— ๋Œ€์ƒ CSP Driver ๊ฐœ๋ฐœ์‹œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ์— ๊ณต์œ  ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

7. PMKS Driver Common API

  • 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)
    }
    

History

- 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 ์ถ”๊ฐ€