노드 이미지


이 페이지에서는 Google Kubernetes Engine(GKE) 노드에 사용할 수 있는 노드 이미지를 설명합니다.

GKE Autopilot 노드는 항상 권장되는 노드 운영체제인 containerd가 포함된 Container-Optimized OS(cos_containerd)입니다. GKE Standard를 사용하는 경우 클러스터 또는 노드 풀 생성 중에 각 노드에서 실행되는 운영체제 이미지를 선택할 수 있습니다. 또한 다른 노드 이미지를 사용하도록 기존 표준 클러스터를 업그레이드할 수 있습니다. 노드 이미지 설정 방법에 대한 안내는 노드 이미지 지정을 참조하세요.

사용 가능한 노드 이미지

GKE는 클러스터의 OS에 따라 다음과 같은 노드 이미지 옵션을 제공합니다.

OS 노드 이미지
Container-Optimized OS
Ubuntu
Windows Server

Container-Optimized OS

Google의 Container-Optimized OS 노드 이미지는 최신 버전의 Linux 커널을 기반으로 하며 노드 보안을 향상시키도록 최적화되어 있습니다. Container-Optimized OS 이미지는 보안을 위해 이미지를 빠르게 패치하고 기능을 반복할 수 있는 Google 팀이 지원합니다. Container-Optimized OS 이미지는 다른 이미지보다 우수한 지원, 보안, 안정성을 제공합니다.

이미지 프로젝트와 계열에 대한 자세한 내용은 노드 이미지 소스 프로젝트를 참조하세요.

Container-Optimized OS 변이

Container-Optimized OS와 함께 2개의 컨테이너 런타임이 제공됩니다. 이미지는 컨테이너 런타임 선택을 제외하고는 이와 동일합니다.

  • containerd를 포함한 Container-Optimized OS(cos_containerd): cos_containerd 이미지는 Kubernetes와 직접 통합된 컨테이너 런타임으로 containerd를 사용합니다. GKE Autopilot 클러스터에는 항상 이 이미지가 사용됩니다. 자세한 내용은 Containerd 노드 이미지를 참조하세요.
  • Docker를 포함하는 Container-Optimized OS(cos): cos 이미지는 Docker 컨테이너 런타임을 사용합니다.

Ubuntu

Ubuntu 노드 이미지는 GKE 노드 이미지 요구 사항에 맞게 검증되었습니다. 노드에 XFS, CephFS 또는 Debian 패키지 지원이 필요하면 Ubuntu 노드 이미지를 사용해야 합니다.

이미지 프로젝트와 계열에 대한 자세한 내용은 운영체제별 기능 지원을 참조하세요.

Ubuntu 변이

2개의 컨테이너 런타임이 Ubuntu와 함께 제공됩니다. 이미지는 컨테이너 런타임 선택을 제외하고는 이와 동일합니다.

  • containerd를 포함한 Ubuntu(ubuntu_containerd): ubuntu_containerd 이미지는 컨테이너 런타임으로 containerd를 사용합니다. 자세한 내용은 Containerd 노드 이미지를 참조하세요.

  • Docker가 포함된 Ubuntu(ubuntu): ubuntu 이미지는 Docker를 컨테이너 런타임으로 사용합니다.

Windows Server

Windows Server 노드 풀을 사용하여 클러스터를 만들 때 Windows Server 반기 채널(SAC) 또는 Windows Server 장기 서비스 채널(LTSC) 노드 이미지를 사용할 수 있습니다. 모든 Windows 노드 이미지는 Windows Server Datacenter Core 이미지입니다. 단일 클러스터에는 다양한 Windows Server 버전을 사용하는 여러 Windows Server 노드 풀이 있을 수 있지만 각 개별 노드 풀은 하나의 Windows Server 버전만 사용할 수 있습니다. 자세한 내용은 Windows 노드 이미지 선택을 참조하세요.

Windows Server LTSC 및 SAC 노드 이미지와 함께 Docker 및 containerd의 2개의 컨테이너 런타임이 제공됩니다. 이미지는 컨테이너 런타임 선택을 제외하고는 이와 동일합니다.

  • Containerd 런타임 이미지(GKE 버전 1.21 이상에서 사용 가능):

    • containerd를 포함한 Windows Server LTSC(windows_ltsc_containerd): windows_ltsc_containerd 이미지는 컨테이너 런타임으로 containerd를 사용합니다. 현재 이 이미지 유형은 Windows Server 2022 및 Windows Server 2019의 두 노드 이미지에 매핑됩니다. windows-os-version 플래그를 사용한 CLI 명령어를 통해 Windows LTSC2022 노드 풀을 만들 수 있습니다.

      Windows Server 2022 노드 풀 만들기에 대한 자세한 내용은 Windows 노드 풀 만들기를 참조하세요.

      containerd 노드 이미지에 대한 자세한 내용은 containerd 노드 이미지를 참조하세요.

    • containerd를 사용하는 Windows Server SAC(windows_sac_containerd): windows_sac_containerd 이미지는 컨테이너 런타임으로 containerd를 사용합니다.

      자세한 내용은 containerd 노드 이미지를 참조하세요.

  • Docker 런타임 이미지(GKE 버전 1.16 이상에서 사용 가능):

    • Docker를 사용하는 Windows Server LTSC(windows_ltsc): windows_ltsc 이미지는 Docker를 컨테이너 런타임으로 사용합니다.
    • Docker를 사용하는 Windows Server SAC(windows_sac): windows_sac 이미지는 Docker를 컨테이너 런타임으로 사용합니다.

이미지 프로젝트와 계열에 대한 자세한 내용은 운영체제별 기능 지원을 참조하세요.

Linux 노드 이미지 비교

다음 섹션에서는 Container-Optimized OS와 Ubuntu 노드 이미지를 다음과 같은 운영적 측면에서 비교합니다.

  • 소프트웨어 패키지 관리
  • 시스템 초기화
  • 로그 수집
  • 파일 시스템 레이아웃
  • 스토리지 드라이버 지원

소프트웨어 패키지 관리자

coscos_containerd 노드 이미지는 Docker(containerd) 컨테이너 런타임 지원이 기본 제공되는 최소 루트 파일 시스템을 사용합니다. 이 파일 시스템은 호스트에 소프트웨어를 설치하기 위한 소프트웨어 패키지 관리자로도 사용됩니다. Ubuntu 이미지는 APT 패키지 관리자를 사용합니다.

Container-Optimized OS에서 소프트웨어 관리

Container-Optimized OS 이미지는 apt-get 같은 패키지 관리 소프트웨어를 제공하지 않습니다. 기존 메커니즘을 사용하여 노드에 임의 소프트웨어를 설치할 수 없습니다. 대신 필요한 소프트웨어가 포함된 컨테이너 이미지를 만듭니다.

디버깅 전용 표준 클러스터에서 Container-Optimized OS에는 ping, psmisc 또는 pstree 같은 일반적인 디버깅 도구를 설치하고 실행하기 위한 CoreOS 도구 상자가 포함됩니다. Container-Optimized OS 노드 디버깅에 대한 자세한 내용은 Container-Optimized OS 안내 가이드를 참조하세요.

Ubuntu에서 소프트웨어 관리

Ubuntu 이미지는 APT 패키지 관리자를 사용합니다. apt-get 명령어를 사용하면 이 이미지에 패키지를 설치할 수 있습니다. 예를 들어 ceph 패키지를 설치하려면 다음 명령어를 사용하세요.

sudo apt-get update
sudo apt-get install ceph

시스템 초기화

Container-Optimized OS와 Ubuntu 노드 이미지 모두 systemd를 사용하여 시스템 초기화 프로세스 중에 시스템 리소스와 서비스를 관리합니다.

두 노드 이미지 모두 systemd 서비스 파일을 사용하여 노드에서 services를 정의하고 systemd.targets를 사용하여 종속 항목을 통해 부트 대상을 그룹화합니다.

로그 수집

Container-Optimized OS와 Ubuntu 노드 이미지는 systemd-journald를 사용하여 시스템 전체 로그를 수집합니다.

Container-Optimized OS 및 Ubuntu에서 로그 보기

Container-Optimized OS를 포함한 노드 또는 Ubuntu 노드 이미지에서 로그를 확인하려면 journalctl 명령어를 사용해야 합니다. 예를 들어 containerd 데몬 로그를 보려면 다음 안내를 따르세요.

sudo journalctl -u containerd

