작은 클러스터에서 부가기능 리소스 사용량 줄이기

이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터 부가기능에서 사용하는 리소스를 줄이는 방법을 설명합니다. 노드가 3개 이하인 클러스터나 리소스가 제한된 머신 유형을 사용하는 클러스터 같은 작은 클러스터에서 이러한 방법을 사용하세요.

개요

클러스터 노드는 워크로드 외에도 노드를 클러스터 제어 영역과 통합하고 기타 기능을 제공하는 몇 가지 부가기능을 실행합니다. 따라서 노드의 전체 리소스와 워크로드에 사용할 수 있는 리소스는 차이가 있습니다. GKE의 클러스터 아키텍처에 대해 자세히 알아보세요.

이러한 부가기능의 기본 구성은 일반적인 클러스터에 적합하지만 특정 클러스터 구성에 따라 부가기능의 리소스 사용량을 미세 조정할 수 있습니다. 또한 사용 사례에 필요하지 않은 일부 부가기능은 사용 중지할 수 있습니다.

미세 조정은 컴퓨팅 리소스가 제한된 클러스터(예를 들어 노드 개수가 하나이거나 아주 적은 클러스터 또는 저비용 머신 유형에서 실행되는 클러스터)에 특히 유용합니다. 작은 클러스터를 사용하여 GKE를 시험 사용하거나 새 기능을 실험할 수 있습니다.

부가기능 구성

각 개별 부가기능을 구성하여 노드 리소스에 미치는 영향을 줄일 수 있습니다.

부가기능은 클러스터의 가시성과 디버깅을 제공합니다. 예를 들어 프로덕션 워크로드를 실행하는 클러스터에서 모니터링을 사용 중지하면 문제를 디버깅하기가 더 어려워집니다.

Cloud Logging

Cloud Logging은 컨테이너와 시스템 로그를 자동으로 수집, 처리, 저장합니다.

Cloud Logging을 완전히 중지하거나 사용 설정된 상태로 두되 Fluentd 부가기능을 미세 조정하여 리소스 사용량을 제한할 수 있습니다.

Cloud Logging이 중지된 경우 로그 보기

Cloud Logging이 중지되어도 계속 최근 로그 항목을 볼 수 있습니다. 특정 Pod의 로그를 확인하려면 다음을 실행합니다.

kubectl logs -f pod-name

여기서 -f 옵션은 로그를 스트리밍합니다.

선택기와 일치하는 모든 Pod의 로그를 보려면 다음을 실행합니다.

kubectl logs -l selector

여기서 selector는 배포 선택기입니다(예: 'app=frontend').

Fluentd 미세 조정

로깅을 중지하지 않을 경우 Fluentd를 미세 조정하여 로깅에서 사용하는 리소스를 제한할 수 있습니다.

Fluentd는 노드에서 로그를 수집하여 Google Cloud 운영 제품군으로 보냅니다. Fluentd 에이전트는 DaemonSet를 사용하여 클러스터에 배포되므로 에이전트의 인스턴스가 클러스터의 각 노드에서 실행됩니다. 로깅 데이터를 대량으로 작성하는 애플리케이션의 경우 Fluentd를 위해 추가 리소스가 필요할 수 있습니다.

요건에 맞는 확장 정책을 만들어 Fluentd의 리소스 할당을 미세 조정할 수 있습니다. 확장 정책은 포드의 리소스 요청과 한도를 정의합니다. Kubernetes 스케줄러가 리소스 요청과 한도를 처리하는 방법에 대해 알아보려면 컨테이너 컴퓨팅 리소스 관리를 참조하세요. 리소스 요청과 한도가 서비스 품질(QoS)에 미치는 영향에 대한 자세한 내용은 Kubernetes의 리소스 서비스 품질을 참조하세요.

Fluentd의 리소스 사용량을 측정하고 이러한 값을 사용하여 커스텀 확장 정책을 작성하는 방법에 대한 안내를 보려면 다음 섹션을 펼치세요.

Cloud Monitoring

Cloud Monitoring을 사용하는 것이 좋습니다. 다만 일부 리소스를 다시 확보하기 위해 모니터링을 사용 중지할 수 있습니다.

