이 문서는 베어메탈용 GKE를 실행하는 애플리케이션 소유자를 대상으로 합니다. 이 문서에서는 Google Distributed Cloud용 VM 런타임을 사용하는 가상 머신(VM)에 대해 디스크 리소스를 만들고 관리하는 방법을 설명합니다.
시작하기 전에
이 문서를 완료하려면 다음 리소스에 대해 액세스 권한이 필요합니다.
- 베어메탈용 GKE 버전 1.12.0(
anthosBareMetalVersion: 1.12.0
) 이상 클러스터에 대한 액세스 권한. 워크로드 실행이 가능한 모든 클러스터 유형을 사용할 수 있습니다. 필요한 경우 Compute Engine에서 베어메탈용 GKE를 사용하거나 클러스터 만들기 개요를 참조하세요. kubectl
의 플러그인으로 설치되는virtctl
클라이언트 도구. 필요한 경우 virtctl 클라이언트 도구를 설치합니다.
연결된 디스크가 있는 VM 만들기
VM을 만들 때는 기존 부팅 또는 데이터 디스크를 연결하거나, 이미지에서 디스크를 만들거나(부팅 디스크 포함), 빈 디스크를 만들 수 있습니다.
빈 디스크
이 시나리오에서는 빈 디스크를 만들고 이를 VM에 연결합니다. 이 시나리오에서는 애플리케이션 데이터를 저장하기 위해 데이터 디스크를 만들 수 있습니다.
원하는 편집기에서
my-vm.yaml
과 같이VirtualMachineDisk
및VirtualMachine
을 정의하는 매니페스트를 만듭니다.nano my-vm.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
다음을 바꿉니다.
DISK_NAME
: VM에 만들고 연결하는 빈 디스크의 이름입니다.VM_NAME
: 만들려는 VM의 이름입니다.이 예시에서는
DISK_NAME
이라는 빈10Gi
(10기비바이트) 디스크를 만듭니다. VM의spec.disks
섹션에서는 다음 섹션에 표시된 것처럼 이미지에서와 같이 부팅 디스크를 연결해야 합니다.
편집기에서 매니페스트 파일을 저장하고 닫습니다.
kubectl
을 사용하여 VM 및 디스크를 만듭니다.kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
를 클러스터 kubeconfig 파일의 경로로 바꿉니다.
From image
이 시나리오에서는 이미지에서 디스크를 만들고 이를 VM에 연결합니다. 이 시나리오에서는 예를 들어 이미지에서 부팅 디스크를 만들 수 있습니다. 또한 이미지에서 데이터 디스크를 만들고 연결할 수 있습니다.
지원되는 이미지 소스
Google Distributed Cloud용 VM 런타임은 다양한 이미지 형식을 허용하고 VirtualMachineDisk
사양에 지정할 수 있는 세 가지 유형의 이미지 소스를 지원합니다. 다음은 지원되는 다양한 이미지 소스에서 20기비바이트 디스크를 만드는 각 예시입니다.
HTTP(Hypertext Transfer Protocol)
다음
VirtualMachineDisk
예시는 HTTP 이미지 소스의 기본 구조를 보여줍니다.url
필드에는 HTTP 또는 HTTPS URL이 필요합니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: http: url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img size: 20GiB storageClassName: local-shared
Cloud Storage
다음 예시에서는 Cloud Storage 버킷의 이미지에서 디스크를 만드는 방법을 보여줍니다. 머신의 애플리케이션 기본 사용자 인증 정보가 Cloud Storage URL에 액세스하는 데 충분하지 않으면 사용자 인증 정보를 제공해야 합니다. 다음 예시에서
my-gcs
는 base64로 인코딩된 서비스 계정 키가 포함된 보안 비밀입니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: gcs: url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2 secretRef: my-gcs size: 20GiB storageClassName: local-shared
다운로드한 서비스 계정 키를 사용하여 클러스터를 만든 경우 Cloud Storage 액세스에 Container Registry 서비스 계정 키를 사용할 수 있습니다. Cloud Storage에 액세스하기 위해 별도의 서비스 계정을 만드는 경우 Cloud Storage 버킷에 액세스할 수 있는 서비스 계정 구성을 참조하세요.
다음 명령어를 사용하여 다운로드한 서비스 계정 키 파일에서 Kubernetes 보안 비밀을 만듭니다.
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
다음을 바꿉니다.
SECRET_NAME
: 보안 비밀의 이름KEY_FILE
: 다운로드한 서비스 계정 키 JSON 파일의 경로 예를 들면bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
입니다.KUBECONFIG
: 클러스터 kubeconfig 파일의 경로
사용자 인증 정보를 사용하여 Cloud Storage에 액세스하는 방법에 대한 자세한 내용은 사용자 인증 정보를 만들고 사용하여 Cloud Storage에서 이미지 가져오기를 참조하세요.
Container Registry 예시
Open Container Initiative(OCI) 배포 사양을 준수하는 Container Registry가 지원됩니다. 다음 예시에서는 Docker 레지스트리에 저장된 이미지에서 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: registry: url: docker://kubevirt/fedora-cloud-registry-disk-demo size: 20GiB storageClassName: local-shared
유효한 이미지 형식
이미지에서 디스크를 만들 때 다음 이미지 형식 중 하나를 사용할 수 있습니다.
- GNU zip(gzip) 보관 파일(
.gz
) - 원시(
.raw
,.img
) - 쓰기 버전 2(qcow2) 디스크 이미지의 QEMU 사본(
.qcow2
) - XZ 압축 보관 파일(
.xz
) - 가상 머신 디스크(VMDK) 파일(
.vmdk
) - VirtualBox 가상 디스크 이미지(VDI) 파일(
.vdi
) - 가상 하드 디스크(VHD) 이미지 파일(
.vdh
) - 가상 하드 디스크 버전 2(VDHX) 파일(
.vdhx
) - ISO 디스크 이미지 파일(
.iso
)
HTTP 이미지에서 만든 디스크의 예시
다음 단계에서는 Ubuntu 이미지에서 부팅 디스크를 만듭니다.
원하는 편집기에서 my-vm.yaml과 같이
VirtualMachineDisk
및VirtualMachine
을 정의하는 매니페스트를 만듭니다.nano my-vm.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv
이 예시에서는 공개 Ubuntu 이미지를 사용하여
VM_NAME-boot-dv
이라는20Gi
(20기비바이트) 디스크를 만듭니다. VM의spec.disks
섹션에서는 디스크가boot: true
로 설정됩니다.편집기에서 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM 및 디스크를 만듭니다.kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
를 클러스터 kubeconfig 파일의 경로로 바꿉니다.
기존 디스크
이 시나리오에서는 빈 디스크를 만들고 이를 VM에 연결합니다. 이 시나리오에서는 애플리케이션 데이터를 저장하기 위해 데이터 디스크를 만들 수 있습니다.
원하는 편집기에서 my-vm.yaml과 같은
VirtualMachine
매니페스트를 만듭니다.nano my-vm.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: EXISTING_DISK_NAME
이 예시에서는
EXISTING_DISK_NAME
이라는 기존 디스크를 연결합니다.VM의
spec.disks
섹션에서는 이전 섹션에 표시된 것처럼 이미지에서와 같이 부팅 디스크를 연결해야 합니다.편집기에서 VM 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM을 만듭니다.kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
를 클러스터 kubeconfig 파일의 경로로 바꿉니다.
디스크 찾기
베어메탈용 GKE 버전 1.13.0부터는 VM을 만들 때 Google Distributed Cloud용 VM 런타임이 VM 리소스에 지정한 디스크 이름을 사용하여 디스크 일련번호를 설정합니다. 특히 VirtualMachine
커스텀 리소스에서 spec.disks.virtualMachineDiskName
로 지정하는 이름은 디스크의 일련번호에 사용됩니다. 이 기능을 사용하면 포맷 또는 마운트와 같은 디스크 작업을 수행해야 할 때 VM에서 디스크를 더 쉽게 찾을 수 있습니다.
예를 들어 VM을 만들고 sample-boot-dv
라는 부팅 디스크를 지정한 경우 VirtualMachine
커스텀 리소스는 다음과 같습니다.
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
osType: Linux
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
interfaces:
- name: eth0
networkName: pod-network
default: true
disks:
- boot: true
virtualMachineDiskName: sample-vm-boot-dv
- virtualMachineDiskName: attached-disk
Linux VM의 경우 VM에 로그인할 때 다음 명령어를 실행하여 일련번호별로 디스크를 나열할 수 있습니다.
ls -l /dev/disk/by-id/
응답은 다음 예시 출력과 같이 디스크 이름이 일련번호로 표시됩니다.
total 0
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root 9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb
다음과 같은 상황의 특성에 유의하세요.
virtualMachineDiskName
값이 20자를 초과하면 Google Distributed Cloud용 VM 런타임은 처음 20자만 일련번호로 사용합니다.- 처음 20자가 동일한 2개의 디스크가 있는 경우 첫 번째 디스크만 일련번호를 가집니다.
디스크를 만들고 기존 VM에 연결
기존 VM이 있으면 디스크를 만들고 연결하여 애플리케이션 수명 주기를 지원할 수 있습니다. VM은 디스크를 연결하기 전에 중지된 상태여야 합니다.
빈 디스크
이 시나리오에서는 빈 디스크를 만들고 이를 VM에 연결합니다. 이 시나리오에서는 애플리케이션 데이터를 저장하기 위해 데이터 디스크를 만들 수 있습니다.
필요한 경우
kubectl
을 사용하여 VM을 중지합니다.kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
다음을 바꿉니다.
VM_NAME
: 중지할 VM의 이름KUBECONFIG
: 관리자 클러스터 kubeconfig 파일의 경로
my-vm
과 같은 기존 VM 리소스를 수정합니다.kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
YAML 매니페스트를 업데이트하여 위에VirtualMachineDisk
섹션을 추가한 후 VM의spec.disks
섹션의 끝에 디스크를 연결합니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
이 예시에서는
DISK_NAME
이라는 빈10Gi
(10기비바이트) 디스크를 만듭니다.편집기에서 업데이트된 VM 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM을 시작합니다.kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
From image
이 시나리오에서는 소스 이미지에서 디스크를 만들고 이를 VM에 연결합니다.
필요한 경우
kubectl
을 사용하여 VM을 중지합니다.kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
다음을 바꿉니다.
VM_NAME
: 중지할 VM의 이름KUBECONFIG
: 관리자 클러스터 kubeconfig 파일의 경로
my-vm
과 같은 기존 VM 리소스를 수정합니다.kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
매니페스트를 업데이트하여 위에VirtualMachineDisk
섹션을 추가한 후 VM의spec.disks
섹션 끝에 디스크를 연결합니다.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi source: http: url: http://example.com/my-disk-img.qcow2 --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
이 예시에서는
http://example.com/my-disk-img.qcow2
HTTP 소스에서DISK_NAME
이라는10Gi
(10기비바이트) 디스크를 만듭니다.편집기에서 업데이트된 VM 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 VM을 시작합니다.kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
디스크 만들기
이 시나리오에서는 VM 리소스와 별개로 디스크 리소스를 만듭니다. 이 시나리오에서는 미리 디스크를 만든 후 필요에 따라 VM에 연결할 수 있습니다.
빈 디스크
빈 디스크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서 my-disk.yaml과 같은
VirtualMachineDisk
매니페스트를 만듭니다.nano my-disk.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
이 예시에서는
DISK_NAME
이라는 빈10Gi
(10기비바이트) 디스크를 만듭니다.편집기에서 디스크 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 디스크를 만듭니다.kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
KUBECONFIG
를 클러스터 kubeconfig 파일의 경로로 바꿉니다.
From image
이미지에서 디스크를 만들려면 다음 단계를 완료합니다.
원하는 편집기에서
my-disk.yaml
과 같은VirtualMachineDisk
매니페스트를 만듭니다.nano my-disk.yaml
다음 YAML 정의를 복사하여 붙여넣습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
이 예시에서는 공개 Ubuntu 이미지를 사용하여
DISK_NAME
이라는20Gi
(20기비바이트) 디스크를 만듭니다.편집기에서 디스크 매니페스트를 저장하고 닫습니다.
kubectl
을 사용하여 디스크를 만듭니다.kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
KUBECONFIG
를 클러스터 kubeconfig 파일의 경로로 바꿉니다.
다음 단계
- 사용자 인증 정보를 만들고 사용하여 Cloud Storage에서 이미지 가져오기
- 베어메탈용 GKE에서 스토리지 클래스 만들기 및 사용
- VM 또는 VM의 가상 디스크 리소스가 더 이상 필요하지 않은 경우 베어메탈용 GKE에서 VM 삭제