kubelet 로그를 보려면 다음을 사용하세요.

sudo journalctl -u kubelet

파일 시스템 레이아웃

Ubuntu 노드 이미지는 표준 Linux 파일 시스템 레이아웃을 사용합니다.

Container-Optimized OS 노드 이미지 파일 시스템 레이아웃은 노드 보안을 향상시키도록 최적화되어 있습니다. 부트 디스크 공간은 세 가지 유형의 파티션으로 나뉩니다.

  • 루트 파티션 - 읽기 전용으로 마운트됩니다.
  • 상태 저장 파티션 - 쓰기 가능하고 상태 저장 특성을 갖습니다.
  • 상태 비추적 파티션 - 쓰기 가능하지만, 재부팅할 때 콘텐츠가 지속되지 않습니다.

Container-Optimized OS를 사용할 때는 컨테이너 외부의 파일 시스템 레이아웃에 대해 특정 요구 사항이 있는 고유 서비스를 실행할 경우 파티션 나누기에 주의해야 합니다.

Container-Optimized OS 파일 시스템 작업

다음은 컨테이너 최적화 OS 노드 이미지 파일 시스템의 경로 목록과 그 속성 및 권장 용도를 보여줍니다.

경로 속성 목적
/
  • 읽기 전용
  • 실행 가능
루트 파일 시스템이 무결성 유지를 위해 읽기 전용으로 마운트됩니다. 커널이 부팅 중 무결성 루트 파일 시스템을 확인하고, 오류 발생 시 부팅을 거절합니다.
/home
/var
  • 쓰기 가능
  • 실행 불가능
  • 스테이트풀(Stateful)
이러한 경로는 부팅 디스크의 수명 동안 지속되는 데이터를 저장하기 위한 용도로 사용됩니다. /mnt/stateful_partition에서 마운트됩니다.
/var/lib/google
/var/lib/docker
/var/lib/toolbox
  • 쓰기 가능
  • 실행 가능
  • 스테이트풀(Stateful)
이러한 경로는 각각 Compute Engine 패키지(예: 계정 관리자 서비스), Docker, 도구 상자의 작업 디렉터리입니다.
/var/lib/cloud
  • 쓰기 가능
  • 실행 가능
  • 스테이트리스(Stateless)
  • tmpfs
이 경로는 cloud-init 패키지의 작업 디렉터리입니다.
/etc
  • 쓰기 가능
  • 실행 불가능
  • 스테이트리스(Stateless)
  • tmpfs
일반적으로 구성이 저장됩니다(예: cloud-init를 통해 정의된 systemd 서비스). 인스턴스를 다시 시작할 때는 물론 인스턴스를 새로 생성할 때에도 cloud-init가 적용되므로 cloud-init에서 원하는 인스턴스 상태를 캡처하는 것이 좋습니다.
/tmp
  • 쓰기 가능
  • 실행 불가능
  • 스테이트리스(Stateless)
  • tmpfs
일반적으로 스크래치 공간으로 사용되며, 영구 데이터 저장을 위해 사용되지 않습니다.
/mnt/disks
  • 쓰기 가능
  • 실행 가능
  • 스테이트리스(Stateless)
  • tmpfs
/mnt/disks 아래의 디렉터리에 영구 디스크를 마운트할 수 있습니다.

스토리지 드라이버 지원

각 노드 이미지는 지원하는 저장소 플러그인 종류가 다릅니다. 특정 저장소 드라이버에 대한 노드 이미지 지원을 기술할 때는 다음과 같은 용어가 사용됩니다.

  • 예 - 완전 테스트/지원: 이 저장소 플러그인은 지정된 노드 이미지에서 완전히 지원되고 테스트되었습니다.
  • 예 - 제한된 테스트: 이 저장소 플러그인은 지정된 노드 이미지에서 작동하지만 제한된 방식으로만 테스트되었습니다. 따라서 예상치 못한 동작이 발생할 수 있습니다. Container-Optimized OS의 경우, 이러한 플러그인의 완전한 테스트 및 지원이 제공될 예정입니다.
  • 지원되지 않음: 이 저장소 플러그인은 지정된 노드 이미지에서 테스트 또는 사용되지 않았으며, GKE가 어떠한 기능 보장도 제공할 수 없습니다. 이 저장소 플러그인은 테스트 계획이 없습니다.
  • 아니요: 이 저장소 플러그인은 노드 OS 또는 Google Cloud에 고유한 제한으로 인해 지정된 노드 이미지에서 작동하지 않습니다.