Cloud Monitoring에 대한 자세한 내용은 GKE 모니터링 개요를 참조하세요.

Cloud Monitoring에서 커스텀 측정항목과 함께 수평형 Pod 자동 확장 처리 부가기능을 사용하는 경우 클러스터에서 수평형 Pod 자동 확장 처리(HPA)를 중지해야 Cloud Monitoring을 완전히 중지할 수 있습니다.

Kubernetes Engine Monitoring

클러스터에서 Kubernetes Engine Monitoring을 사용 설정하거나 중지하려면 Kubernetes 콘솔을 사용합니다. 이 링크를 클릭하면 콘솔로 이동합니다.

수평형 Pod 자동 확장

수평형 Pod 자동 확장(HPA)은 CPU 사용량이나 메모리 같은 측정항목을 기반으로 배포의 복제본을 확장합니다. HPA가 필요없고 Cloud Monitoring을 이미 중지한 경우 HPA도 중지할 수 있습니다.

HPA를 중지하려면 다음 안내를 따르세요.

gcloud container clusters update cluster-name \
    --update-addons=HorizontalPodAutoscaling=DISABLED

HPA를 다시 사용 설정하려면 다음 안내를 따르세요.

gcloud container clusters update cluster-name \
    --update-addons=HorizontalPodAutoscaling=ENABLED

Kube DNS

Kube DNS는 클러스터에서 DNS 배포와 서비스를 예약하고, 클러스터의 pod는 Kube DNS 서비스를 사용하여 DNS 이름을 서비스, pod, 노드의 IP 주소와 공개 IP 주소로 확인합니다. Kube DNS는 example.com과 같은 공개 도메인 이름을 확인하고 servicename.namespace.svc.cluster.local과 같은 서비스 이름을 확인합니다. 서비스 및 pod의 DNS에 대해 자세히 알아보세요.

기본적으로 GKE는 고가용성을 위해 Kube DNS 복제본을 여러 개 실행합니다. 가용성이 높은 DNS가 필요하지 않으면 Kube DNS 복제본 수를 줄여 리소스를 보존하면 됩니다. DNS 이름 확인이 전혀 필요하지 않다면 Kube DNS를 완전히 사용 중지할 수 있습니다. Kube DNS를 중지하면 Pod에서 외부 DNS를 구성할 수 있습니다.

Kube DNS 복제 줄이기

kube-dns 자동 확장 처리를 중지하고 kube-dns를 복제본 1개로 줄이려면 다음을 실행합니다.

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

자동 확장을 사용 설정하려면 다음 안내를 따르세요.

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system

자동 확장을 더욱 정밀하게 제어하려면 자동 확장 매개변수를 조정합니다.

Kube DNS 중지

Kube DNS를 완전히 사용 중지할 수 있습니다. Kube DNS는 종속 서비스의 DNS 이름을 확인하는 워크로드에 필요합니다. 여기에는 공개 도메인 이름과 클러스터 서비스의 이름이 포함됩니다.

Kube DNS를 사용 중지하려면 다음을 실행합니다.

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=0 deployment/kube-dns --namespace=kube-system

Kube DNS를 사용 설정하려면 다음을 실행합니다.

kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

여기서 --replicas=1은 원하는 복제본 수입니다.

Kube DNS 자동 확장을 사용 설정하려면 다음을 실행합니다.

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system
Kube DNS 없이 DNS 조회

원하는 DNS 서비스로 외부 도메인 이름 확인을 사용하도록 pod를 구성할 수 있습니다. 다음 예시는 외부 이름 조회에 Google Public DNS를 사용하는 pod를 보여줍니다.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
      - 8.8.4.4
Kube DNS 없이 서비스 검색

DNS 기반 서비스 검색의 대안으로 서비스 환경 변수를 사용할 수 있습니다. pod가 생성되면 pod와 동일한 네임스페이스에 있는 모든 서비스의 서비스 환경 변수가 자동으로 생성됩니다. 환경 변수는 pod를 만들기 전에 생성된 서비스에 대해서만 생성되기 때문에 이 방법은 Kube DNS보다 제한이 많습니다.

다음 단계