노드 시스템 구성 맞춤설정


노드 시스템 구성은 Kubernetes 노드 에이전트(kubelet) 및 노드 풀에서 하위 수준의 Linux 커널 구성(sysctl)에 대한 커스텀 구성을 지정할 수 있는 구성 파일입니다.

노드 시스템 구성 사용

노드 시스템 구성을 사용하려면 다음 안내를 따르세요.

  1. 구성 파일을 만듭니다. 이 파일에는 kubeletsysctl 구성이 포함되어 있습니다.
  2. 클러스터를 만들 때 또는 노드 풀을 만들거나 업데이트할 때 구성을 추가합니다.

구성 파일 만들기

YAML로 노드 시스템 구성 파일을 작성합니다. 다음 예시는 kubeletsysctl 옵션에 대해 구성을 추가하는 방법을 보여줍니다.

kubeletConfig:
  cpuManagerPolicy: static
linuxConfig:
 sysctl:
   net.core.somaxconn: '2048'
   net.ipv4.tcp_rmem: '4096 87380 6291456'

예를 들면 다음과 같습니다.

  • cpuManagerPolicy: static정적 CPU 관리 정책을 사용하도록 kubelet를 구성합니다.
  • net.core.somaxconn: '2048'socket listen() 백로그를 2,048바이트로 제한합니다.
  • net.ipv4.tcp_rmem: '4096 87380 6291456'은 TCP 소켓의 최솟값, 기본값, 최댓값을 각각 4,096바이트, 87,380바이트, 6,291,456바이트로 설정합니다.

kubelet 또는 sysctl에 대해서만 구성을 추가하려면 구성 파일에 해당 섹션만 포함합니다. 예를 들어 kubelet 구성을 추가하려면 다음 파일을 만듭니다.

kubeletConfig:
  cpuManagerPolicy: static

구성 파일에 추가할 수 있는 필드의 전체 목록은 Kubelet 구성 옵션Sysctl 구성 옵션 섹션을 참조하세요.

노드 풀에 구성 추가

구성 파일을 만든 후 gcloud 명령줄 도구를 사용하여 --system-config-from-file 플래그를 추가합니다. 클러스터를 만들 때 또는 노드 풀을 만들거나 업데이트할 때 이 플래그를 추가할 수 있습니다. Google Cloud Console을 사용해서는 노드 시스템 구성을 추가할 수 없습니다.

노드 시스템 구성을 추가하려면 다음 명령어를 실행합니다.

클러스터 만들기

gcloud container clusters create CLUSTER_NAME \
    --system-config-from-file=SYSTEM_CONFIG_PATH

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름입니다.
  • SYSTEM_CONFIG_PATH: kubeletsysctl 구성이 포함된 파일의 경로입니다.

노드 시스템 구성을 적용한 후 클러스터의 기본 노드 풀에 정의된 설정이 사용됩니다.

노드 풀 만들기

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --system-config-from-file=SYSTEM_CONFIG_PATH

다음을 바꿉니다.

  • POOL_NAME: 노드 풀의 이름입니다.
  • CLUSTER_NAME: 노드 풀을 추가하려는 클러스터의 이름입니다.
  • SYSTEM_CONFIG_PATH: kubeletsysctl 구성이 포함된 파일의 경로입니다.

노드 풀 업데이트

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME
    --system-config-from-file=SYSTEM_CONFIG_PATH

다음을 바꿉니다.

  • POOL_NAME: 업데이트하려는 노드 풀의 이름입니다.
  • CLUSTER_NAME: 업데이트하려는 클러스터의 이름입니다.
  • SYSTEM_CONFIG_PATH: kubeletsysctl 구성이 포함된 파일의 경로입니다.

노드 시스템 구성 수정

노드 시스템 구성을 수정하려면 원하는 구성을 사용하여 새 노드 풀을 만들거나 기존 노드 풀의 노드 시스템 구성을 업데이트하면 됩니다.

노드 풀을 만들어 수정

