이 페이지에서는 Google Distributed Cloud의 VM 런타임을 실행하는 Google Distributed Cloud 연결 서버에서 가상 머신을 관리하는 방법을 설명합니다. 이 페이지의 단계를 완료하기 전에 GDC의 VM 런타임을 숙지해야 합니다. 지원되는 게스트 운영체제 목록은 GDC용 VM 런타임에 검증된 게스트 운영체제를 참고하세요.
가상 머신이 Distributed Cloud 연결 플랫폼의 필수 구성요소로 작동하는 방법을 알아보려면 온프레미스 에지 VM을 관리하기 위해 GKE Enterprise 확장을 참고하세요.
Distributed Cloud 연결된 클러스터는 가상 머신 웹훅을 지원합니다. 이를 통해 Distributed Cloud Connected는 로컬 Kubernetes API 서버에 대한 사용자 요청을 검증할 수 있습니다. 거부된 요청은 거부 사유에 관한 자세한 정보를 생성합니다.
Symcloud Storage 구성
Google Distributed Cloud Connected 서버는 Rakuten Symcloud Storage를 스토리지 솔루션으로 사용합니다. Symcloud Storage는 각 Distributed Cloud connected 노드에서 로컬 스토리지 추상화 레이어 역할을 하며 다른 Distributed Cloud connected 노드에서 실행되는 워크로드에 로컬 스토리지를 제공하는 서드 파티 솔루션입니다.
Symcloud Storage는 Google Cloud Marketplace에서 배포되며 여기에 명시된 약관이 적용됩니다. Google은 Distributed Cloud connected에서 Symcloud Storage 사용에 대한 제한적인 지원을 제공하며 지원을 위해 서드 파티 제공업체에 문의할 수 있습니다. Symcloud Storage용 소프트웨어 업데이트는 Distributed Cloud 연결 소프트웨어 업데이트에 포함됩니다.
가상 머신에 Symcloud 스토리지를 사용 설정하려면 다음과 같이 Google Distributed Cloud connected 클러스터를 구성하세요.
다음 명령어를 사용하여
robinio네임스페이스를 만듭니다.kubectl create ns robinio
Symcloud Storage 라이선스 파일을 가져와 다음 명령어를 사용하여 클러스터에 적용합니다.
kubectl apply LICENSE_FILE
다음 명령어를 사용하여 Symcloud Storage가 실행 중인지 확인합니다.
kubectl apply LICENSE_FILE
이 명령어는 다음과 유사한 출력을 반환합니다.
Name: robin Namespace: Labels: app.kubernetes.io/instance=robin app.kubernetes.io/managed-by=robin.io app.kubernetes.io/name=robin Annotations: <none> API Version: manage.robin.io/v1 Kind: RobinCluster Metadata: … Spec: … Status: … Phase: Ready …다음 구성을 클러스터에 적용하여
robin-block-immediate스토리지 클래스를 만듭니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: robin-block-immediate parameters: faultdomain: host replication: "3" blocksize: "512" provisioner: robin reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true
다음 구성을 클러스터에 적용하여
robin-snapshotclass볼륨 스냅샷 클래스를 만듭니다.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: robin-snapshotclass labels: app.kubernetes.io/instance: robin app.kubernetes.io/managed-by: robin.io app.kubernetes.io/name: robin annotations: snapshot.storage.kubernetes.io/is-default-class: "true" driver: robin deletionPolicy: Delete
Distributed Cloud Connected에서 GDC의 VM 런타임 지원 사용 설정
기본적으로 Distributed Cloud Connected에서는 GDC 가상 머신 지원의 VM 런타임이 사용 중지되어 있습니다. 이 기능을 사용 설정하려면 이 섹션의 단계를 완료하세요. 이 섹션의 안내에서는 완전히 작동하는 Distributed Cloud 연결 클러스터가 있다고 가정합니다.
GDC 가상 머신 하위 시스템에서 VM 런타임을 사용 설정하려면 다음 단계를 완료하세요.
다음 콘텐츠로
VMRuntime커스텀 리소스를 수정하고 클러스터에 적용합니다.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: annotations: baremetal.cluster.gke.io/vmrumtime-force-disable: "false" vm.cluster.gke.io/enable-vm-backup: "true" spec: enabled: true storage: defaultStorageClass: robin-block-immediate haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
이 프로세스를 완료하는 데 일반적으로 몇 분 정도 걸립니다.
다음 명령어를 사용하여
VMRuntime커스텀 리소스가 클러스터에 적용되었는지 확인합니다.kubectl get vmruntime
이 명령어는 다음 예와 유사한 출력을 반환합니다.
NAME AGE ENABLED READY PREFLIGHTCHECK vmruntime 5m true true true다음 콘텐츠로
robin-block-immediate스토리지 클래스의storageprofile을 수정하고 클러스터에 적용합니다.apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: robin-block-immediate spec: claimPropertySets: accessModes: ReadWriteMany volumeMode: Block
virtctl 관리 도구 설치
분산 클라우드 연결 클러스터에서 가상 머신을 관리하려면 virtctl 클라이언트 도구가 필요합니다. 도구를 설치하려면 다음 단계를 완료하세요.
virtctl클라이언트 도구를kubectl플러그인으로 설치합니다.export VERSION=v0.59.0-anthos1.28-gke.8 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl cd /usr/local/bin sudo ln -s virtctl kubectl-virt sudo chmod a+x virtctl cd -
virt플러그인이 설치되었는지 확인합니다.kubectl plugin list
플러그인이 성공적으로 설치되면 명령어의 출력에
kubectl-virt이 플러그인 중 하나로 나열됩니다.
가상 머신 이미지용 Cloud Storage 버킷 만들기
이 섹션의 단계를 완료하여 가상 머신 이미지용 Cloud Storage 버킷을 만듭니다. 이미 설정된 이미지 저장소가 있는 경우 이 섹션을 건너뜁니다.
버킷 만들기의 단계를 완료하여 버킷을 만듭니다.
다음 명령어를 사용하여 버킷에 액세스할 서비스 계정과 키를 구성합니다.
export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create image-access gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ gcloud iam service-accounts keys create ./image-access-gcr.json \ --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
버킷에 액세스하기 위해 클러스터에서 보안 비밀을 만듭니다. 버킷이 공개인 경우 이 단계를 건너뜁니다. 이 보안 비밀은 가상 머신 디스크와 동일한 네임스페이스에 있어야 합니다. 영향을 받는 각 네임스페이스에서 보안 비밀을 만들어야 합니다.
kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE
CLUSTER_ID을 대상 네임스페이스의 이름으로 바꿉니다.버킷에 이미지를 저장합니다.
가상 머신 이미지에서 가상 머신 디스크 만들기
이 섹션의 단계를 완료하여 가상 머신 이미지에서 가상 머신 디스크를 만듭니다.
Cloud Storage에 저장된 이미지에서 디스크 만들기
클러스터에 다음 구성을 적용하여 Cloud Storage 버킷에 저장된 가상 머신에서 가상 머신 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE secretRef: gcs-image-sa size: DISK_SIZE storageClassName: robin-block-immediate
다음을 바꿉니다.
DISK_NAME: 이 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.IMAGE_FILE: 가상 머신 이미지 파일의 이름입니다.DISK_SIZE: 원하는 디스크 크기입니다. 이 값은 가상 머신 이미지 파일의virtual-size값보다 커야 합니다.qemu-img info DISK_SIZE명령어를 사용하여 이 값을 찾을 수 있습니다.
storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.
기존 디스크 이미지에서 디스크 만들기
클러스터의 기존 가상 머신 디스크 또는 이미지 파일에서 다음과 같이 가상 머신 디스크를 만듭니다.
클러스터에 다음 구성을 적용하여 타겟 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: IMAGE_DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: EXISTING_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
다음을 바꿉니다.
IMAGE_DISK_NAME: 이 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.EXISTING_DISK_NAME: 기존 가상 머신 디스크의 이름입니다.DISK_SIZE: 원하는 디스크 크기입니다. 이 값은 기존 디스크 또는 이미지 파일의 크기보다 크거나 같아야 합니다.
다음과 같이
qemu-img도구를 사용하여 기존 디스크 또는 이미지 파일의 크기를 확인할 수 있습니다.qemu-img info EXISTING_DISK_NAME
storageClassName값을 지정하지 않으면VMRuntime리소스에 지정된 기본값이 사용됩니다.클러스터에 다음 구성을 적용하여 기존 이미지 파일에서 새 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: IMAGE_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
다음을 바꿉니다.
IMAGE_DISK_NAME: 이전 단계에서 만든 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.DISK_SIZE: 원하는 디스크 크기입니다. 이전 단계에서 만든 가상 머신 디스크의 크기와 같아야 합니다.
다음 명령어를 사용하여 타겟 디스크를 원하는 크기로 조정합니다.
kubectl edit gdisk DISK_NAME -n NAMESPACE
다음을 바꿉니다.
DISK_NAME: 이전 단계에서 만든 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.
디스크 구성에서
spec.size값을 수정하고 클러스터에 적용합니다.
빈 디스크 만들기
클러스터에 다음 구성을 적용하여 빈 가상 머신 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: size: DISK_SIZE storageClassName: robin-block-immediate
다음을 바꿉니다.
DISK_NAME: 이 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.DISK_SIZE: 원하는 디스크 크기(기비바이트)입니다. 이 값은 가상 머신 이미지 파일의virtual-size값보다 커야 합니다.qemu-img info DISK_SIZE명령어를 사용하여 이 값을 찾을 수 있습니다.
storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.
가상 네트워킹 구성
네트워킹의 단계에 따라 가상 머신의 가상 네트워킹을 구성합니다.
가상 머신 만들기
이 섹션의 단계를 완료하여 Distributed Cloud 연결 서버 배포에 가상 머신을 만드세요. 이 섹션의 안내는 다양한 시나리오의 구성을 설명하기 위한 예시입니다. 가상 머신 구성에 관한 자세한 내용은 GDC용 VM 런타임을 사용하여 특정 CPU 및 메모리 리소스가 있는 VM 만들기를 참고하세요.
부팅 가능한 디스크 이미지에서 가상 머신 만들기
부팅 가능한 디스크 이미지에서 가상 머신을 만들려면 클러스터에 다음 구성을 적용하세요.
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management autoRestartOnConfigurationChange: true compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 disks: - virtualMachineDiskName: my-boot-disk boot: true - virtualMachineDiskName: my-data-disk
다음을 바꿉니다.
DISK_NAME: 이 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.
ISO 광 디스크 이미지에서 가상 머신 만들기
ISO 광 디스크 이미지에서 가상 머신을 만들려면 Google Distributed Cloud에서 ISO 이미지로 Windows VM 만들기의 단계를 완료하세요.
GPU 지원을 사용하는 가상 머신 만들기
이 페이지에 설명된 단계를 완료하여 비즈니스 요구사항을 충족하도록 구성된 가상 머신을 만든 다음 GPU 리소스를 사용하도록 가상 머신 구성의 단계를 완료합니다.
가상 머신 액세스
이 섹션의 단계를 완료하여 Distributed Cloud 연결 서버 배포에서 실행되는 가상 머신에 액세스합니다.
액세스 사용자 인증 정보 가져오기
이 섹션의 단계를 완료하여 Linux 게스트 환경 기능을 사용하여 가상 머신에 액세스하는 데 필요한 사용자 인증 정보를 가져옵니다.
클러스터에 다음 구성을 적용하여 타겟 가상 머신의 Linux 게스트 환경을 사용 설정합니다.
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: {} autoRestartOnConfigurationChange: true
다음 명령어를 사용하여 SSH 키 쌍이 포함된
id_rsa.pub파일을 생성합니다.ssh-keygen -t rsa클러스터에 다음 구성을 적용하여
VirtualMachineAccessRequest리소스를 만듭니다.apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachineAccessRequest metadata: name: RESOURCE_NAME namespace: NAMESPACE spec: vm: VM_NAME user: USER_NAME ssh: key: RSA_KEY ttl: 2h
다음을 바꿉니다.
RESOURCE_NAME: 이 가상 머신 액세스 요청 리소스의 설명이 포함된 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.VM_NAME: 대상 가상 머신의 이름입니다.USER_NAME: 액세스 권한이 부여되는 사용자의 이름입니다.RSA_KEY: 이전 단계에서 생성한id_rsa.pub파일의 콘텐츠입니다.
다음 명령어를 사용하여 액세스 요청 상태를 확인합니다.
kubectl get vmar
명령어가
Configured상태를 반환하면 다음 단계로 진행합니다.SSH 또는 원격 데스크톱으로 가상 머신에 액세스합니다.
- 가상 머신이 로컬 네트워크에 연결되어 있으면 직접 액세스할 수 있습니다.
- 가상 머신이 포드 네트워크에 연결된 경우 필요한 포트에 액세스하려면 부하 분산기 서비스를 만들어야 합니다.
가상 머신 시작, 다시 시작 또는 중지
다음 명령어를 사용하여 가상 머신을 시작, 다시 시작 또는 중지합니다.
- 가상 머신 시작:
kubectl virt start vmVM_NAME-nNAMESPACE - 가상 머신 다시 시작:
kubectl virt restart vmVM_NAME-nNAMESPACE - 가상 머신 중지:
kubectl virt stop vmVM_NAME-nNAMESPACE
다음을 바꿉니다.
VM_NAME: 대상 가상 머신의 이름입니다.NAMESPACE: 타겟 네임스페이스입니다.
다음 단계
- Distributed Cloud Connected 랙에서 가상 머신 관리
- Distributed Cloud 연결형에 워크로드 배포
- GPU 워크로드 관리
- 영역 관리
- 머신 관리
- 클러스터 관리
- 노드 풀 관리