내용으로 건너뛰기

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

3분 분량
0

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

간략한 설명


Amazon EKS 워커 노드로 이미지 캐시를 정리하려면 다음 kubelet 폐영역 회수 인수를 사용하십시오.

  • --image-gc-high-threshold는 kubelet이 이미지 폐영역 회수를 실행하기 시작하는 디스크 사용량의 백분율을 정의합니다.
    참고: 이 인수의 기본값은 85%입니다.
  • --image-gc-low-threshold는 kubelet이 kubelet 이미지 폐영역 회수를 실행하는 디스크 사용량의 최저 백분율을 정의합니다.
    참고: 이 인수의 기본값은 80%입니다.

사용 사례에 따라 kubelet 폐영역 회수를 기본 구성 파일 또는 기존 노드에 추가합니다. 그런 다음, 노드 엔드포인트에 인수가 있는지 확인합니다.

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

해결 방법

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

kubelet 폐영역 회수 인수를 기본 kubelet-config에 추가

다음 단계를 완료하십시오.

  1. AMI에서 kubelet-config 파일을 업데이트하려면 다음 명령을 실행합니다.
    #!/bin/bashset -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 구성 파일을 사용하지 않는 경우 kubelet-config.json을 파일 이름으로 바꿉니다. 위 명령은 imageGCHighThresholdPercent를 **70%**로 설정하고 imageGCLowThresholdPercent를 **60%**로 설정합니다. 따라서 kubelet은 디스크 사용량이 70%에 도달하면 워커 노드의 이미지 캐시를 정리합니다. 디스크 사용량이 60% 미만인 경우, kubelet은 이미지 캐시를 정리하지 않습니다.
  2. 시작 템플릿을 사용하여 워커 노드 그룹을 생성합니다.

kubelet 폐영역 회수 인수를 기존 워커 노드에 추가

전제 조건: 기존 워커 노드에 대한 SSH 연결 액세스 권한이 있고 sudo 액세스 권한이 있어야 합니다.

kubelet 폐영역 회수 인수를 기존 워커 노드에 추가하려면 다음 단계를 완료하십시오.

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

  2. 워커 노드에서 /etc/kubernetes/kubelet/kubelet-config.json 파일을 열려면 다음 명령을 실행합니다.

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json

    eksctl을 사용하여 워커 노드를 시작한 경우 다음 명령을 실행하여 /etc/eksctl/kubelet.yaml을 엽니다.

    sudo vi /etc/eksctl/kubelet.yaml
  3. kubelet-config.json 파일에 kubelet 폐영역 회수 인수를 추가한 다음, 파일을 저장합니다. 예시 파일은 다음과 같습니다.

    {  "kind": "KubeletConfiguration",  "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }

    참고: 위 명령은 imageGCHighThresholdPercent를 **70%**로 설정하고 imageGCLowThresholdPercent를 **60%**로 설정합니다.
    eksctl을 사용하여 워커 노드를 시작한 경우, kubelet.yaml 파일에 kubelet 폐영역 회수 인수를 추가한 후 파일을 저장합니다. 예시 파일은 다음과 같습니다.

    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

    참고: 위 명령은 imageGCHighThresholdPercent를 **70%**로 설정하고 imageGCLowThresholdPercent를 **60%**로 설정합니다.

  4. 워커 노드에서 kubelet 서비스를 다시 시작하려면 다음 명령을 실행합니다.

    sudo service kubelet restart
  5. Amazon EKS 클러스터의 각 기존 워커 노드에 대해 이전 해결 단계를 반복합니다.

새 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을 사용할 수 없는 경우 웹 브라우저에서 http://localhost:8001/api/v1/nodes/node_name/proxy/configz URL을 여십시오.
    출력 예시:

    {"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
      .
      .
    }
    }

    참고: 위 명령 출력은 kubeletconfigbootstrap.sh 파일에 대한 설정을 보여줍니다.

AWS 공식업데이트됨 6달 전