Kubernetes에서 Go 컨테이너는 다른 컨테이너가 코어를 사용할 때 모든 코어를 사용합니까
시나리오: 16 코어 노드에서 Go 서비스/컨테이너는 다른 컨테이너와 함께 포드에서 실행되며, 다른 하나는 4 코어가 할당되고 Go 컨테이너는 사용하도록 설정됩니다.
고루틴을 사용하는 요청에서 바둑 프로그램은 이용 가능한 모든 CPU를 활용할 것인가. 나는 이것이 포드 시작 시 사용되는 1개의 코어만 기계에 있다고 보는지 확실하지 않다고 생각한다.
CPU 집약적인 요청이 사용 가능한 모든 CPU를 사용하는 것이 이상적이지만 실제로 런타임(GKE)에서 어떤 일이 일어나고 있는지 측정하는 데 어려움을 겪고 있습니다.
유휴 상태에서 예상되는 항목을 보여줍니다:
POD NAME CPU(cores) MEMORY(bytes)
pod-go-py go-service 1m 862Mi
pod-go-py py-service 4m 489Mi
는 사용 가능한 16개의 코어를 보여줍니다. 그럼 바둑 프로그램이 요청에 모두 활용할 것이라고 믿어도 되는 건가요? 또한 노드의 포드를 확장할 때 Ill이 조절에 주의해야 하는 것을 상상합니다.
용기에 기계의 모든 코어가 표시됩니다. Kubernetes가 제한하는 것은 컨테이너가 소비할 수 있는 CPU의 양을 커널에 알려주는 cgroup을 설정하는 것이다. 이것은 Go가 모든 코어를 보는 반면, 그가 한계를 넘어서려고 할 때 커널이 그것을 조절한다는 것을 의미한다. 그것은 사실 나쁜 것이다. Go가 cgroup을 인식하고 GOMAXPROCS를 적절하게 확장하기를 원합니다. 그것을 위해 당신은 사용할 수 있다
당신이 원하는 것은 초과 구독인 것 같습니다. 요청을 매우 낮게 설정하고 첫 번째 컨테이너의 코어를 4개로 제한합니다. 요청을 매우 낮게 설정하지만 두 번째에는 16개 코어로 제한(또는 제한을 전혀 설정하지 않음)합니다. 그렇게 하면 두 번째 컨테이너는 모든 CPU를 활용할 수 있을 것이다.
https://github.com/gjkim42/gomaxprocs-injector
어떤 이유로든 오토고맥스 프로크를 사용하도록 애플리케이션을 수정할 수 없는 경우를 대비하여 모든 포드에 적절한 GOMAXPROCS를 주입하는 승인 컨트롤러를 만들었습니다.
'개발하자' 카테고리의 다른 글
암호화 인증서를 Kubernetes nginx(GKE)에 제공하려면 어떻게 해야 합니까? (0) | 2023.03.15 |
---|---|
자동으로 이동하여 플러터에서 단일 하위 스크롤 뷰 내 행 위치로 이동하는 방법 (0) | 2023.03.15 |
현재 IPython / Jupyter 노트북 이름을 얻으려면 어떻게 해야 합니까 (0) | 2023.03.13 |
어떻게 하면 쿠버네티스에서 자바 애플리케이션에 할당된 힙 공간의 양을 우아하고 안전하게 최대화할 수 있을까요? (0) | 2023.03.13 |
flutter calculated double ~/ double but got int (0) | 2023.03.12 |