노드 풀을 만들어서 노드 시스템 구성을 수정하려면 다음 안내를 따르세요.

  1. 원하는 구성을 사용하여 구성 파일을 만듭니다.
  2. 새 노드 풀에 구성을 추가합니다.
  3. 워크로드를 새 노드 풀로 마이그레이션합니다.
  4. 이전 노드 풀을 삭제합니다.

기존 노드 풀을 업데이트하여 수정

기존 노드 풀을 업데이트하여 노드 시스템 구성을 수정하려면 원하는 값을 사용하여 노드 시스템 구성을 업데이트합니다. 노드 시스템 구성을 업데이트하면 노드 풀의 시스템 구성이 새 구성으로 재정의됩니다. 업데이트 중 매개변수를 생략하면 해당 기본값으로 설정됩니다.

노드 시스템 구성을 다시 기본값으로 재설정하려면 kubeletsysctl에 빈 값을 사용해서 구성 파일을 업데이트합니다. 예를 들면 다음과 같습니다.

kubeletConfig: {}
linuxConfig:
  sysctl: {}

노드 시스템 구성 삭제

노드 시스템 구성을 삭제하려면 다음 안내를 따르세요.

  1. 노드 풀을 만듭니다.
  2. 워크로드를 새 노드 풀로 마이그레이션합니다.
  3. 이전 노드 시스템 구성이 있는 노드 풀을 삭제합니다.

Kubelet 구성 옵션

다음 표에서는 수정할 수 있는 kubelet 옵션을 보여줍니다.

Kubelet 구성 설정 제한사항 기본 설정 설명
cpuManagerPolicy 값은 none 또는 static이어야 합니다. none 이 설정은 kubelet의 CPU 관리자 정책을 제어합니다. 기본값은 OS 스케줄러가 자동으로 수행하는 것 이상의 어피니티를 제공하지 않는 기본 CPU 어피니티 스키마인 none입니다.

이 값을 static으로 설정하면 보장 QoS 클래스에서 정수 CPU 요청을 사용하는 Pod에 단독 CPU 사용을 지정할 수 있습니다.
cpuCFSQuota 값은 true 또는 false이어야 합니다. true 이 설정은 pod의 CPU 한도를 적용합니다. 이 값을 false로 설정하면 pod의 CPU 한도가 무시됩니다.

pod가 CPU 한도에 민감한 경우 특정 경우에 CPU 한도를 무시하는 것이 좋습니다. cpuCFSQuota를 사용 중지할 경우 악의적인 pod가 의도한 것보다 더 많은 CPU 리소스를 사용할 수 있습니다.
cpuCFSQuotaPeriod 값은 기간이어야 합니다. "100ms" 이 설정은 CPU CFS 할당량 기간 값인 cpu.cfs_period_us를 설정합니다. 이 값은 CPU 리소스에 대한 cgroup의 액세스를 다시 할당해야 하는 빈도에 대한 기간을 지정합니다. 이 옵션을 사용하면 CPU 제한 동작을 조정할 수 있습니다.

Sysctl 구성 옵션

시스템 성능을 조정하려면 다음 커널 속성을 수정하면 됩니다.

  • net.core.netdev_max_backlog
  • net.core.rmem_max
  • net.core.wmem_default
  • net.core.wmem_max
  • net.core.optmem_max
  • net.core.somaxconn
  • net.ipv4.tcp_rmem
  • net.ipv4.tcp_wmem
  • net.ipv4.tcp_tw_reuse

이러한 속성에 대한 자세한 내용은 Linux 커널 sysctl 문서를 참조하세요.

다른 Linux 네임스페이스는 지정된 sysctl에 대해 고유 값을 가질 수 있으며, 다른 것들은 전체 노드에 대해 전역적입니다. 노드 시스템 구성을 사용하여 sysctl 옵션을 업데이트하면 노드 및 각 네임스페이스에서 sysctl이 전역적으로 적용되도록 보장하여, 각 Pod가 각 Linux 네임스페이스에서 동일한 sysctl 값을 갖게 합니다.

다음 단계