다음 표에서는 각 GKE 노드 이미지가 몇 가지 일반적인 저장소 플러그인을 지원하는 방식을 보여줍니다.

볼륨 유형 Container-Optimized OS에서 작동 여부(cos) Ubuntu에서 작동 여부
Compute Engine
Persistent Disk(EXT4 또는 XFS)
예 - 완전 테스트/지원
(XFS는 cos-85 이상에서만 지원됨) GKE 출시 노트를 참조하세요.
예 - 완전 테스트/지원
NFSv3 예 - 완전 테스트/지원 예 - 완전 테스트/지원
NFSv4 예 - 완전 테스트/지원 예 - 완전 테스트/지원
CephFS 아니요 예 - 제한된 테스트
(드라이버가 기본적으로 설치되지 않음. DaemonSet을 통해 ceph 클라이언트를 설치해야 함)
Cinder 아니요 아니요
Fibre 채널 아니요 아니요
Flocker 지원되지 않음 지원되지 않음
iSCSI 아니요 아니요
RBD 아니요 아니요

노드 VM 수정

노드 VM의 부팅 디스크 수정사항은 노드 재생성 시 유지되지 않습니다. 노드는 수동 업그레이드, 자동 업그레이드, 자동 복구, 자동 확장 중에 다시 생성됩니다. 또한 노드는 GKE Sandbox, 노드 내 공개 상태, 보안 노드 같이 노드 재생성이 필요한 기능을 사용 설정할 때 다시 생성됩니다.

노드 재생성 시 수정사항을 보존하려면 DaemonSet를 사용합니다.

커널 또는 컨테이너 런타임(containerd또는 docker)과 같은 노드 이미지에서 제공하는 중요 소프트웨어를 관리하지 않는 것이 좋습니다. 노드 이미지는 광범위하게 테스트되며, 노드 이미지에서 제공하는 중요 소프트웨어를 수정하면 노드가 알 수 없고 테스트할 수 없는 상태가 됩니다. GKE Autopilot 노드는 노드 소프트웨어 수정을 허용하지 않습니다.

노드 이미지 출시 노트

Container-Optimized OS

Google은 Container-Optimized OS에 대한 포괄적인 문서를 제공합니다.

Ubuntu

Google은 클러스터 노드에서 사용할 수 있는 Ubuntu 이미지를 정기적으로 업데이트합니다. 기본적으로 설치되는 패키지가 나열된 매니페스트 링크 등 이러한 업데이트에 대한 자세한 내용은 GKE 출시 노트를 참조하세요.

알려진 문제

Docker 런타임으로 Container-Optimized OS를 사용하는 GKE 노드에서 무작위 연결 재설정

Docker(cos)와 함께 Container-Optimized OS를 사용하는 GKE 노드는 동일한 노드의 두 포드가 Kubernetes ClusterIP 서비스를 사용하여 통신할 때 임의의 TCP 연결이 재설정될 수 있습니다.

영향을 받는 GKE 버전은 다음과 같습니다.

  • 1.20.5-gke.100 이상

이 문제를 해결하려면 다음 옵션 중 하나를 사용하세요.

노드 이미지 소스 프로젝트

GKE 클러스터에서 사용 가능한 노드 이미지는 다음 소스 프로젝트에 포함되어 있습니다.

  • Container-Optimized OS 이미지: gke-node-images
  • Ubuntu 이미지: ubuntu-os-gke-cloud
  • Windows Server 이미지: gke-windows-node-images

위에 나열된 소스 프로젝트 외에도 GKE는 GKE팀의 독점 사용을 위해 다음 소스 프로젝트를 사용합니다.

  • ubuntu-os-gke-cloud-private(GKE팀 독점 사용을 위해 예약됨)
  • ubuntu-os-gke-cloud-devel(GKE팀 독점 사용을 위해 예약됨)

보안 수준이 높은 클러스터를 설정할 때에는 소스 프로젝트 이름을 알아야 할 수 있습니다. 나열된 소스 프로젝트는 변경될 수 있습니다.

다음 단계