kubelet Garbage 수집

https://kubernetes.io/ko/docs/concepts/cluster-administration/kubelet-garbage-collection/

사용되지 않는 이미지들과 컨테이너들을 정리하는 kubelet의 유용한 기능.
1분마다 컨테이너, 5분마다 이미지들에 대하여 가비지 수집을 수행.


이미지 수집

디스크사용량이 high threshold(85%)를 초과하게되면 디스크사용량이 low threshold(80%)가 될때까지 최근에 가장 적게 사용한 이미지부터 삭제한다.


컨테이너 수집

컨테이너에 대한 가비지 수집 정책은 세 가지 사용자 정의 변수들을 고려한다.
MinAge 는 컨테이너를 가비지 수집 할 수 있는 최소 연령이다.
MaxPerPodContainer 파드당 최대 컨테이너 수,
MaxContainers 죽은 컨테이너의 최대 수량이다.
이러한 변수는 MinAge 를 0으로 설정하고, MaxPerPodContainer 와 MaxContainers 를 각각 0 보다 작게 설정해서 비활성화 할 수 있다.

kubelet은 위의 플래그들의 설정 경계를 벗어나거나, 확인되지 않은 컨테이너에 대해 조치를 취한다.
일반적으로 가장 오래된 컨테이너부터 제거한다.



OOM killer

Pods id Change

Pods

상황 Pod Id 상태 Container Id 상태
삭제 후 재생성 Id 바뀜 Id 바뀜
업데이트 Id 바뀜 Id 바뀜
재부팅 Id 유지 Id 유지
서버재접속 Id 유지 Id 유지


Containers:
  nginx:
    Container ID:   docker://aa545575cfafa2b7f0b86d69e727b13974255bb7e7c7b9c02c9b6e90ee7975de
    Image:          nginx:1.14.2
    Image ID:       docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 20 Jan 2021 11:23:23 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-k9krb (ro)
[root@platform-group-k8s-1 test1]# kubectl get pods -n hb-test nginx-5f6587f7f8-s2875 -o jsonpath='{.metadata.uid}'
cc7aec4f-54b7-45e1-b7a8-098f689a6934


업데이트 후

Containers:
  nginx:
    Container ID:   docker://b3dade5caaa8ddbab347894a460eb74aa1207543425801d1857b023f9f60b4af
    Image:          nginx:1.16.1
    Image ID:       docker-pullable://nginx@sha256:d20aa6d1cae56fd17cd458f4807e0de462caf2336f0b70b5eeb69fcaaf30dd9c
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 20 Jan 2021 11:56:46 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-k9krb (ro)
[root@platform-group-k8s-1 test1]#  kubectl get pods -n hb-test nginx-757bd75865-xjlqn -o jsonpath='{.metadata.uid}'
2c6dede6-8fe9-4e0f-9d7f-6292df39fd3c