kubelet 가비지 컬렉션 구성하기
kubelet 가비지 컬렉션 구성하기 (kubelet-garbage-collection)
가비지 컬렉션(쓰레기 수집)은 사용하지 않는 이미지와 컨테이너를 정리하는 kubelet의 유용한 기능이에요. kubelet은 컨테이너에 대해 매분, 이미지에 대해 매 5분마다 가비지 컬렉션을 실행해요.
외부 가비지 컬렉션 도구는 권장되지 않아요. 존재하는 컨테이너를 제거해서 kubelet의 동작을 방해할 수 있기 때문이에요.
이미지 수집 (Image collection)
쿠버네티스는 cadvisor와 협력하여 imageManager를 통해 모든 이미지의 수명주기를 관리해요.
이미지 가비지 컬렉션 정책은 HighThresholdPercent와 LowThresholdPercent 두 요소를 고려해요. 디스크 사용량이 상한(threshold)을 초과하면 가비지 컬렉션이 트리거돼요. 가비지 컬렉션은 수준이 하한 미만이 될 때까지 최근에 가장 적게 사용된 이미지들을 삭제해요.
컨테이너 수집 (Container collection)
컨테이너 가비지 컬렉션 정책은 사용자가 정의한 세 변수를 고려해요. MinAge는 컨테이너가 수집될 수 있는 최소 나이예요. MaxPerPodContainer는 모든 (UID, container name) pod 쌍이 가질 수 있는 죽은 컨테이너의 최대 수예요. MaxContainers는 죽은 컨테이너의 총 최대 수예요. 이 변수들은 각각 MinAge를 0으로, MaxPerPodContainer와 MaxContainers를 각각 0보다 작게 설정해서 개별적으로 비활성화할 수 있어요.
kubelet은 식별되지 않았거나, 삭제되었거나, 언급된 플래그가 정의한 한계를 벗어난 컨테이너에 대해 동작해요. 더 오래된 컨테이너가 일반적으로 먼저 제거돼요. MaxPerPodContainer와 MaxContainers는, pod당 최대 컨테이너 보존 수(MaxPerPodContainer)가 전역 죽은 컨테이너 허용 범위(MaxContainers)를 벗어나는 상황에서 서로 충돌할 수 있어요. 이 상황에서는 MaxPerPodContainer가 조정돼요. 최악의 경우 MaxPerPodContainer를 1로 낮추고 가장 오래된 컨테이너를 제거하는 거예요. 또한, 삭제된 pod에 속하는 컨테이너는 MinAge보다 오래되는 즉시 제거돼요.
kubelet이 관리하지 않는 컨테이너는 컨테이너 가비지 컬렉션 대상이 아니에요.
사용자 설정 (User configurations)
사용자는 다음 kubelet 플래그로 제한을 조정해서 이미지 가비지 컬렉션을 튜닝할 수 있어요:
image-gc-high-threshold, 이미지 가비지 컬렉션을 트리거하는 디스크 사용 비율. 기본값은 85%.image-gc-low-threshold, 이미지 가비지 컬렉션이 확보하려는 디스크 사용 비율. 기본값은 80%.
또한 사용자는 다음 kubelet 플래그로 가비지 컬렉션 정책을 커스터마이즈할 수 있어요:
minimum-container-ttl-duration, 수집되기 전 완료된 컨테이너의 최소 나이. 기본값은 0분으로, 종료된 모든 컨테이너가 가비지로 수집된다는 뜻.maximum-dead-containers-per-container, 컨테이너당 보존할 오래된 인스턴스의 최대 수. 기본값은 1.maximum-dead-containers, 전역으로 보존할 오래된 컨테이너 인스턴스의 최대 수. 기본값은 -1로, 전역 제한이 없음을 뜻함.
컨테이너는 유용성이 만료되기 전에 가비지로 수집될 수 있어요. 그런 컨테이너에는 문제 해결에 유용할 수 있는 로그와 다른 데이터가 들어 있을 수 있어요. maximum-dead-containers-per-container에 충분히 큰 값을 설정해서 기대되는 컨테이너마다 죽은 컨테이너가 적어도 1개는 보존되도록 하는 것을 적극 권장해요. maximum-dead-containers에 더 큰 값을 설정하는 것도 비슷한 이유로 권장돼요. 자세한 내용은 이 이슈를 참고하세요.
Deprecated (Deprecated)
이 문서의 일부 가비지 컬렉션 기능은 미래에 kubelet eviction으로 대체될 거예요.
다음이 포함돼요:
| 기존 플래그 | 새 플래그 | 근거 |
|---|---|---|
--image-gc-high-threshold |
--eviction-hard 또는 --eviction-soft |
기존 축출 신호가 이미지 가비지 컬렉션을 트리거할 수 있음 |
--image-gc-low-threshold |
--eviction-minimum-reclaim |
축출 회수가 같은 동작을 달성함 |
--maximum-dead-containers |
오래된 로그가 컨테이너 컨텍스트 밖에 저장될 때 deprecated | |
--maximum-dead-containers-per-container |
오래된 로그가 컨테이너 컨텍스트 밖에 저장될 때 deprecated | |
--minimum-container-ttl-duration |
오래된 로그가 컨테이너 컨텍스트 밖에 저장될 때 deprecated | |
--low-diskspace-threshold-mb |
--eviction-hard 또는 --eviction-soft |
축출이 디스크 한계를 다른 자원으로 일반화함 |
--outofdisk-transition-frequency |
--eviction-pressure-transition-period |
축출이 디스크 압력 전환을 다른 자원으로 일반화함 |
다음 단계 (What's next)
자세한 내용은 리소스 부족 처리 구성(Configuring handling of insufficient resources)을 참고하세요.