이 튜토리얼에서는 GDC용 VM 런타임을 새로 설치할 때 Linux 가상 머신(VM)을 만들고 관리하는 방법을 설명합니다. StorageClass
및 가상 네트워크와 같은 기본 종속 항목을 만들고 정의한 후 이러한 리소스를 사용하는 VM을 만드는 프로세스를 알아봅니다. 그런 다음 새 디스크 추가와 같은 VM을 수정하는 방법을 알아봅니다.
목표
- 기본 종속 항목 구성
- GDC용 VM 런타임에
StorageClass
만들기 - VM에 사용할 가상 네트워크 만들기
- GDC용 VM 런타임에
- 가상 머신 부팅 디스크 만들기
- VM 만들기
- VM을 수정하여 새 가상 디스크 추가
시작하기 전에
이 튜토리얼을 완료하려면 다음 리소스 및 도구에 액세스할 수 있어야 합니다.
- 베어메탈용 GKE 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 베어메탈용 GDCV를 사용해 보거나 클러스터 만들기 개요를 참조하세요. kubectl
의 플러그인으로 설치되는virtctl
클라이언트 도구. 필요한 경우 virtctl 클라이언트 도구를 설치합니다.
StorageClass
만들기
StorageClass
을 사용하여 VM에 사용할 수 있는 스토리지 유형을 정의합니다. 다양한 스토리지 클래스가 여러 유형의 스토리지 하드웨어, 파일 시스템 또는 성능에 매핑될 수 있습니다.
각 StorageClass
및 스토리지 파트너에 대한 구체적인 안내는 이 튜토리얼에서 다루지 않습니다.
Anthos Ready 스토리지 파트너가 스토리지에 필요한 커스텀 리소스를 설치하고 구성하는 검증된 컨테이너 스토리지 인터페이스(CSI) 드라이버를 제공합니다. 클러스터에 CSI 드라이버를 설치하려면 지원되는 스토리지 파트너 목록을 검토하고 해당하는 안내를 따르세요.
스토리지 플랫폼에 CSI 드라이버를 설치하면 클러스터에서 하나 이상의 스토리지 클래스를 사용할 수 있습니다. 이 튜토리얼에서는 이러한 스토리지 클래스 중 하나를 사용하여 가상 하드 디스크를 만듭니다.
다음 기본 예시 NFS StorageClass
는 NFS CSI 드라이버를 사용합니다.
StorageClass
에서 사용할 NFS 서버 주소와 경로를 정의합니다. 그러면 클러스터의 모든 노드가 이 NFS 스토리지에 연결하여 사용할 수 있습니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-nfs
provisioner: nfs.csi.k8s.io
parameters:
server: nfs-server.example.com
path: /vm-share
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nconnect=8
- nfsvers=4.1
이 튜토리얼에서는 자체 클러스터의 StorageClass
이름을 사용합니다.
GDC용 VM 런타임은 클러스터의 각 StorageClass
에 대해 하나의 스토리지 프로필을 자동으로 생성합니다. 스토리지 프로필은 연결된 StorageClass
와 이름이 동일합니다. 스토리지 프로필은 각 StorageClass
와 연결된 추가 구성 옵션을 제공합니다. 구성 안내를 포함한 스토리지 프로필에 대한 자세한 내용은 스토리지 프로필 구성을 참조하세요.
가상 네트워크 만들기
VM은 가상 네트워크 인터페이스를 사용하여 가상 네트워크에 연결합니다. 가상 네트워크를 사용하면 클러스터의 다른 VM이나 클러스터 외부의 리소스와 통신할 수 있습니다.
이 튜토리얼에서는 외부 DHCP 서버를 사용할 수 있는 기본 Layer 2(L2
) 가상 네트워크를 만듭니다. 외부 DHCP 서버를 사용 설정할 때 DHCP가 DNS 및 게이트웨이 설정을 제공하는 경우 해당 구성을 건너뛸 수 있습니다.
외부 DHCP 서버를 사용하는 네트워크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서
dhcp-network.yaml
과 같은Network
매니페스트를 만듭니다.nano dhcp-network.yaml
다음 YAML 매니페스트를 복사하여 붙여넣습니다.
apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 nodeInterfaceMatcher: interfaceName: INTERFACE_NAME externalDHCP4: true
다음 값을 바꿉니다.
NETWORK_NAME
: 네트워크 이름입니다.INTERFACE_NAME
: 네트워크를 연결할 베어메탈용 GKE 노드의 인터페이스 이름입니다. 모든 노드의 인터페이스 이름이 동일해야 합니다.
이
Network
매니페스트에서는 다음 값이 설정됩니다.- 워크로드에서 이 네트워크에 대한
L2
연결만 가능합니다. GDC용 VM 런타임에서 만들 수 있는 유일한 네트워크type
입니다. - 네트워크에 외부 DHCP가 사용 설정되어 있습니다. 외부 DHCP 서버는 이 네트워크에 연결된 워크로드의 IPv4 주소 할당, 경로, 게이트웨이, DNS 구성을 담당합니다.
편집기에서
Network
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 네트워크를 만듭니다.kubectl apply -f use-dhcp-network.yaml
VM 부팅 디스크 만들기
VM은 사전 생성된 디스크 이미지를 사용하거나 ISO 이미지를 통해 부팅하여 OS를 수동으로 설치할 수 있습니다. 이러한 디스크 이미지는 HTTP를 사용하여 저장하고 액세스하거나 Cloud Storage에 저장하고 Secret
을 사용하여 액세스할 수 있습니다.
이 튜토리얼에서는 HTTP를 사용하여 공개 Ubuntu Server 20.04 클라우드 이미지에서 부팅 디스크를 만듭니다.
이미지에서 디스크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서
my-disk.yaml
과 같은VirtualMachineDisk
매니페스트를 만듭니다.nano my-disk.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi storageClassName: STORAGE_CLASS_NAME source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
다음 값을 바꿉니다.
DISK_NAME
: 디스크에 사용할 이름입니다. 이 예시에서는 공개 Ubuntu 서버 20.04 이미지를 사용하여DISK_NAME
이라는20Gi
(20기비바이트) 디스크를 만듭니다.STORAGE_CLASS_NAME
:VirtualMachineDisk
에 사용할StorageClass
입니다.kubectl get storageclass
를 사용하여 클러스터에서 사용할 수 있는 항목을 나열합니다.
편집기에서
VirtualMachineDisk
매니페스트를 저장하고 닫습니다.kubectl
을 사용하여 디스크를 만듭니다.kubectl apply -f my-disk.yaml
VM 만들기
이전 섹션에서 만든 가상 네트워크와 부팅 디스크를 사용하여 VM을 만듭니다. VM이 가상 네트워크에 연결되고 가상 디스크에서 부팅됩니다. 다음 안내에서는 kubectl
CLI를 사용하여 VirtualMachine
YAML 매니페스트 파일을 직접 적용하여 VM을 만듭니다.
원하는 편집기에서
my-vm.yaml
과 같이VirtualMachine
을 정의하는 매니페스트를 만듭니다.nano my-vm.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: osType: linux compute: cpu: vcpus: VCPU_NUMBER memory: capacity: MEMORY_SIZE interfaces: - name: eth0 networkName: NETWORK_NAME default: true disks: - boot: true virtualMachineDiskName: DISK_NAME
다음 값을 바꿉니다.
VM_NAME
: VM의 이름입니다.VCPU_NUMBER
: VM에 할당할 vCPU 선택적 숫자로, 이 설정이 없으면 기본적으로 vCPU 2개가 할당됩니다.- 1~96개 사이의 vCPU를 VM에 할당할 수 있습니다.
MEMORY_SIZE
: VM에 할당할 선택적 메모리 양입니다. 이 설정이 없으면 기본값인 메모리 4GiB가 할당됩니다.- 1M~1T 사이의 메모리를 VM에 할당할 수 있습니다. 자세한 내용은 메모리 리소스 단위를 참조하세요.
NETWORK_NAME
: 이전 섹션에서 만든 네트워크의 이름입니다.DISK_NAME
: 이전 섹션에서 만든 부팅 디스크의 이름입니다. 이 디스크는boot: true
로 설정됩니다.
편집기에서 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM 및 디스크를 만듭니다.kubectl apply -f my-vm.yaml
VM을 만드는 데 몇 분 정도 걸릴 수 있습니다. kubectl 명령어로 VM 상태를 확인합니다.
kubectl get gvm VM_NAME
다음 출력 예시는
Running
상태의 VM을 보여줍니다.NAME STATUS AGE IP MY_VM Running 64s 192.168.2.124
VM에 연결
VM이 실행 중이면 VM의 콘솔에 연결합니다. 이 콘솔 연결을 통해 VM 추가 구성이나 애플리케이션 설치와 같은 기본 태스크를 수행할 수 있습니다.
콘솔에서 VM에 액세스하려면
kubectl
을 사용합니다.kubectl virt console VM_NAME
메시지가 표시되면 지정된 사용자 인증 정보를 입력하여 VM을 만듭니다.
VM의 콘솔에 성공적으로 연결한 후 VM 세션 및 콘솔을 종료합니다.
Ctrl + ]
VM 수정
VM 수명 주기 중에 VM을 편집할 수 있습니다. 예를 들어 스토리지를 추가하여 전용 디스크에 애플리케이션을 설치하거나 애플리케이션의 추가 스토리지를 사용할 수 있습니다.
이 튜토리얼에서는 빈 디스크를 만들어 VM에 연결합니다. 이 시나리오에서는 애플리케이션 데이터를 저장하기 위해 데이터 디스크를 만들 수 있습니다.
원하는 편집기에서
my-data-disk.yaml
과 같은VirtualMachineDisk
매니페스트를 만듭니다.nano my-data-disk.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DATA_DISK_NAME spec: size: 10Gi storageClassName: STORAGE_CLASS_NAME
다음 값을 바꿉니다.
DATA_DISK_NAME
: 데이터 디스크에 원하는 이름입니다. 이 예시에서는10Gi
(10기비바이트) 디스크를 만듭니다.STORAGE_CLASS_NAME
:VirtualMachineDisk
에 사용할StorageClass
입니다.kubectl get storageclass
를 사용하여 클러스터에서 사용할 수 있는 항목을 나열합니다.
편집기에서 디스크 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 디스크를 만듭니다.kubectl apply -f my-data-disk.yaml
새 가상 디스크를 연결하기 전에
kubectl
을 사용하여 VM을 중지합니다.kubectl virt stop VM_NAME
VM 리소스를 수정합니다.
kubectl edit gvm VM_NAME
VirtualMachine
YAML 매니페스트를 업데이트하여 VM의spec.disks
섹션 끝에 디스크를 연결합니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: ... disks: - boot: true virtualMachineDiskName: DISK_NAME - virtualMachineDiskName: DATA_DISK_NAME
DATA_DISK_NAME
을 이전 단계에서 만든 디스크의 이름으로 바꿉니다.편집기에서 업데이트된 VM 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM을 시작합니다.kubectl virt start VM_NAME
삭제
이 튜토리얼에서 만든 리소스를 삭제하려면 다음 단계를 완료하세요.
VM을 삭제합니다.
kubectl delete -f my-vm.yaml
VirtualMachineDisk
리소스를 삭제합니다.kubectl delete -f my-data-disk.yaml kubectl delete -f my-disk.yaml
클러스터의 기본 종속 항목을 유지하지 않으려면 다음 단계를 완료하세요.
가상 네트워크를 삭제합니다.
kubectl delete -f use-dhcp-network.yaml
클러스터에서 CSI 드라이버를 삭제하려면 스토리지 파트너의 안내를 따르세요.