-
Notifications
You must be signed in to change notification settings - Fork 47
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
[GCP:PMKS] after creating a cluster, I got an error with 'SystemId: does not exist' when getting it #1252
Comments
@CliffSynn @hippo-an @MZC-CSC (@sykim-etri ) [최초 에러 발생 위치 및 원인]
[증상]
[제안]
[기타]
|
클러스터 생성에 많은 시간이 소요되므로, 비동기 호출만으로 처리가 가능한지도 검토해주시면 좋겠습니다. |
혹시 검토된 사항이 있다면 공유를 부탁드립니다. |
안녕하세요. 해당 이슈에 대해서 파악한 점 말씀드리겠습니다.
|
2) 제공해주신 에러 로그를 바탕으로 전체 흐름을 따라 파악해 본 결과는 다음과 같습니다.비동기 호출과 관련된 문제는 아닌것으로 확인했습니다. 2.1) 클러스터 생성 요청 시 발생하는 에러 로그에 대한 분석gcp 의 cluster 생성 흐름은 다음과 같습니다.
제공해주신 에러 로그를 바탕으로 생성시 찍힌 에러 로그는 다음과 같이 설명 가능합니다.
결과적으로 생성 시점에서 발생하는 에러 로그는 2건이지만, 두건의 에러 로그 모두 cluster 생성 요청에 에러 응답을 반환하지 않습니다. 클러스터 생성 요청은 문제없이 실행됩니다. 2.2) 생성 직후 클러스터 리스트 조회에서 발생하는 에러에 대한 분석아래 두 건의 로그는 클러스터 생성 요청 직후 클러스터 리스트 조회 요청에 포함된 로그로 총 한건의 에러 로그가 발생합니다.
이는 앞서 말씀드린 노드풀 생성 이전에 인스턴스 그룹으로 조회 요청시 생성되는 에러 로그입니다. 그리고 이렇게 ListCluster 요청이 성공하면 다음과 같이 리스트 화면이 보이게 됩니다. 노드 그룹이 비어 있는 상태로 클러스터 정보만 채워져 있는 상태입니다. 2.3) 노드 그룹이 생성된 후 클러스터 리스트 조회에서 발생하는 에러에 대한 분석이후 시간이 흐르고 ListCluster() 함수를 호출하게 되면 error 를 반환하며, 기존에 조회되던 리스트도 더이상 조회가 불가능합니다.
위 에러는 호출 시간만 다를 뿐 동일한 위치에서 발생하는 에러입니다. ListCluster 는 GetCluster() 함수를 반복문으로 호출합니다. 해당 함수에는 반환된 NodeGroupList 를 순회하는 반복문이 존재합니다. 응답으로 넘어오는 cluster info 의 NodeGroupList 의 예시 응답은 다음과 같습니다. (로그로 찍힌 정보를 그대로 올린 것이라 json 형식이 이상한 부분은 신경쓰지 않으셔도 괜찮습니다.)
KeyPairIID 에 대해서 왜 저렇게 매핑을 하는지 추적했습니다. GCP Cluster Handler 에서 node group list 의 키페어를 매핑하는 방식은 노드 그룹에 설정된 인스턴스의 반복문을 돌며 마지막 인스턴스에 설정된 keypair 와 관련된 label 을 매핑하여 제공합니다. func convertNodeGroup(client *compute.Service, credential idrv.CredentialInfo, region idrv.RegionInfo, orgNodeGroupList []irs.NodeGroupInfo) ([]irs.NodeGroupInfo, error) {
nodeGroupList := []irs.NodeGroupInfo{}
for _, nodeGroupInfo := range orgNodeGroupList {
cblogger.Info("convertNodeGroup ", nodeGroupInfo)
//cblogger.Debug(nodeGroupInfo)
keyValueList := nodeGroupInfo.KeyValueList
for _, keyValue := range keyValueList {
cblogger.Info("keyValue ", keyValue)
if strings.HasPrefix(keyValue.Key, GCP_PMKS_INSTANCEGROUP_KEY) {
cblogger.Info("HasPrefix ")
nodeList := []irs.IID{}
instanceGroupValue := keyValue.Value
instanceList, err := GetInstancesOfInstanceGroup(client, credential, region, instanceGroupValue)
if err != nil {
return nodeGroupList, err
}
cblogger.Info("instanceList ", instanceList)
for _, instance := range instanceList {
instanceInfo, err := GetInstance(client, credential, region, instance)
if err != nil {
return nodeGroupList, err
}
//cblogger.Debug(instanceInfo)
// nodeGroup의 Instance ID
nodeIID := irs.IID{NameId: instanceInfo.Name, SystemId: instanceInfo.Name}
nodeList = append(nodeList, nodeIID)
cblogger.Info("instanceInfo.Labels ", instanceInfo.Labels)
nodeGroupInfo.KeyPairIID = irs.IID{NameId: "NameId", SystemId: "SystemId"} // empty면 오류나므로 기본값으로 설정후 update하도록 <--- 해당 부분
if instanceInfo.Labels != nil { <--- 해당 부분
keyPairVal, exists := instanceInfo.Labels[GCP_PMKS_KEYPAIR_KEY] <--- 해당 부분
if exists { <--- 해당 부분
cblogger.Info("nodeGroup set keypair ", keyPairVal) <--- 해당 부분
nodeGroupInfo.KeyPairIID = irs.IID{NameId: keyPairVal, SystemId: keyPairVal} <--- 해당 부분
}
}
}
cblogger.Info("nodeList ", nodeList)
nodeGroupInfo.Nodes = nodeList
//cblogger.Info("nodeGroupInfo ", nodeGroupInfo)
cblogger.Debug(nodeGroupInfo)
}
}
nodeGroupList = append(nodeGroupList, nodeGroupInfo)
}
return nodeGroupList, nil
} 인스턴스에 등록된 label 을 조회하는 과정에서 keypair 와 관련된 label 이 적절하게 등록되어 있지 않음을 확인했습니다. 즉, cluster 생성시 함께 생성되는 인스턴스의 라벨을 통해선 keypair 와 관련된 정보를 조회할 수 없기 때문에 KeyPairIID:{NameId:NameId SystemId:SystemId} 와 같은 형태로 NodeGroupList 의 응답이 반환된 것입니다. 참고로, cluster 생성시에도 동일한 함수가 호출되지만 비어있는 NodeGroupList 때문에 문제가 되는 코드를 수행하지 않고 넘어가게 됩니다. |
GCP 클러스터 생성 시 1) 노드 그룹 없이 생성하는 경우, 2) 노드 그룹을 추가해서 생성하는 경우에 대해 처리가 달라져야 할 것 같습니다.
|
[확인 요청]
[그런 옵션이 없다면 제안 드립니다.]
※ @hippo-an, @sykim-etri : 제안 내용 검토 부탁 드립니다. |
현재 사용하는 cluster api v1 sdk ( 최신 정식 버전) 에서 GKE 의 Standard Cluster 를 생성하는 경우 default node pool 없이 클러스터를 생성하는 옵션은 찾지 못했습니다. 추가적으로 gcloud, gcp console, api reference 에서 default node pool 없이 생성하는 옵션을 확인했으나 찾지 못했습니다. 클러스터 생성 시 default node pool 을 사용하거나 사용자 지정 node pool 설정이 반드시 필요합니다. gcp 의 경우 type 2 를 사용하는 것이 spider 에서 명확하게 자원을 관리할 수 있다고 생각합니다. 참고) |
[Type-II로 마무리 부탁 드립니다.]
|
GCP의 asia-east1를 대상으로 CB-SP의 adminweb을 통해 클러스터 생성 후 ListCluster()/GetCluster 수행시 아래와 같은 에러가 발생하면서 조회가 되지 않습니다.
GCP 콘솔을 통해 확인하면 해당 클러스터는 생성된 것으로 확인됩니다.
생성 요청부터 에러 발생까지 전체 로그를 첨부하오니 검토 부탁드립니다.
gcp-cluster-error.log
The text was updated successfully, but these errors were encountered: