21.2. 컨테이너 가비지 컬렉션
컨테이너 가비지 컬렉션은 기본적으로 활성화되어 있으며 제거 임계값에 도달하는 데 자동으로 수행됩니다. 노드는 API에서 액세스할 수 있는 모든 포드의 컨테이너를 유지하려고 합니다. pod가 삭제된 경우 컨테이너도 삭제됩니다. pod가 삭제되지 않고 제거 임계 값에 도달하지 않는 한 컨테이너는 보존됩니다. 노드가 디스크 부족 상태에 있으면 컨테이너가 제거되고 oc 로그를
통해 로그에 더 이상 액세스할 수 없습니다.
컨테이너 가비지 컬렉션 정책은 세 개의 노드 설정을 기반으로 합니다.
설정 | 설명 |
---|---|
| 컨테이너가 가비지 컬렉션에 적합한 최소 기간입니다. 기본값은 0입니다. 제한 없이 0 을 사용합니다. 이 설정의 값은 h (시간), m (분), s (초)와 같은 단위 접미사를 사용하여 지정할 수 있습니다. |
| 컨테이너당 유지할 이전 인스턴스 수입니다. 기본값은 1입니다. |
| 노드에서 총 종료된 컨테이너의 최대 수입니다. 기본값은 -1 이며 무제한을 의미합니다. |
충돌이 있는 경우 maximum-dead-containers
설정은 maximum-dead-containers-per-container
설정보다 우선합니다. 예를 들어 maximum-dead-containers-per-container
의 수를 유지하면 총 최대 컨테이너 수가 max-dead-containers보다 큰 경우
제한을 충족하기 위해 가장 오래된 컨테이너가 제거됩니다.
최대-dead-containers
노드가 종료된 컨테이너를 제거하면 해당 컨테이너 내의 모든 파일도 제거됩니다. 노드에서 생성된 컨테이너만 가비지 수집됩니다.
기본 설정을 사용하지 않으려면 적절한 노드 구성 맵 의 kubeletArguments
섹션에 이러한 설정 값을 지정할 수 있습니다. 아직 없는 경우 섹션을 추가합니다.
이러한 매개변수가 노드 구성 맵에 없는 경우 컨테이너 가비지 컬렉션은 기본값을 사용하여 수행됩니다.
컨테이너 가비지 컬렉션 설정
kubeletArguments: minimum-container-ttl-duration: - "10s" maximum-dead-containers-per-container: - "2" maximum-dead-containers: - "240"
21.2.1. 삭제를 위해 컨테이너 감지
가비지 컬렉터 루프의 각 스핀은 다음 단계를 거칩니다.
- 사용 가능한 컨테이너 목록을 검색합니다.
-
실행 중이거나 활성 상태가
minimum-container-ttl-duration
매개변수보다 길지 않은 모든 컨테이너를 필터링합니다. 활성 상태가 아닌 컨테이너는 exited, dead, exit 상태가 될 수 있습니다. - Pod 및 이미지 이름 멤버십에 따라 나머지 모든 컨테이너를 동등한 클래스로 분류합니다.
- 식별되지 않은 모든 컨테이너(Kletlet에서 관리하지만 이름이 잘못된 형식)를 제거합니다.
-
max
-dead-containers-per-container
매개변수보다 많은 컨테이너가 포함된 각 클래스에 대해 생성 시간별로 클래스의 컨테이너를 정렬합니다. -
max
-dead-containers-per-container
매개 변수가 충족될 때까지 가장 오래된 컨테이너 제거를 시작합니다. -
목록에 max
-dead-containers
매개변수보다 많은 컨테이너가 있는 경우 수집기는 각 클래스에서 컨테이너를 제거하기 때문에 각 클래스의 컨테이너 수가 클래스당 평균 컨테이너 수 또는<all_remaining_containers>/<number_of_classes>
보다 크지 않습니다. -
충분하지 않은 경우 수집기는 목록에 있는 모든 컨테이너를 정렬하고
maximum-dead-containers
표준이 충족될 때까지 가장 오래된 컨테이너 제거를 시작합니다.
요구 사항에 맞게 기본 설정을 업데이트합니다.
가비지 컬렉션은 연결된 Pod가 없는 컨테이너만 제거합니다.