지정된 디스크 사용량 비율로 이미지 캐시를 정리하도록 Amazon EKS 워커 노드를 구성하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 워커 노드를 사용하여 지정된 디스크 사용량 비율로 이미지 캐시를 정리하려고 합니다.

간략한 설명


Amazon EKS 워커 노드로 이미지 캐시를 정리하려면 다음 kubelet 가비지 수집 인수를 사용합니다.

  • --image-gc-high-threshold 인수는 이미지 가비지 수집을 시작하는 디스크 사용량의 백분율을 정의합니다. 기본값은 85%입니다.
  • --image-gc-low-threshold 인수는 LowThresholdPercent 값을 정의합니다. kubelet은 디스크 사용량이 이 값에 도달할 때까지 이미지를 삭제합니다. 기본값은 50%입니다.

참고: 다음 해결 방법에서 kubelet 가비지 수집 인수는 디스크 사용량이 70%에 도달하면 워커 노드의 이미지 캐시를 정리합니다. --image-gc-high-threshold는 70%로 설정됩니다. --image-gc-low-threshold는 50%로 설정됩니다.

사용 사례에 따라 해결 단계에 따라 kubelet 가비지 수집을 기본 구성 파일 또는 기존 보드에 추가합니다. 그런 다음 노드 엔드포인트에 인수가 있는지 확인합니다.

자세한 내용은 Kubernetes 웹 사이트에서 사용되지 않는 컨테이너 및 이미지의 가비지 수집을 참조하세요.

해결 방법

참고: 다음 해결 방법은 Amazon EKS 최적화 Linux AMI에 적용됩니다.

kubelet 가비지 수집 인수를 기본 kubelet-config에 추가합니다.

Amazon EKS의 사용자 지정 시작 템플릿 기능을 사용하여 Amazon 머신 이미지(AMI)의 기본 kubelet-config 파일에 kubelet 가비지 수집 인수를 추가합니다. 시작 템플릿을 만들 때 UserData에서 인수를 지정합니다.

  1. 다음 명령은 AMI의 KUBELET_CONFIG 파일을 업데이트합니다. imageGCHighThresholdPercent=70 및 imageGCLowThresholdPercent=60을 설정합니다. 자세한 내용은 인스턴스 세부 정보 구성을 참조하세요.
    #!/bin/bash
    set -o xtrace
    
    KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json
    
    # Inject imageGCHighThresholdPercent value unless it has already been set.
    if ! grep -q imageGCHighThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCHighThresholdPercent=70" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    # Inject imageGCLowThresholdPercent value unless it has already been set.
    if ! grep -q imageGCLowThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCLowThresholdPercent=60" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    /etc/eks/bootstrap.sh your-cluster-name
    참고: your-cluster-name을 Amazon EKS 클러스터 이름으로 바꿉니다. 기본 kubelet 구성 파일을 사용하지 않는 경우 파일 이름을 업데이트합니다.
  2. 시작 템플릿을 사용하여 워커 노드 그룹을 생성합니다.

kubelet 가비지 수집집 인수를 기존 워커 노드에 추가합니다

중요: 다음 단계에서는 SSH를 사용하여 기존 워커 노드에 연결하고 sudo 액세스 권한이 있어야 합니다. Amazon EKS 클러스터의 모든 기존 워커 노드에서 다음 단계를 완료해야 합니다.

  1. SSH를 사용하여 기존 워커 노드에 연결합니다.

  2. 워커 노드에서 /etc/kubernetes/kubelet/kubelet-config.json 파일을 엽니다. EKSCTL을 사용하여 워커 노드를 시작한 경우 /etc/eksctl/kubelet.yaml을 엽니다.

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. 워커 노드를 시작한 방법에 따라 kubelet 가비지 수집 인수를 kubelet-config.json 또는 kubelet.yaml 파일에 추가합니다. 그런 다음 파일을 저장합니다.

    {  "kind": "KubeletConfiguration",
      "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }
    
    
    #WORKER NODES LAUNCHED USING EKSCTL
    
    kind: KubeletConfiguration
    kubeReserved:
      cpu: 70m
      ephemeral-storage: 1Gi
      memory: 1843Mi
    serverTLSBootstrap: true
    imageGCHighThresholdPercent: 70        ==> Add the arguments under the alignment "Kind" in the yaml file
    imageGCLowThresholdPercent: 60
  4. 워커 노드에서 kubelet 서비스를 다시 시작하려면 다음 명령을 실행합니다.

    sudo service kubelet restart

새 kubelet 가비지 수집 인수가 노드 configz 엔드포인트에 있는지 확인합니다.

  1. 워커 노드의 이름을 가져오려면 다음 명령을 실행합니다.

    kubectl get nodes
  2. API 서버에 대한 연결을 열려면 다음 명령을 실행합니다.

    kubectl proxy
  3. 노드 configz를 확인하려면 새 터미널을 엽니다. 그리고 나서 다음 명령을 실행합니다.

    curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool

    참고: node_name를 이전에 검색한 노드 목록의 노드 이름으로 바꿉니다. cURL 및 Python을 사용할 수 없는 경우 웹 브라우저에서 URL을 엽니다.

    이 명령은 kubeletconfig의 출력을 반환합니다. 이 출력에는 bootstrap.sh 파일의 설정이 포함됩니다. 다음 예시를 참조하세요.

    {"kubeletconfig": {
      .
      .
      "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
      "imageGCLowThresholdPercent": 60,           <=== The new value is set to 50 as given in UserData
      .
      .
    }
    }
AWS 공식
AWS 공식업데이트됨 2달 전
댓글 없음