내용으로 건너뛰기

Amazon EKS 워커 노드의 디스크 압력을 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 워커 노드의 과도한 디스크 압력을 해결하고 싶습니다.

간략한 설명

Kubernetes 워커 노드의 디스크 압력은 사용 가능한 디스크 공간이 낮은 수준으로 떨어지면 발생합니다. 디스크 압력을 줄이려면 EBS 볼륨 크기를 늘리거나 노드 그룹에 새 워커 노드를 추가하여 디스크 용량을 늘리십시오. 또한 Kubelet 이미지 폐영역 회수 임계값을 조정하고, 컨테이너 런타임 로그 회전을 구성하고, 사용하지 않는 이미지를 수동으로 정리하여 디스크 사용량을 효과적으로 관리할 수 있습니다.

디스크 압력 문제를 방지하고 Kubernetes 클러스터가 올바르게 실행되도록 하려면 임시 스토리지를 모니터링하고 관리하는 것이 중요합니다.

디스크 압력이 너무 크면 오류 메시지가 나타날 수 있습니다.

노드의 경우 다음과 비슷한 오류 메시지가 표시될 수 있습니다.

"Warning DiskPressure ... kubelet, worker-node DiskPressure on node"

Kubelet의 경우 다음과 비슷한 오류 메시지가 표시될 수 있습니다.

"Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold"

문제를 확인하려면 df -h 명령을 실행하여 워커 노드의 디스크 사용량을 확인합니다.

출력 예시:

/dev/nvme0n1p1   20G   18G  2.2G  90% /       
........

참고: 위 예제에서 루트 파일 시스템 /dev/nvme0n1p1의 사용량은 90%입니다. 사용량이 많으면 디스크 압력 및 이미지 폐영역 회수 실패 문제가 발생합니다.

해결 방법

EBS 볼륨 크기 늘리기

사용 가능한 디스크 공간을 늘리려면 워커 노드에 연결된 EBS 볼륨의 크기를 늘리십시오. 자세한 내용은 EBS 볼륨 크기를 늘리거나 줄이려면 어떻게 해야 합니까?를 참조하십시오.

참고: 임시 볼륨의 크기를 조정하는 것보다 원하는 디스크 크기로 새 인스턴스를 프로비저닝하는 것이 모범 사례입니다. 새 인스턴스를 사용하여 이전 인스턴스를 대체하십시오. 그러면 새 인스턴스에 올바른 디스크 크기가 설정되고 변경 불가능한 인프라 사고방식에 맞게 조정됩니다.

노드 그룹에 새 워커 노드 추가

여러 노드에 워크로드를 분산하려면 노드 그룹 또는 풀에 새 노드를 추가하여 클러스터에 디스크 볼륨을 추가합니다. 이렇게 하면 모든 단일 노드의 디스크 압력이 줄어듭니다.

Kubelet 폐영역 회수기에 대한 사용자 지정 임계값 설정

다양한 디스크 사용 임계값에서 이미지 폐영역 회수를 시작하도록 Kubelet을 구성합니다. 이렇게 하려면 더 많은 버퍼를 허용하도록 --image-gc-high-threshold--image-gc-low-threshold 인수를 설정하십시오. 예를 들어, 디스크 여유 공간의 버퍼를 더 크게 유지하려면 높은 임계값을 70%로 설정하고 낮은 임계값을 60%로 설정합니다. 이렇게 구성하면 디스크가 임계값까지 가득 차기 전에 Kubelet에서 이미지 폐영역 회수를 수행할 수 있습니다.

워커 노드에서 이러한 인수를 구성하는 방법에 대한 자세한 내용은 디스크 사용량이 지정된 비율에 도달하면 이미지 캐시를 정리하도록 Amazon EKS 워커 노드를 구성하려면 어떻게 해야 합니까?를 참조하십시오.

컨테이너 런타임 로그 회전 확인 및 조정

컨테이너화된 애플리케이션이 stdoutstderr에 로그를 기록하고 컨테이너 런타임에서 로그 파일을 관리합니다. 워커 노드의 컨테이너 런타임에 대한 로그 회전 설정을 조정하는 것이 모범 사례입니다.

로그 회전을 구성하려면 containerd의 경우 구성 파일 /etc/cotainerd/config/toml에 containerd.runc.log 옵션을 사용하십시오. 회전 로그 파일의 최대 수와 각 로그 파일의 최대 크기를 제어하려면 log_file_maxlog_file_max_size 옵션을 설정하십시오.

사용하지 않는 컨테이너 이미지 정리

Kubelet에서 이미지 폐영역 회수를 자동으로 수행할 수 없는 경우, 워커 노드에서 사용되지 않는 컨테이너 이미지를 수동으로 정리하십시오. 대기 중이거나 사용하지 않는 이미지를 제거하고 상당한 디스크 공간을 확보하려면 crictl rmi --prune 명령을 사용하십시오.

임시 스토리지 관리

애플리케이션의 장기적인 안정성과 원활한 운영을 위해서는 임시 스토리지를 적절하게 관리하는 것이 모범 사례입니다. 임시 스토리지에 제한을 설정하지 않으면 포드가 실행되는 노드의 디스크 공간을 모두 사용할 수 있습니다.

이러한 위험을 줄이려면 포드에 적절한 임시 스토리지 요청 및 제한을 설정해야 합니다. 한도를 정하려면 다음 조치를 취하십시오.

  • 포드 스토리지 요구 사항을 확인하려면 애플리케이션의 스토리지 요구 사항, 임시 데이터 및 임시 스토리지에 저장된 기타 파일을 분석하십시오. 그러면 각 포드의 스토리지 요구 사항을 추정할 수 있습니다.
  • 임시 스토리지 요청 및 제한을 설정하려면 포드가 제대로 작동하는 데 필요한 최소 임시 스토리지의 양을 정의하십시오. 그러면 Kubernetes 스케줄러가 충분한 스토리지 리소스가 있는 노드를 포드에 할당할 수 있습니다.
    예:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:latest
        resources:
            requests:
                ephemeral-storage: "1Mi"
            limits:
                ephemeral-storage: "2Mi"
AWS 공식업데이트됨 일 년 전