Open sykim-etri opened 2 weeks ago
고려할 수 있는 방법으로는 keypair 저장 방식과 유사하게, nodepool의 autoscaling 관련 정보를 labels에 저장해 두는 방법이 있겠습니다.
@sykim-etri
관련하여, 호출되는 Driver API는 다음과 같습니다.
SetNodeGroupAutoScaling(clusterIID IID, nodeGroupIID IID, on bool) (bool, error)
이 API가 호출되면,
nodeGroupIID
를 이용하여 설정에 필요한 MinNodeSize
, MaxNodeSize
를 획득해서 실행 가능한지 점검 부탁드립니다. 참고: NodeGroupInfo
type NodeGroupInfo struct {
... 중략 ...
// Scaling config.
OnAutoScaling bool `json:"OnAutoScaling" validate:"required" example:"true"`
DesiredNodeSize int `json:"DesiredNodeSize" validate:"required" example:"2"`
MinNodeSize int `json:"MinNodeSize" validate:"required" example:"1"`
MaxNodeSize int `json:"MaxNodeSize" validate:"required" example:"3"`
... 중략 ...
}
SetNodeGroupAutoScaling(false) 호출하면 GCP에서는 MinNodeSize, MaxNodeSize 값을 관리하지 않은 것으로 보입니다. 더불어 SetNodeGroupAutoScaling(true) 호출시 MinNodeSize와 MaxNodeSize 값이 설정되어 있지 않아도 에러를 리턴하지는 않고 MinNodeSize와 MaxNodeSize 값을 각각 0으로 관리하고 있습니다.
또한 CreateCluster()나 AddNodeGroup()시 MinNodeSize와 MaxNodeSize를 설정하지 않은 경우도 각각 0으로 관리하고 있습니다. 이때 실제 생성되는 노드 수는 DesiredNodeSize만큼은 생성되었습니다.
임시 대응책으로 SetNodeGroupAutoScaling(true) 호출시 실제 ON으로 변경한 후 false 및 에러(ChangeNodeGroupAutoscaleSize로 설정값을 변경하도록 안내)를 리턴하는 방법도 있을 것으로 생각됩니다.
@sykim-etri
[코드 분석]
다음은 관련 GCP SDK SetAutoscaling() 입력 Struct의 관련된 인자 부분 입니다.
comment 참고
// NodePoolAutoscaling: NodePoolAutoscaling contains information
// required by cluster autoscaler to adjust the size of the node pool to
// the current cluster usage.
type NodePoolAutoscaling struct {
// Enabled: Is autoscaling enabled for this node pool.
Enabled bool `json:"enabled,omitempty"`
// MaxNodeCount: Maximum number of nodes for one location in the
// NodePool. Must be >= min_node_count. There has to be enough quota to
// scale up the cluster.
MaxNodeCount int64 `json:"maxNodeCount,omitempty"`
// MinNodeCount: Minimum number of nodes for one location in the
// NodePool. Must be >= 1 and <= max_node_count.
MinNodeCount int64 `json:"minNodeCount,omitempty"`
위 MinNodeCount(이하 min) comment에 따르면, 최소 1과 같거나 커야 하고,
MaxNodeCount(이하 max)는 MinNodeCount 보다 같거나 커야 한다고 가이드 하고 있습니다.
결국, Autoscaling OFF 시에는 무관하겠지만,
의견 주신 것처럼, OFF 시에는 관리 자체를 안하거나,
또는 OFF 시에는 반드시 두 값 모두 0으로 유지되어야 할수도...
하지만, ON시에는 두 값 모두 0이 되는 상황이 되면 안되는 걸로 보입니다.
[동작 시험]
[제안 방법]
- GCP는 min, max 값 설정은 on 상태에서만 가능.
- 그래서, Driver ChangeNodeGroupScaling 코드를 보면, 설정 시에 명시적으로 on 시키고 있음.
(PMKS) 개발,시험,이슈현황 내 GCP 행의 기타 이슈에 아래와 같은 내용이 있으며, 현재 시험 결과도 동일하게 off->on으로 변경시 min: 0, max: 0으로 이전 사용값으로 변하지는 않습니다.
어떻게 처리하는 것이 좋을 지에 대한 의견 부탁드립니다.