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

최종 업데이트 날짜: 2020년 6월 10일

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

간략한 설명

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

  • --image-gc-high-threshold 인수는 이미지 가비지 수집을 트리거하는 디스크 사용량 비율을 정의합니다. 기본값은 85%입니다.
  • --image-gc-low-threshold 인수는 이미지 가비지 수집이 해제를 시도하는 디스크 사용량 비율을 정의합니다. 기본값은 80%입니다.

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

kubelet 가비지 수집 인수를 새 Amazon EKS 작업자 노드에 추가하려면 다음 섹션의 단계를 완료하십시오.

  1. kubelet 가비지 수집 인수를 사용하여 작업자 노드 생성
  2. 새 kubelet 가비지 수집 인수가 노드의 configz 엔드포인트에 있는지 확인

kubelet 가비지 수집 인수를 기존 Amazon EKS 작업자 노드에 추가하려면 다음 섹션의 단계를 완료하십시오.

  1. 기존 작업자 노드에 kubelet 가비지 수집 인수 추가
  2. 새 kubelet 가비지 수집 인수가 노드의 configz 엔드포인트에 있는지 확인

해결 방법

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

kubelet 가비지 수집 인수를 사용하여 작업자 노드 생성

1.    Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작합니다. 3단계: 인스턴스 세부 정보 구성 페이지의 UserData 섹션에서 kubelet 인수 --image-gc-low-threshold--image-gc-high-threshold를 포함해야 합니다.

예:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh your-cluster-name --kubelet-extra-args '--image-gc-low-threshold=50 --image-gc-high-threshold=70'

참고: your-cluster-name을 해당하는 Amazon EKS 클러스터 이름으로 바꾸십시오.

2.    작업자 노드를 Amazon EKS 클러스터에 추가합니다.

3.    인수의 변경 사항을 확인하려면 새 kubelet 가비지 수집 인수가 노드의 configz 엔드포인트에 있는지 확인 섹션의 단계를 수행합니다.

기존 작업자 노드에 kubelet 가비지 수집 인수 추가

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

1.    SSH를 사용하여 기존 작업자 노드에 연결합니다.

2.    작업자 노드에서 /etc/kuberentes/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": 50,
  "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: 50

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

sudo service kubelet restart

5.    인수의 변경 사항을 확인하려면 새 kubelet 가비지 수집 인수가 노드의 configz 엔드포인트에 있는지 확인 섹션의 단계를 수행합니다.

새 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을 1단계에서 검색한 노드 목록의 노드 이름으로 바꿉니다. curl 및 python을 사용할 수 없는 경우 웹 브라우저에서 URL을 열 수 있습니다.

앞의 명령은 bootstrap.sh 파일의 설정이 포함된 kubeletconfig의 출력을 반환합니다.

예:

{
"kubeletconfig": {
  .
  .
  "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
  "imageGCLowThresholdPercent": 50,           <=== The new value is set to 50 as given in UserData
  .
  .
}
}

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?