이 문서에서는 노드 시스템 구성이라는 구성 파일을 사용하여 Google Kubernetes Engine(GKE) 노드 구성을 맞춤설정하는 방법을 보여줍니다.
개요
다양한 방법을 사용해서 노드 구성을 맞춤설정할 수 있습니다. 예를 들어 노드 풀을 만들 때 머신 유형 및 최소 CPU 플랫폼과 같은 매개변수를 지정할 수 있습니다.
노드 시스템 구성은 시스템 설정의 제한된 집합을 조정하는 방법을 제공하는 구성 파일입니다. 노드 시스템 구성을 사용하여 Kubernetes 노드 에이전트(kubelet
) 및 노드 풀의 하위 수준 Linux 커널 구성(sysctl
)의 커스텀 설정을 지정할 수 있습니다.
런타임 구성 파일이라는 다른 파일을 사용하여 GKE 노드에서 containerd 컨테이너 런타임을 맞춤설정할 수도 있습니다. 자세한 내용은 GKE 노드에서 containerd 구성 맞춤설정을 참조하세요.
또한 다음 방법을 사용하여 추가 맞춤설정을 지정할 수 있습니다.
- Fluentd를 사용하여 GKE용 Cloud Logging 로그 맞춤설정과 같은 시스템 구성요소 교체
- DaemonSet로 GKE 노드 자동 부트스트랩에서와 같이 DaemonSet를 사용하여 노드를 맞춤설정합니다.
노드 시스템 구성 사용
노드 시스템 구성을 사용하려면 다음 안내를 따르세요.
- 구성 파일을 만듭니다. 이 파일에는
kubelet
및sysctl
구성이 포함되어 있습니다. - 클러스터를 만들 때 또는 노드 풀을 만들거나 업데이트할 때 구성을 추가합니다.
구성 파일 만들기
YAML로 노드 시스템 구성 파일을 작성합니다. 다음 예시는 kubelet
및 sysctl
옵션에 대해 구성을 추가하는 방법을 보여줍니다.
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 구성 옵션 섹션을 참조하세요.
노드 풀에 구성 추가
구성 파일을 만든 후 Google Cloud CLI를 사용하여 --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
:kubelet
및sysctl
구성이 포함된 파일의 경로입니다.
노드 시스템 구성을 적용한 후 클러스터의 기본 노드 풀에 정의된 설정이 사용됩니다.
노드 풀 만들기
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
다음을 바꿉니다.
POOL_NAME
: 노드 풀의 이름입니다.CLUSTER_NAME
: 노드 풀을 추가하려는 클러스터의 이름입니다.SYSTEM_CONFIG_PATH
:kubelet
및sysctl
구성이 포함된 파일의 경로입니다.
노드 풀 업데이트
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
다음을 바꿉니다.
POOL_NAME
: 업데이트하려는 노드 풀의 이름입니다.CLUSTER_NAME
: 업데이트하려는 클러스터의 이름입니다.SYSTEM_CONFIG_PATH
:kubelet
및sysctl
구성이 포함된 파일의 경로입니다.
노드 시스템 구성 수정
노드 시스템 구성을 수정하려면 원하는 구성을 사용하여 새 노드 풀을 만들거나 기존 노드 풀의 노드 시스템 구성을 업데이트하면 됩니다.
노드 풀을 만들어 수정
노드 풀을 만들어서 노드 시스템 구성을 수정하려면 다음 안내를 따르세요.
- 원하는 구성을 사용하여 구성 파일을 만듭니다.
- 새 노드 풀에 구성을 추가합니다.
- 워크로드를 새 노드 풀로 마이그레이션합니다.
- 이전 노드 풀을 삭제합니다.
기존 노드 풀을 업데이트하여 수정
기존 노드 풀을 업데이트하여 노드 시스템 구성을 수정하려면 원하는 값을 사용하여 노드 시스템 구성을 업데이트합니다. 노드 시스템 구성을 업데이트하면 노드 풀의 시스템 구성이 새 구성으로 재정의됩니다. 업데이트 중 매개변수를 생략하면 해당 기본값으로 설정됩니다.
노드 시스템 구성을 다시 기본값으로 재설정하려면 kubelet
및 sysctl
에 빈 값을 사용해서 구성 파일을 업데이트합니다. 예를 들면 다음과 같습니다.
kubeletConfig: {}
linuxConfig:
sysctl: {}
노드 시스템 구성 삭제
노드 시스템 구성을 삭제하려면 다음 안내를 따르세요.
- 노드 풀을 만듭니다.
- 워크로드를 새 노드 풀로 마이그레이션합니다.
- 이전 노드 시스템 구성이 있는 노드 풀을 삭제합니다.
Kubelet 구성 옵션
다음 표에서는 수정할 수 있는 kubelet
옵션을 보여줍니다.
Kubelet 구성 설정 | 제한사항 | 기본 설정 | 설명 |
---|---|---|---|
cpuManagerPolicy |
값은 none 또는 static 이어야 합니다.
|
none
|
이 설정은 kubelet의 CPU 관리자 정책을 제어합니다. 기본값은 OS 스케줄러가 자동으로 수행하는 것 이상의 어피니티를 제공하지 않는 기본 CPU 어피니티 스키마인 none 입니다.이 값을 static 으로 설정하면 보장 QoS 클래스에서 정수 CPU 요청을 사용하는 포드에 단독 CPU 사용을 지정할 수 있습니다. |
cpuCFSQuota |
값은 true 또는 false 이어야 합니다.
|
true
|
이 설정은 포드의 CPU 한도를 적용합니다. 이 값을 false 로 설정하면 포드의 CPU 한도가 무시됩니다.포드가 CPU 한도에 민감한 경우 특정 경우에 CPU 한도를 무시하는 것이 좋습니다. cpuCFSQuota 를 사용 중지할 경우 악의적인 포드가 의도한 것보다 더 많은 CPU 리소스를 사용할 수 있습니다.
|
cpuCFSQuotaPeriod | 값은 기간이어야 합니다. |
"100ms"
|
이 설정은 CPU CFS 할당량 기간 값인 cpu.cfs_period_us 를 설정합니다. 이 값은 CPU 리소스에 대한 cgroup의 액세스를 다시 할당해야 하는 빈도에 대한 기간을 지정합니다. 이 옵션을 사용하면 CPU 제한 동작을 조정할 수 있습니다. |
podPidsLimit | 값은 1024에서 4194304 사이여야 합니다. |
none
|
이 설정은 각 포드가 사용할 수 있는 최대 프로세스 ID(PID) 수를 설정합니다. |
Sysctl 구성 옵션
시스템 성능을 조정하려면 다음 커널 속성을 수정하면 됩니다.
net.core.busy_poll
net.core.busy_read
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
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
다른 Linux 네임스페이스는 지정된 sysctl
에 대해 고유 값을 가질 수 있으며, 다른 것들은 전체 노드에 대해 전역적입니다. 노드 시스템 구성을 사용하여 sysctl
옵션을 업데이트하면 노드 및 각 네임스페이스에서 sysctl
이 전역적으로 적용되도록 보장하여, 각 포드가 각 Linux 네임스페이스에서 동일한 sysctl
값을 갖게 합니다.
Linux cgroup 모드 구성 옵션
kubelet 및 컨테이너 런타임은 포드에서 각 컨테이너가 액세스할 수 있는 CPU 또는 메모리 양을 제한하는 것과 같은 리소스 관리를 위해 Linux 커널 cgroups를 사용합니다. 커널에는 cgroupv1
및 cgroupv2
의 두 가지 cgroup 하위 시스템 버전이 있습니다.
cgroupv2
에 대한 Kubernetes 지원은 Kubernetes 버전 1.18에서 알파, 1.22에서 베타, 1.25에서 GA로 도입되었습니다. 자세한 내용은 Kubernetes cgroups v2 문서를 참조하세요.
노드 시스템 구성에 따라 노드 풀의 cgroup 구성을 맞춤설정할 수 있습니다. cgroupv1
또는 cgroupv2
를 사용할 수 있습니다. GKE는 버전 1.26 이상을 실행하는 새 노드 풀에 cgroupv2
를 사용하고 1.26 이전 버전에 cgroupv1
을 사용합니다.
노드 시스템 구성을 사용하여 cgroupv1
또는 cgroupv2
를 명시적으로 사용하도록 노드 풀 설정을 변경할 수 있습니다. 기존 노드 풀을 1.26으로 업그레이드해도 설정은 cgroupv2
로 변경되지 않습니다. 맞춤설정된 cgroup 구성이 없는 1.26 이전 버전을 실행하는 기존 노드 풀은 계속 사용되기 때문입니다. 명시적으로 지정하지 않으면 계속 cgroupv1
를 사용합니다.
예를 들어 cgroupv2
를 사용하도록 노드 풀을 구성하려면 다음과 같이 노드 시스템 구성 파일을 사용합니다.
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
지원되는 cgroupMode
옵션은 다음과 같습니다.
CGROUP_MODE_V1
: 노드 풀에cgroupv1
을 사용합니다.CGROUP_MODE_V2
: 노드 풀에cgroupv2
를 사용합니다.CGROUP_MODE_UNSPECIFIED
: 기본 GKE cgroup 구성을 사용합니다.
cgroupv2
를 사용하려면 다음 요구사항 및 제한사항이 적용됩니다.
- 1.26 이전 버전을 실행하는 노드 풀의 경우 gcloud CLI 버전 408.0.0 이상을 사용해야 합니다. 또는 395.0.0 이상 버전의 gcloud beta를 사용합니다.
- 클러스터 및 노드 풀에서 GKE 버전 1.24.2-gke.300 이상을 실행해야 합니다.
- Container-Optimized OS를 컨테이너화된 노드 이미지와 함께 사용해야 합니다.
- 워크로드가 cgroup 파일 시스템(
/sys/fs/cgroup/...
) 읽기에 의존할 경우cgroupv2
API와 호환되는지 확인합니다.- 모니터링 또는 타사 도구가
cgroupv2
와 호환되는지 확인합니다.
- 모니터링 또는 타사 도구가
- JDK(Java 워크로드)를 사용하는 경우 JDK
8u372
, JDK 11.0.16 이상, JDK 15 이상을 포함하여 cgroupv2를 완전히 지원하는 버전을 사용하는 것이 좋습니다.
cgroup 구성 확인
노드 시스템 구성을 추가할 때 변경사항을 적용하려면 GKE에서 노드를 다시 만들어야 합니다. 노드 풀에 구성을 추가하고 노드가 다시 생성되면 새 구성을 확인할 수 있습니다.
이 노드 풀에 있는 노드의 cgroup 구성을 확인하려면 노드를 선택하고 다음 안내에 따라 연결합니다.
- 노드 풀의 모든 노드를 사용하여 대화형 셸을 만듭니다. 명령어의
mynode
을 노드 풀의 노드 이름으로 바꿉니다. - Linux 노드에서 cgroup 버전 식별합니다.