IT Knowledge/Kubernetes

CRI-O 튜닝포인트(kubernetes)

Seok. 2024. 6. 2. 08:33
반응형

컨테이너 런타임으로 crio 사용하는 경우,

서비스를 올바르게 동작하려고 한다면, "최대프로세스의 수" "최대 오픈 파일 수" 조정해야 합니다.

(To ensure that services can run correctly, you must adjust the maximum number of processes and the maximum number of open files in the CRI-O container settings.)

 

 

[최대프로세스 ]

컨테이너에 허용되는 최대 프로세스 수는 pids_limit 매개변수를 설정해야 합니다.

(https://github.com/cri-o/cri-o/blob/main/docs/crio.conf.5.md)

 

CRIO 1.23버전까지 pids_limit 옵션이 사용되었으며, 기본값은 1024 입니다.

CRIO 1.24버전부터 deprecated 되었으며, Kubelet --pod-pids-limit 플래그로 대체 되었습니다.

 

pids_limit=-1

Maximum number of processes allowed in a container. This option is deprecated. The Kubelet flag --pod-pids-limit should be used instead.

 

 

CRIO 1.23 버전 이하

방법1) crio.conf 파일 수정

/etc/crio/crio.conf
[crio.runtime]
pids_limit = 4096

 

 

CRIO 1.24 버전 이상

Kubelet pod-pids-limit 플래그 설정

 

Kubernetes pid limit policy

https://kubernetes.io/docs/concepts/policy/pid-limiting/

 

Start a kubelet process configured via config file

https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/

 

Pod PID Limits 설정하려면,

방법1) kubelet 실행시, command line paranameter "--pod-max-pids" 옵션을 설정

방법2) kubelet 구성파일에 "PodPidsLimit"값을 설정.

 

방법2 진행

Kubelet config 파일 경로로 설정된 플래그를 사용하여 kubelet 시작하면, 구성을 불러온다.

파일 위치 : --config=/var/lib/kubelet/config.yaml

 

혹은, config file 위한 Drop-in Directory 사용한다.

Ex) --config-dir=/etc/kubernetes/kubelet.config.d

"PodPidLimit" 값을 -1에서 2048 변경

 

 

[최대 오픈 파일 ]

컨테이너별 ulimit 설정하지 않은 경우, CRI-O Daemon으로 부터 상속을 받는다.

(https://github.com/cri-o/cri-o/blob/main/docs/crio.conf.5.md)

 

default_ulimits=[]

A list of ulimits to be set in containers by default, specified as "=:", for example:"nofile=1024:2048".

If nothing is set here, settings will be inherited from the CRI-O daemon.

 

 

현재 CRI-O Daemon nofile Limit 체크하는 방법

#systemctl show crio | grep LimitNOFILE

 

CRI-O Daemon LimitNOFILE 변경하는 방법

방법1) crio.conf 파일 수정

/etc/crio/crio.conf
[crio.runtime]
default_ulimits = [
"nofile=1048576:1048576"
]

 

방법2) /etc/systemd/system/cri-o.service 파일 수정

LimitNOFILE=1048576

 

해당 값은 66560 이상 권고(recommended) 합니다.

(https://www.ibm.com/docs/en/cloud-paks/cloudpak-data-system/1.0?topic=SS5FPD_1.0.0/com.ibm.icpdata.doc/install/node-settings.html)

 

 

 

미튜닝시 아래와 같은 현상이 발생할 있습니다.

Ingress-nginx-controller에서 아래와 같은 오류메시지 발생.

 

Sendmsg() failed (9: Bad file descriptor)

Pthread_create() failed (11: Resource temporarily unavailable)

Worker process 1055 exited with fatal code 2 and cannot be respawned

https://github.com/cri-o/cri-o/issues/5779

 

 

 

 

참고 : https://github.com/cri-o/cri-o/blob/main/docs/crio.conf.5.md

https://www.ibm.com/docs/en/cloud-paks/cloudpak-data-system/1.0?topic=SS5FPD_1.0.0/com.ibm.icpdata.doc/install/node-settings.html

 

반응형