Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PMKS] CreateCluster() operates only as a synchronous call #1102

Open
sykim-etri opened this issue Feb 29, 2024 · 8 comments
Open

[PMKS] CreateCluster() operates only as a synchronous call #1102

sykim-etri opened this issue Feb 29, 2024 · 8 comments
Assignees
Labels
bug Something isn't working

Comments

@sykim-etri
Copy link
Member

상기 자료들에 따르면 PMKS API들의 비동기 호출 방식으로 동작하고 있는 것으로 안내되고 있는데, 동기 호출 방식으로 초기 설계됨에 따라 비동기 호출 방식으로 동작하기 어려운 부분이 있는 것으로 파악됩니다.
드라이버 개발시나 기능 활용시 이와 관련한 오해가 발생할 소지가 있어 보입니다.

예를들어 노드그룹이 포함된 클러스터 생성할 때 CreateCluster() 함수에서 CSP에 클러스터 생성과 노드그룹 생성을 요청한 후 노드그룹의 생성을 기다리지 않고 리턴하면 노드그룹의 SystemId가 비어있게 됩니다. 이후 GetCluster()를 호출하면 해당 노드그룹의 SystemId가 등록(insert)되어 있지 않기 때문에 오류가 발생합니다. 이러한 오류가 발생하지 않도록 하려면 적어도 노드그룹의 SystemId가 생성되기를 기다린 후 리턴하도록 개발이 필요한 상황입니다.

따라서 관련 안내 등에 일부 보완이 필요할 것으로 보입니다.
검토하시고 의견 부탁드립니다. @powerkimhub

@sykim-etri sykim-etri added the bug Something isn't working label Feb 29, 2024
@powerkimhub powerkimhub self-assigned this Feb 29, 2024
@powerkimhub
Copy link
Member

@sykim-etri

[다음 시나리오 검토 부탁드립니다. ]

  • CreateCluster() 비동기 호출 뒤 바로 GetCluster()를 호출했을 때,

  • GetCluster() 내부 처리 시에 아직 NodeGroup이 안만들어진 상태라면,

    • NodeGroup 정보를 제외하고 가능한 정보만 제공하면 어떤지요?
    • pseudo code:
         nodeGroupList := csp.api.GetNodeGroups("cluster_01")
          if(nodeGroupList == nil || len(nodeGroupList)<1) {
              cluster.NodeGroupList = nil   // (or []NodeGroupInfo{} )
          }else {
              cluster.NodeGroupList = convert(nodeGroupList)
          }
      
  • 만일, 드라이버에서 위와 같이 빈 NodeGroupList를 올려 줬을 때,

  • 서버에서 오류가 발생한다면, 서버를 수정하도록 하겠습니다.

@sykim-etri
Copy link
Member Author

조금 더 상세하게 설명드렸어야 했는데.. 부족했던 것 같습니다.

CreateCluster() with NodeGroup 비동기 호출 후 GetCluster() 호출시 발생하는 에러는 다음과 같습니다.
Cluster의 NodeGroup이 생성되어 관련 내용을 리턴했는데, CB-SP에 해당 NodeGroup의 SystemId가 없어서 발생하는 것으로 추정됩니다.

[CB-SPIDER].[ERROR]: 2024-02-29 10:30:23 ClusterManager.go:619, github.com/cloud-barista/cb-spider/api-runtime/common-runtime.setResourcesNameId() - alibaba-cn-beijing, ns01-tb111, npe5cd29e8b5924b7482bf685fa721b8
46: does not exist!                                                                                                                                                                                                  
[CB-SPIDER].[ERROR]: 2024-02-29 10:30:23 ClusterManager.go:798, github.com/cloud-barista/cb-spider/api-runtime/common-runtime.GetCluster() - alibaba-cn-beijing, ns01-tb111, npe5cd29e8b5924b7482bf685fa721b846: does
 not exist!

