Written on
·
272
2
qos설정에 request값을 cpu %(퍼센트)값이 아닌 cpu숫자로도 설정이 가능한가봐요? 총cpu 4개인 노드에 pod하나는 cpu 1개를 다른 성격의 pod들 중에 하나는 cpu 3개를 쓰고 있는데 3개를 쓰고 있는 pod에서 리소스 부족으로 cpu 1개인 pod가 떨어졌습니다.
문제는 cpu 1개인 pod의 qos class는 burstable 이고 cpu 3개를 쓰고 있는 pod는 bestEffort입니다. bestEffort 파드가 리소스 요청을 많이 하면 cpu 1개인 pod가 떨어질수 있나요?
그리고 oom score라고 얘기해주신건 메모리 정보만 가지고 score를 매기는건가요? 그럼 cpu request만 설정되어있으면 cpu score라고 따로 있나요? 이 용어는 같은 개념으로 쓰이는건가요?
마지막으로 request cpu 3이라고 되어있으면 cpu 4 core중에 3 core만 쓰겠다는 의미 맞나요?
그렇다면 limit 설정이 없고 request만 잇다면 cpu 3 core를 넘는 리소스 사용이 가능한지 아니면 최대 cpu 3개 까지만 쓸수있는건가요? 즉 limit가 없으면 노드 전체 cpu 3개를 넘는 리소스 사용요청이 가능한건가요?
Answer 6
1
네 맞습니다 안정적인 시스템을 구축하려면 limit와 request를 마춰주시면 좋고요.
상황에 따라 pod가 좀 가끔씩 죽거나 해도 node자원을 더 효율적으로 쓰는게 나은 시스템에서는 bustable방식으로 갑니다.
왠만해서는 cpu가지고 pod가 죽기는 쉽지 않기 때문에 저도 직접 pod가 죽을때 메세지라든지 리소스 모니터링을 해보지 않은 상태에서 딱 말씀드리기가 애매하네요
단순 이론적인 부분이 아닌 이런 복합적인 문제에 대한 원인유추는 저보다 직접 해보신 수강생님이 판단하시는게 더 맞습니다^^
추후 운영하시다가 또 막히시는게 있으면 질문주시고요. 강의보시고 수강평도 주시면 감사하겠습니다^^
1
답변 너무 감사드리고..이해가 됐습니다. 도움도 너무 많이 되고있구요.
일단 request만 존재하고 burstable이고 limit이 없는경우는 맞다 안맞다 정책적으로 논하기도 애매 하겠네요~~
그리고 총 4core노드의 pod두개 존재시 각 cpu request가 파드별 각각 1과 3으로만 설정되었을때 cpu 증가로 인한 다른 한쪽 pod가 떨어질 일은 없겠네요 limit만 설정되어있다면 말씀해주신데로요~. 현재 상황이 cpu에 의한 pod가 떨어졌다는 의심은 limit설정이 빠져있고 request만 등록되어서 cpu문제로 봤는데 이 부분의 의심은 맞는거죵? ^^ 그리고 위의 답변으로 너무 이해가 잘됐습니다. 강의에 설명이 있었던것 같기도..한데 제가 이해 못한부분도 있었던것 같구요....
1
네 좋은 질문 감사합니다.
1. request만 설정하는건 설정을 안하는것과 마찬가지입니다. 그래도 QoS는 Burstabe이기 때문에 아예 의미가 없진 않지만, 컨테이너를 운영하는 입장에서는 BestEffort와 Request만 주는 세팅에 대한 명료한 정책을 세우기가 애매합니다. (제가 그 차이에 대해 적용해본 경험이 없어서 일 수도 있고요- 제 의견으로만 생각해주시면 감사하겠습니다),
별개로 limit만 설정하게 되면 rqeust는 쿠버네티스에서 자동으로 limit와 같은 값으로 세팅을 해줍니다.
2-3. memory의 경우 일단 limit를 설정해서 해당 limit를 넘겨버리면 OOMKilled라는 Reason을 남기면서 Pod는 죽어버립니다. 하지만 CPU의 경우 limit를 설정하면 해당 limit 이상으로 core가 더 할당이 안될뿐 Pod가 죽지는 않죠. 이건 기본적인 내용이라 잘 아실겁니다.
하지만 Node의 자원이 다 찬 상태에서 해당 Node위에 있는 Pod들이 자원을 경쟁해야되는 상황일때 (Overcommited 상태) CPU의 동작과 Memory의 동작을 설명드리면,
Memory의 경우 Reqeust와 Limit 사이에 자원을 사용하고 있는 Pod들은 OOMScore에 따라 먼저 죽을 Pod가 결정이 됩니다. Memory의 경우 쓰고 있는 자원을 회수할 수 있는 성격의 자원이 아니기 때문에 Pod를 죽이는 거고요.
CPU의 경우 core를 Pod에 더 할당해주고 적게 할당해주고 할 수 있는 성격의 자원이기 때문에 이런 상태일때 Pod에서 사용할 수 있는 CPU자원을 request 수치까지 낮추게되고 해당 프로세스는 좀 느려질 뿐 죽지는 않습니다.
그리고 아무리 Reqeust를 1로 설정하고 Limit를 2로 설정했다고 해도, Pod에서 1.5를 쓰고 있을때 Node의 CPU자원을 다른 Pod에서 다 쓰고 있다면, 해당 Pod의 core성능은 1.5 이상으로 올라가지 않고요.
이해안되시는 부분 있으면 다시 질문 주세요~
1
답변에 다시한번 감사드리고. 답변 주신 내용으로는
①request설정시 limit이 없는 request는 resource설정의 의미가 없다는 말씀이신거죠? 즉, request와 limit은 반드시 같이 존재해야 의미가 있다는 말씀인거죠?
②그리고 위의 답변중에 memory는 limit설정으로 oom score가 있어서 limit설정에 의해서 pod를 죽이는데~ cpu는 수치를 request 2 그리고 limit 을 3으로 해도 cpu가 3이상의 자원이 필요할경우에도 pod를 죽이지 않고 다른 pod에 영향을 주지 않고 오히려 3이하로 낮춘다는건가요?
③그러면서 cpu가 지속적으로 더 많은 사용량이 필요한 상황인데 request이상은 당연히 사용할것이고 오히려 2 에서 1로 낮춘다는 말은 납득이 안되네요...오히려 더 cpu자원이 필요한 상황인데 말이죠...
1,2,3답변 꼭좀 부탁드립니다.
0
자원은 limit까지 사용가능합니다.
그리고 request만 있고 limit는 없는 설정은 설정을 안하는 것과 같은정도로 의미가 없기 때문에 굳이 이렇게 설정하는걸 고려할 필요은 없어보입니다.
0
안녕하세요.
일반적으로 cpu는 숫자로 표시합니다. 1(core)이나 0.1(core)혹은 100m(= 0.1core)
그리고 core에 request 가 1이고 limit가 2로 설정했는데 실 사용이 2일 경우 노드가 overcommit상태일때 cpu수치를 1로 낮추지 죽이지는 않거든요.
하지만 memory의 경우 limit 수치까지 갔을 경우 oom score에 따라 파드를 죽입니다.
그렇기 때문에 cpu는 별도의 score가 없고요.