3.3. Kubernetes 이벤트 기간을 제한하여 etcd 크기 관리
etcd 크기를 관리하려면 Kubernetes 이벤트가 Kubernetes API 서버의 etcd 데이터베이스에 저장되는 최대 시간을 설정할 수 있습니다. eventTTLMinutes 속성을 지정하면 etcd 데이터베이스에 이벤트가 저장되는 기간을 제어할 수 있습니다.
eventTTLMinutes 속성은 Kube API Server Operator가 유지 관리하는 KubeAPIServer 사용자 정의 리소스를 통해 관리됩니다.
프로세스
다음 명령을 입력하여
KubeAPIServer사용자 정의 리소스를 편집합니다.$ oc patch kubeapiserver/cluster -p='{"spec": {"eventTTLMinutes": 5 }}' --type=mergeeventTTLMinutes속성 값은 etcd 데이터베이스에 저장되는 이벤트 수를 지정합니다. 유효한 값은5-180입니다.KubeAPIServer사용자 정의 리소스에 변경 사항을 저장합니다.Kube API Server Operator는 Kube API 서버 Pod에 새 구성을 롤아웃해야 하는 변경 사항을 자동으로 조정합니다.
다음 명령을 입력하여 롤아웃이 완료될 때까지 기다립니다.
$ oc adm wait-for-stable-cluster다음 예제에서는 해당 프로세스 중에 표시되는 출력을 보여줍니다.
... clusteroperators/kube-apiserver is still progressing after 10s ... clusteroperators/kube-apiserver stabilized at 2025-11-12T12:02:40+01:00 after 9m0s
검증
구성이 적용되었는지 확인하려면 다음 명령을 입력합니다.
$ oc get cm config -n openshift-kube-apiserver -ojsonpath='{.data.config\.yaml}' | jq -r ".apiServerArguments[\"event-ttl\"][0]"출력에는 구성된 기간이 표시되며 다음 예의 5m입니다.
5m참고새로 생성된 이벤트만
eventTTLMinutes속성에 새 값을 사용하여 etcd에 작성됩니다. 기존 이벤트는 업데이트되지 않으며 이전에 지정된 TTL 값에 따라 만료됩니다.지정된 이벤트가 짧은 리스로 작성되었는지 수동으로 확인하려면 다음 명령을 입력하여 etcd에서 직접 리스를 검사합니다.
$ oc exec -it pods/<etcd_pod_name> -n openshift-etcd -c etcdctl -- sh명령의 출력은 다음 예와 유사합니다.
sh-5.1h# $ etcdctl lease list | xargs -I {} etcdctl lease timetolive {} lease 1e6e9a77a71d8235 granted with TTL(15s), remaining(1s) lease 1e6e9a77a71d8247 granted with TTL(15s), remaining(3s) lease 1e6e9a77a71d8252 granted with TTL(15s), remaining(3s) lease 1e6e9a77a71d8310 granted with TTL(15s), remaining(11s) lease 1e6e9a77a71d8332 granted with TTL(15s), remaining(12s) lease 1e6e9a77a71d833e granted with TTL(15s), remaining(13s) lease 086e9a77a31f0776 granted with TTL(315s), remaining(177s) lease 086e9a779dcd8245 granted with TTL(10860s), remaining(8369s) lease 086e9a779dcd8fdf granted with TTL(10860s), remaining(8369s)참고다른 API 오브젝트에도 리스가 있을 수 있습니다.
연결된 키를 검사하려면 다음 명령을 입력하여 이벤트의 키 접두사를 필터링합니다.
$ etcdctl lease list | xargs -I {} etcdctl lease timetolive --keys {} | grep "/kubernetes.io/events"출력은 다음 예와 유사합니다.
lease 0f009a77a48509ac granted with TTL(315s), remaining(74s), attached keys([/kubernetes.io/events/openshift-marketplace/redhat-operators-rrq79.18773e905b3e29a8 /kubernetes.io/events/openshift-marketplace/community-operators-csds7.18773e91b1e551a3]) ... ... lease 1e6e9a77a71d3df1 granted with TTL(10860s), remaining(9478s), attached keys([/kubernetes.io/events/openshift-kube-apiserver/kube-apiserver-guard-ci-ln-pbkb71t-72292-dwp9h-master-2.18773c38ef4dcc03])이 예제에서 TTL 값은 5분(
300s)이지만 리스 버퍼 재사용이 5%이므로 출력에315s가 표시됩니다.참고리스를 재사용할 수 있는 경우 etcd는 이를 재사용합니다.
TTL속성이 필요한 모든 리소스에 대해 고유한 etcd 리스를 생성하는 대신 API 서버에서 수천 개의 개별 오브젝트를 추적하도록 강제하여 시스템은 기존 리스를 더 적은 수의 리스를 재사용합니다. 새로운 객체가 특정 기간 동안 리스를 필요로 할 때, 관리자는 여전히 그 기간을 충당할 수 있는 충분한 수명을 가진 기존 리스와 5%의 작은 안전 버퍼를 확인합니다. 일치 항목이 발견되면 새 개체는 기존 리스를 사용합니다. 그렇지 않은 경우 새 리스가 생성되고 다른 사용자가 공유할 수 있도록 풀에 추가됩니다.