대략 아래와 같은 이유때문에 상기 에러가 발생하는 것으로 예상됩니다.

  1. CreateCluster() with NodeGroup 비동기 호출
    • CSP에서 Cluster의 SystemId 정보는 리턴하지만 NodeGroup 관련 정보는 리턴하지 않음 (시험 환경: alibaba)
    • NodeGroup의 SystemId가 없으므로 infostore에 등록(insert)하지 않음
  2. GetCluster() 호출
    • NodeGroup이 생성되어 NodeGroup의 SystemId를 리턴함
    • 등록되지 않은 NodeGroup의 SystemId가 조회되어 에러를 출력

해당 이슈는 Cluster 생성 후 NodeGroup을 추가하는 방식의 CSP에서는 특별히 이슈가 되지 않을 것으로 보이며, 각 CSP별 CreateCluster() 개발 현황은 다음과 같습니다.

  1. AWS
    • Cluster 생성 후 NodeGroup 추가 방식이므로 이슈 없음
  2. Azure
    • Cluster 생성시 NodeGroup 1개 이상 추가가 필요하며, SecurityGroup이 자동 생성되기를 기다린 후 리턴
  3. GCP
    • PMKS 현황에 유사 이슈 있는 것으로 보임
    • 최대 30초 대기하는 코드 존재
  4. Alibaba
    • 초기 드라이버 버전에서는 Cluster 생성 후 NodeGroup 추가 방식만 지원하였으나
      현재 제공되는 CSP API에서 Cluster 생성시 NodeGroup 생성을 지원하고 있어 관련 이슈가 있음
  5. Tencent
    • Cluster 생성 후 NodeGroup 추가 방식이므로 이슈 없음
  6. IBM
    • Cluster 생성시 NodeGroup 1개 이상 추가가 필요하며, default Security Group 복원, Addon 목록 확인 및 AutoScaler 설치 요청 등 수행 후 리턴
  7. NHNCloud
    • Cluster 생성시 NodeGroup 1개 이상 추가가 필요하며, 10초간 대기하는 코드 존재

@powerkimhub
Copy link
Member

@sykim-etri

  • 현황 정리 캄사드립니다.
  • 정리가 필요한 거 같습니다.
  • 추가로, Alibaba 최신 API 옵션 중 Cluster 생성 후 NodeGroup 추가 방식 지원 여부 확인 부탁드립니다.
  • 관련하여 현황 및 이슈를 다음 링크에 추가 정리하였습니다. 필요시 참고해주시기 바랍니다.

@sykim-etri
Copy link
Member Author

@powerkimhub
Alibaba 최신 API를 활용(Nodepools 정보 미제공 방식)하여 Cluster 생성 후 NodeGroup 추가 방식 지원의 가능한 것으로 확인되었습니다.

@powerkimhub
Copy link
Member

@sykim-etri

  • 캄사합니다.
  • 그렇다면, Spider에서는 Cluster 생성 후 NodeGroup 추가 방식으로만 제공하는 것은 어떻게 생각하시는지요?

@sykim-etri
Copy link
Member Author

@powerkimhub

대안이 될 수 있을 것 같은데, 일부 CSP(NHNCloud)의 경우 적용이 불가능한 옵션일 수도 있습니다.

잠깐 살펴본 적 있는 NHNCloud의 경우 API 문서상 클러스터 생성시 워커 노드 그룹 관련 사항 일부를 필수로 요구하고 있어서.. 각 CSP별로 관련 테스트가 필요해 보입니다.

@powerkimhub
Copy link
Member

@sykim-etri

  • 아, 현재는 Spider의 CreateCluster 지원 방식을 CSP별로 두가지 타입 중 하나를 유지하고,
  • Alibaba의 경우에는 신규 API가 두가지 타입이 모두 지원 가능하지만,
    • Cluster 생성 후 NodeGroup 추가 방식만 제공하는 것에 대한 문의 입니다^^

@sykim-etri
Copy link
Member Author

@powerkimhub

아하.
그럼 Alibaba에서는 Cluster 생성 후 NodeGroup 추가 방식만 우선 제공하고 추후 필요시 Cluster 생성시 NodeGroup 1개 이상 추가 방식 지원을 검토하도록 하겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants