이 페이지에서는 Google Distributed Cloud용 VM 런타임을 실행하는 Google Distributed Cloud 연결 배포에서 가상 머신을 관리하는 방법을 설명합니다. 이 페이지의 단계를 완료하기 전에 GDC의 VM 런타임을 숙지해야 합니다. 지원되는 게스트 운영체제 목록은 GDC용 VM 런타임에 검증된 게스트 운영체제를 참고하세요.
가상 머신이 Distributed Cloud 연결 플랫폼의 필수 구성요소로 작동하는 방법을 알아보려면 온프레미스 에지 VM을 관리하기 위해 GKE Enterprise 확장을 참고하세요.
Distributed Cloud(연결형) 클러스터는 가상 머신 웹훅을 지원합니다. 이를 통해 연결된 Distributed Cloud가 로컬 Kubernetes API 서버에 대한 사용자 요청을 검증할 수 있습니다. 거부된 요청은 거부 이유에 관한 자세한 정보를 생성합니다.
Symcloud 스토리지 구성
Google Distributed Cloud connected는 Rakuten Symcloud Storage를 스토리지 솔루션으로 사용합니다. Symcloud Storage는 각 Distributed Cloud connected 노드에서 로컬 스토리지 추상화 레이어 역할을 하며 다른 Distributed Cloud connected 노드에서 실행되는 워크로드에 로컬 스토리지를 제공하는 서드 파티 솔루션입니다.
Symcloud Storage는 Google Cloud Marketplace에서 배포되며 여기에 명시된 약관이 적용됩니다. Google은 Distributed Cloud(연결형)에서 Symcloud Storage 사용에 대한 제한적인 지원을 제공하며 지원을 위해 서드 파티 제공업체에 문의할 수 있습니다. Symcloud Storage용 소프트웨어 업데이트는 Distributed Cloud 연결 소프트웨어 업데이트에 포함됩니다.
다음과 같이 Google Distributed Cloud connected 클러스터를 구성하여 가상 머신용 Symcloud Storage를 사용 설정합니다. 자세한 내용은 Distributed Cloud connected 노드에 Symcloud Storage 설치를 참고하세요.
다음 명령어를 사용하여
robin-admin네임스페이스를 만듭니다.kubectl create ns robin-admin
Symcloud Storage 라이선스 파일을 가져와 다음 명령어를 사용하여 클러스터에 적용합니다.
kubectl apply -f LICENSE_FILE
LICENSE_FILE를 라이선스 파일의 경로로 바꿉니다.다음 명령어를 사용하여 Symcloud Storage가 실행 중인지 확인합니다.
kubectl describe robincluster
이 명령어는 다음과 유사한 출력을 반환합니다.
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다음 콘텐츠로
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=v1.3.1-anthos1.35-gke.39 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl ./virtctl sudo mv ./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이 플러그인 중 하나로 나열됩니다.
VM 이미지용 Cloud Storage 버킷 만들기
이 섹션의 단계를 완료하여 가상 머신 이미지용 Cloud Storage 버킷을 만듭니다. 버킷은 워크로드 아이덴티티 제휴를 사용하여 Kubernetes 서비스 계정을 해당 Google Cloud 서비스 계정에 바인딩하여 버킷에 액세스합니다. 즉, Kubernetes 서비스 계정이 Google Cloud서비스 계정을 가장합니다. 이미 설정된 이미지 저장소가 있는 경우 이 섹션을 건너뜁니다.
멀티 클러스터 Fleet에서 ID 동일성 위험을 줄이려면 이 섹션의 단계를 완료할 때 Fleet 워크로드 아이덴티티 제휴 권장사항의 가이드라인을 따르세요.
버킷 만들기의 단계를 완료하여 버킷을 만듭니다.
버킷에 액세스하기 위한 Google Cloud 서비스 계정을 만듭니다.
export GSA_PROJECT_ID=GSA_PROJECT_ID export GSA_NAME=GSA_NAME gcloud iam service-accounts create ${GSA_NAME}
다음을 바꿉니다.
GSA_NAME: 이 Google Cloud 서비스 계정의 의미 있는 이름입니다.GSA_PROJECT_ID: 타겟Google Cloud 서비스 계정을 호스팅하는 Google Cloud 프로젝트의 ID입니다.
Google Cloud 서비스 계정에 버킷에 액세스할 수 있는 권한을 부여합니다.
export BUCKET_PROJECT_ID=BUCKET_PROJECT_ID export GSA_NAME=GSA_NAME gcloud storage buckets add-iam-policy-binding gs://${BUCKET_PROJECT_ID}-vm-images \ --member="serviceAccount:${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ --project=${BUCKET_PROJECT_ID}
다음을 바꿉니다.
GSA_NAME: 타겟 Google Cloud 서비스 계정의 이름입니다.BUCKET_PROJECT_ID: 버킷을 호스팅하는 Google Cloud 프로젝트의 ID입니다.GSA_PROJECT_ID: 타겟Google Cloud 서비스 계정을 호스팅하는 Google Cloud 프로젝트의 ID입니다.
타겟 가상 머신의 네임스페이스에 Kubernetes 서비스 계정을 만들어 Google Cloud 서비스 계정에 바인딩합니다.
export GSA_PROJECT_ID=GSA_PROJECT_ID export VM_NAMESPACE=NAMESPACE export KSA_NAME=KSA_NAME export GSA_EMAIL=${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com kubectl create serviceaccount ${KSA_NAME} -n ${VM_NAMESPACE} kubectl annotate serviceaccount ${KSA_NAME} gsaEmail=${GSA_EMAIL} -n ${VM_NAMESPACE}
다음을 바꿉니다.
GSA_PROJECT_ID: 타겟Google Cloud 서비스 계정을 호스팅하는 Google Cloud 프로젝트의 ID입니다.NAMESPACE: 타겟 가상 머신의 네임스페이스입니다.KSA_NAME: 이 Kubernetes 서비스 계정의 의미 있는 이름입니다.GSA_NAME: 해당 Google Cloud 서비스 계정의 이름입니다.
클러스터의 워크로드 아이덴티티 풀 및 ID 공급업체의 이름을 찾습니다.
gcloud container fleet memberships describe MEMBERSHIP_ID \ --project=FLEET_PROJECT_ID \ --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"
다음을 바꿉니다.
MEMBERSHIP_ID: 클러스터의 Fleet 멤버십 이름입니다. 일반적으로 클러스터 이름입니다.FLEET_PROJECT_ID: Fleet 호스트 Google Cloud 프로젝트의 ID입니다.
이 명령어는 다음과 유사한 출력을 반환합니다.
IDENTITY_PROVIDER: IDENTITY_PROVIDER WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL출력에서 다음 값을 확인합니다.
IDENTITY_PROVIDER: 이 클러스터의 ID 공급업체입니다.WORKLOAD_IDENTITY_POOL: Fleet과 연결된 워크로드 아이덴티티 풀의 이름입니다. 이름은FLEET_PROJECT_ID.svc.id.goog형식입니다. 이 단계의 명령어에 대한 자세한 내용은 애플리케이션에서 Fleet 워크로드 아이덴티티 제휴 사용을 참고하세요.
Kubernetes 서비스 계정을 Google Cloud 서비스 계정에 바인딩하여 가장을 설정합니다.
export GSA_PROJECT_ID=GSA_PROJECT_ID export GSA_NAME=GSA_NAME export KSA_NAME=KSA_NAME export VM_NAMESPACE=NAMESPACE export WI_POOL=WORKLOAD_IDENTITY_POOL gcloud iam service-accounts add-iam-policy-binding ${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com \ --project=${GSA_PROJECT_ID} \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" --condition="IAM_CONDITION" --condition-from-file="IAM_CONDITION_FILE"
다음을 바꿉니다.
GSA_PROJECT_ID: 타겟Google Cloud 서비스 계정을 호스팅하는 Google Cloud 프로젝트의 ID입니다.GSA_NAME: 해당 Google Cloud 서비스 계정의 이름입니다.KSA_NAME: 타겟 Kubernetes 서비스 계정의 이름입니다.NAMESPACE: 타겟 가상 머신의 네임스페이스입니다.WORKLOAD_IDENTITY_POOL: 클러스터의 워크로드 아이덴티티 풀의 이름입니다.IAM_CONDITION: 선택사항입니다. Fleet 내의 특정 클러스터에 대한 액세스를 제한하는 데 사용할 IAM 조건을 지정합니다. 생략되거나None로 설정된 경우 IAM 조건이 적용되지 않습니다.IAM_CONDITION_FILE: 선택사항입니다. Fleet 내의 특정 클러스터에 대한 액세스를 제한하는 데 사용할 IAM 조건이 포함된 파일을 지정합니다. 생략된 경우--condition플래그가 지정되고None이외의 값으로 설정되지 않는 한 IAM 조건이 적용되지 않습니다.
버킷에 이미지를 저장합니다.
Google 서비스 계정의 활성 키에서 생성된 보안 비밀을 사용하여 기존 메서드를 사용할 수도 있습니다. 자세한 내용은 가상 머신 이미지를 위한 Cloud Storage 버킷 만들기를 참고하세요.
IAM 조건으로 버킷 액세스 제한
IAM 조건을 사용하면 Fleet의 어떤 클러스터가 버킷에 액세스할 수 있는지 지정할 수 있습니다. IAM 조건이 지정되지 않은 경우 동일한 네임스페이스에 동일한 Kubernetes 서비스 계정이 있는 Fleet의 모든 클러스터가 버킷에 액세스할 수 있으므로 ID 동일성 위험이 발생합니다. IAM 조건을 지정하지 않으면 Google 서비스 계정의 활성 키에서 생성된 보안 비밀을 사용하는 기존 액세스 메커니즘으로 대체할 수도 있습니다. 다음은 버킷에 대한 액세스를 제한하기 위해 IAM 조건을 설정하고 적용하는 방법의 예입니다.
IAM 조건 파일을 만듭니다.
cat <<EOF > iam_condition.yaml > expression: request.auth.claims.google.providerId == '$IDENTITY_PROVIDER' title: allow_only_this_cluster > EOF
GSA를 KSA에 바인딩할 때 IAM 조건 파일을 적용합니다. GSA Google Cloud 프로젝트에서 다음 명령어를 실행합니다.
gcloud iam service-accounts add-iam-policy-binding "${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \ --project="${GSA_PROJECT_ID}" \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" \ --condition-from-file=iam_condition.yaml
가상 머신 이미지에서 가상 머신 디스크 만들기
이 섹션의 단계를 완료하여 가상 머신 이미지에서 가상 머신 디스크를 만듭니다.
Cloud Storage에 저장된 이미지에서 디스크 만들기
클러스터에 다음 구성을 적용하여 Cloud Storage 버킷에 저장된 가상 머신에서 가상 머신 디스크를 만듭니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://${BUCKET_PROJECT_ID}-vm-images/IMAGE_FILE_PATH serviceAccount: KSA_NAME size: DISK_SIZE storageClassName: robin-block-immediate
다음을 바꿉니다.
DISK_NAME: 이 가상 머신 디스크의 이름입니다.NAMESPACE: 타겟 가상 머신의 네임스페이스입니다.IMAGE_FILE_PATH: 가상 머신 이미지 파일의 전체 경로와 이름입니다. 콘솔에서 Google Cloud 이미지를 마우스 오른쪽 버튼으로 클릭하고 gsutil URI 복사를 선택하여 이 경로를 가져옵니다.KSA_NAME: 이전에 만든 가상 머신 이미지를 다운로드하는 Kubernetes 서비스 계정입니다.DISK_SIZE: 타겟 디스크 크기입니다. 가상 머신 이미지 파일의virtual-size값보다 커야 합니다. 이 값은qemu-img info DISK_SIZE명령으로 확인할 수 있습니다.
storageClassName 값을 지정하지 않으면 VMRuntime 리소스에 지정된 기본값이 사용됩니다.
서드 파티 서비스에 저장된 이미지에서 디스크 만들기
http, https, S3 또는 이미지 레지스트리를 사용하여 가상 머신 이미지를 저장할 수도 있습니다. 스토리지 서비스에 액세스하기 위한 사용자 인증 정보가 필요한 경우 사용자 인증 정보를 비밀로 변환하고 secretRef 필드를 사용하여 해당 비밀을 지정합니다.
예를 들면 다음과 같습니다.
source: http/s3/registry: url: secretRef: "SECRET_NAME" # optional
SECRET_NAME을 보안 비밀 이름으로 바꿉니다.
자세한 내용은 HTTP/S3/GCS/Registry 소스를 참고하세요.
빈 디스크 만들기
클러스터에 다음 구성을 적용하여 빈 가상 머신 디스크를 만듭니다.
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 만들기를 참고하세요.
VM의 리소스 할당은 G1 또는 G2 하드웨어와 같은 Distributed Cloud 연결 배포의 하드웨어 프로필에 의해 제한됩니다. 단일 VM을 실행되는 실제 Distributed Cloud 연결 머신보다 크게 크기를 조정할 수 없습니다.
Google Cloud 콘솔을 사용하여 가상 머신 만들기
Google Cloud 콘솔을 사용하여 가상 머신을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
대상 Google Cloud 프로젝트를 선택합니다.
(선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.
왼쪽 탐색창에서 클러스터를 클릭합니다.
Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.
오른쪽의 정보 창에서 로그인을 클릭합니다.
표시되는 팝업 대화상자에서 선호하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.
가상 머신 페이지로 이동합니다.
만들기를 클릭합니다.
기본사항 섹션에서 다음을 수행합니다.
이름 필드에 가상 머신의 의미 있는 이름을 입력합니다.
클러스터 선택 필드에서 가상 머신의 타겟 클러스터를 선택합니다.
네임스페이스 필드에서 대상 네임스페이스를 선택합니다.
OS 유형 필드에서 타겟 운영체제를 선택합니다.
(선택사항) 이 가상 머신의 구성에 하나 이상의 라벨을 추가하려면 라벨 추가를 클릭합니다.
머신 구성 섹션에서 다음 중 하나를 수행합니다.
이 가상 머신의 vCPU 수와 메모리 양을 지정하려면 맞춤 구성을 선택하고 목표 값을 입력한 후 다음을 클릭합니다.
이 가상 머신에 사전 결정된 vCPU 수와 메모리 양을 사용하려면 표준 구성을 선택하고 머신 유형 드롭다운 목록에서 머신 구성을 선택한 후 다음을 클릭합니다.
스토리지 섹션에서 다음 중 하나를 수행합니다.
이 가상 머신의 새 가상 디스크를 만들려면 새 디스크 추가를 선택하고 이름 필드에 의미 있는 이름을, GiB 필드에 크기(GB)를, 이미지 필드에 URL을 입력합니다.
이 가상 머신에 기존 가상 디스크를 사용하려면 기존 디스크 선택을 선택하고 디스크 선택 드롭다운 목록에서 타겟 디스크 이미지를 선택합니다.
읽기 전용 및 자동 삭제 체크박스를 사용하여 디스크를 읽기 전용으로 할지, 이 가상 머신이 삭제될 때 자동으로 삭제할지 지정합니다.
드라이버 드롭다운 목록에서 가상 디스크 드라이버를 지정합니다.
이 가상 머신에 다른 디스크를 추가하려면 추가 디스크 섹션에서 디스크 추가를 클릭합니다.
다음을 클릭합니다.
네트워크 섹션에서 다음을 수행합니다.
기본 네트워크 인터페이스 하위 섹션의 인터페이스 이름 필드에 이 가상 머신의 기본 네트워크 인터페이스 이름을 지정합니다.
네트워크 유형 드롭다운 목록에서 해당 네트워크 유형을 선택합니다.
외부 액세스 허용 체크박스를 사용하여 이 네트워크 인터페이스에 대한 외부 액세스를 허용할지 여부를 지정합니다. 이 옵션을 사용 설정한 경우 노출된 포트 필드에 외부로 노출할 포트의 쉼표로 구분된 목록을 입력해야 합니다.
이 가상 머신에 하나 이상의 보조 네트워크 인터페이스를 추가하려면 네트워크 인터페이스 추가를 클릭합니다.
다음을 클릭합니다.
고급 옵션 섹션에서 업데이트 시 자동 다시 시작 체크박스를 사용하여 대상 클러스터의 Distributed Cloud 연결 소프트웨어가 업데이트된 후 이 가상 머신을 다시 시작할지 여부를 지정합니다.
펌웨어 섹션에서 다음을 수행합니다.
부트로더 유형 필드에서 타겟 펌웨어 유형을 선택합니다. UEFI 펌웨어를 선택하면 보안 부팅 체크박스를 사용하여 보안 부팅을 사용 설정할 수 있습니다.
일련번호 필드에 이 가상 머신의 일련번호를 지정합니다.
UUID 필드에 이 가상 머신의 범용 고유 식별자 (UUID)를 지정합니다.
Cloud-init 섹션에서 다음을 수행합니다.
네트워크 데이터 보안 비밀 필드에 네트워크 데이터 보안 비밀 값을 지정합니다.
사용자 데이터 보안 비밀 필드에 사용자 데이터 보안 비밀 값을 지정합니다.
VM 만들기를 클릭하여 가상 머신을 만듭니다.
YAML 파일에서 가상 머신 만들기
YAML 구성 파일에서 가상 머신을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
대상 Google Cloud 프로젝트를 선택합니다.
(선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.
왼쪽 탐색창에서 클러스터를 클릭합니다.
Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.
오른쪽의 정보 창에서 로그인을 클릭합니다.
표시되는 팝업 대화상자에서 선호하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.
가상 머신 페이지로 이동합니다.
YAML로 만들기를 클릭합니다.
클러스터 선택 필드에서 가상 머신의 타겟 클러스터를 선택합니다.
YAML 형식의 가상 머신 구성을 YAML 필드에 붙여넣습니다.
만들기를 클릭합니다.
부팅 가능한 디스크 이미지에서 가상 머신 만들기
부팅 가능한 디스크 이미지에서 가상 머신을 만들려면 클러스터에 다음 구성을 적용하세요.
kind: VirtualMachine metadata: name: my-virtual-machine namespace: NAMESPACE spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management priorityClassName: PRIORITY_CLASS compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 disks: - virtualMachineDiskName: DISK_NAME boot: true - virtualMachineDiskName: DISK_NAME
다음을 바꿉니다.
NAMESPACE: 타겟 네임스페이스입니다.PRIORITY_CLASS: 이 가상 머신의 우선순위 클래스입니다. 우선순위 클래스는 우선순위 값의 범위입니다.kubectl get priorityclass를 사용하여 지원되는 우선순위 클래스 목록을 가져옵니다.5,001,000과1,000,000,000사이의 우선순위 값에 해당하는 우선순위 클래스를 할당하는 것이 좋습니다. 우선순위 값이 높을수록 시스템이 과부하 상태일 때 가상 머신이 강제 종료될 가능성이 줄어듭니다. 생략하면 가상 머신에 기본 최저 우선순위 값이 부여됩니다.DISK_NAME: 이 가상 머신의 디스크 이름입니다.vcpus: VM에 할당할 vCPU 수입니다.capacity: VM에 할당할 메모리 양입니다. 예를 들면4Gi또는8Gi입니다.ipAddresses: 선택사항입니다. 가상 머신에 고정 IP 할당을 제공합니다. 기본 L2 네트워크가 외부 DHCP를 지원하는 경우 동적 할당을 허용하도록ipAddresses를 생략할 수 있습니다.
cloud-init API를 사용하여 VM 초기화
cloud-init API는 클라우드 VM을 초기화하는 표준 방법입니다. cloud-init를 사용하여 VM의 파일, 사용자, 기타 측면을 설정합니다.
호환성을 보장하려면 Distributed Cloud 연결 네트워크 구성에 대해 cloud-init 시작 루틴(특히 네트워크 데이터)을 검증하세요. 프로덕션에서 구성을 사용하기 전에 테스트 VM에 구성을 적용하여 성공적으로 초기화되고 네트워킹이 올바르게 구성되는지 확인하세요.
다음 예는 일반적이므로 환경에서 테스트해야 합니다.
cloud-init 사용자 데이터로 VM 구성 자동화
GDC의 VM 런타임은 Linux VM의 cloud-init 사용자 데이터를 지원합니다. 사용자 데이터를 일반 텍스트 문자열, base64로 인코딩된 문자열 또는 Kubernetes 보안 비밀을 참조하여 지정할 수 있습니다.
VM이 올바르게 초기화되도록 프로덕션 환경에 배포하기 전에 모든 사용자 데이터 구성을 검증하세요.
다음 예는 VM이 부팅될 때 명령어를 실행하기 위해 일반 텍스트 cloud-init 사용자 데이터를 포함하는 VirtualMachine 매니페스트를 보여줍니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi osType: Linux cloudInit: noCloud: userData: | #cloud-config runcmd: - echo "Hello World" > /tmp/hello.txt
VM_NAME을 가상 머신 이름으로 바꿉니다.
cloud-init 데이터로 VM을 만들려면 매니페스트를 vm-cloud-init.yaml로 저장하고 kubectl apply 명령어를 실행하여 클러스터에 적용합니다.
kubectl apply -f vm-cloud-init.yaml
cloud-init 문제 해결
cloud-init에 문제가 발생하면 VM 내에서 로그를 확인하세요. 일반적으로 다음 디렉터리에서 로그를 찾을 수 있습니다.
/var/log/cloud-init.log/var/log/cloud-init-output.log
VM이 부팅되기 전에 cloud-init가 실패하면(예: Kubernetes Secret이 누락되었거나 볼륨 연결이 잘못됨) 게스트 OS가 시작되지 않습니다. 예비 문제 해결 단계로 kubectl describe virtualmachine VM_NAME 명령어를 사용하여 VM 리소스 상태를 검사하고 kubectl describe pod -l kubevirt.io/vm=VM_NAME 명령어를 사용하여 포드 볼륨 마운트 이벤트를 검사합니다.
ISO 광 디스크 이미지에서 가상 머신 만들기
GDC용 VM 런타임을 사용하여 ISO 이미지에서 부팅하는 Windows 가상 머신 (VM)을 만들 수 있습니다. 이 기능을 사용하면 기존 Windows 기반 엔터프라이즈 애플리케이션, 전문 서드 파티 소프트웨어 또는 맞춤 판매 시점 시스템을 Distributed Cloud 연결 클러스터로 직접 이전할 수 있습니다.
VM 디스크에 사용되는 이미지는 연결된 Distributed Cloud 이미지 버킷에서 가져옵니다. 매니페스트를 만들기 전에 Windows 설치 ISO와 KubeVirt virtio 드라이버 ISO를 다운로드하여 이미지 버킷에 업로드해야 합니다. 신뢰할 수 있고 반복 가능한 가상 머신 빌드를 보장하려면 내부 저장소에 확인된 드라이버 ISO 사본을 유지하거나 Cloud Storage에 미리 스테이징하는 것이 좋습니다.
매니페스트 만들기
Windows ISO 이미지에서 부팅하려면 다음 매니페스트가 필요합니다.
- Windows ISO가 포함된
VirtualMachineDisk - KubeVirt Windows
virtio드라이버가 포함된VirtualMachineDisk - Windows가 설치될 부팅 디스크 역할을 하는 빈
VirtualMachineDisk
다음 예에서는 필요한 세 디스크의 VirtualMachineDisk 매니페스트를 보여줍니다.
매니페스트에서 다음을 바꿉니다.
BUCKET_PROJECT_ID: 이미지 버킷이 있는 프로젝트 ID입니다.KSA_NAME: 버킷에서 읽을 권한이 있는 Kubernetes 서비스 계정입니다.
매니페스트에 요청된 PVC size는 항상 ISO의 정확한 가상 크기 이상이어야 합니다.
Windows ISO 디스크
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-iso spec: size: 10Gi storageClassName: robin-block-immediate diskType: cdrom source: gcs: url: gs://BUCKET_PROJECT_ID-vm-images/windows.iso serviceAccount: KSA_NAME
VirtIO 드라이버 디스크
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: virtio-driver spec: size: 1Gi storageClassName: robin-block-immediate diskType: cdrom source: gcs: url: gs://BUCKET_PROJECT_ID-vm-images/virtio-win.iso serviceAccount: KSA_NAME
빈 부팅 디스크
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-vm-boot-dv spec: size: 40Gi storageClassName: robin-block-immediate
디스크 만들기
이러한 디스크를 만들려면 VirtualMachineDisk 매니페스트를 저장하고 kubectl apply 명령어를 실행하여 클러스터에 적용합니다.
kubectl apply -f windows-iso.yaml
kubectl apply -f virtio-driver.yaml
kubectl apply -f windows-vm-boot-dv.yaml
Windows VM 만들기
Windows VM을 만들려면 VM을 정의하고 디스크를 참조하는 매니페스트를 만듭니다. VM이 ISO 디스크에서 부팅되어 설치가 시작됩니다.
다음 예시에서는 VirtualMachine 매니페스트를 보여줍니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: windows-vm name: windows-vm spec: osType: Windows disks: - virtualMachineDiskName: windows-vm-boot-dv boot: true - virtualMachineDiskName: windows-iso - virtualMachineDiskName: virtio-driver compute: cpu: vcpus: 2 memory: capacity: 4Gi interfaces: - name: eth0 networkName: network-410 default: true ipAddresses: - 10.223.237.10/25
VM을 만들려면 매니페스트를 windows-vm.yaml로 저장하고 kubectl apply 명령어를 실행하여 클러스터에 적용합니다.
kubectl apply -f windows-vm.yaml
연결 및 설치 완료
연결하고 설치를 완료하려면 다음 단계를 따르세요.
VNC를 사용하여 VM에 연결하려면
virtctl도구 또는kubectl virt플러그인을 사용합니다.virtctl vnc windows-vm또는
virtctl을kubectl플러그인으로 설치한 경우:kubectl virt vnc windows-vmvirtctl에 대한 자세한 내용은 KubeVirt 문서를 참고하세요.Windows 설치 프로그램에 표시된 안내를 따릅니다. 메시지가 표시되면 맞춤 설치를 선택합니다.
메시지가 표시되면 저장소 및 네트워크용
virtio드라이버를 로드하고 연결된virtio-driver디스크로 이동합니다.설치를 완료합니다.
원격 데스크톱 프로토콜을 통한 액세스
게스트 OS에 원격 데스크톱 프로토콜 (RDP)을 설치하고 사용 설정하면 RDP를 통해 VM에 액세스할 수 있습니다.
가상 머신이 L2 네트워크에 연결되어 있으므로 할당된 IP 주소 (예: 10.223.237.10)를 사용하여 클러스터 외부에서 직접 연결할 수 있습니다. RDP 클라이언트를 사용하여 포트 3389에서 이 IP 주소에 연결합니다. 기업 방화벽 및 라우팅 규칙을 통해 클라이언트 머신에서 L2 내부 IP 주소에 연결할 수 있는지 확인합니다.
GPU 지원을 사용하는 가상 머신 만들기
이 페이지에 설명된 단계를 완료하여 비즈니스 요구사항을 충족하도록 구성된 가상 머신을 만든 다음 GPU 리소스를 사용하도록 가상 머신 구성의 단계를 완료합니다.
가상 머신 액세스
이 섹션의 단계를 완료하여 Distributed Cloud 연결 서버 배포에서 실행되는 가상 머신에 액세스합니다.
액세스 사용자 인증 정보 가져오기
가상 머신에 액세스할 사용자 인증 정보가 아직 없는 경우 이 섹션의 단계를 완료하여 Linux 게스트 환경 기능을 사용하여 사용자 인증 정보를 가져옵니다.
클러스터에 다음 구성을 적용하여 타겟 가상 머신의 Linux 게스트 환경을 사용 설정합니다.
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: // enabled by default; disable with guestEnvironment: {} accessManagement: enable: 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: 타겟 네임스페이스입니다.
Google Cloud 콘솔을 사용하여 가상 머신 시작 또는 중지
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
대상 Google Cloud 프로젝트를 선택합니다.
(선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.
왼쪽 탐색창에서 클러스터를 클릭합니다.
Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.
오른쪽의 정보 창에서 로그인을 클릭합니다.
표시되는 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 다음 로그인을 클릭합니다.
가상 머신 페이지로 이동합니다.
가상 머신 목록에서 대상 가상 머신의 체크박스를 선택합니다.
페이지 상단에서 시작 또는 중지를 클릭합니다.
Google Cloud 콘솔을 사용하여 가상 머신 상태 보기
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
대상 Google Cloud 프로젝트를 선택합니다.
(선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.
왼쪽 탐색창에서 클러스터를 클릭합니다.
Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.
오른쪽의 정보 창에서 로그인을 클릭합니다.
표시되는 팝업 대화상자에서 선호하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 후 로그인을 클릭합니다.
가상 머신 페이지로 이동합니다.
타겟 가상 머신을 클릭합니다.
표시되는 페이지에서 세부정보, 이벤트, YAML 탭을 클릭하여 이 가상 머신에 관한 해당 정보를 확인합니다.
가상 머신 수정
가상 머신을 수정하려면 가상 머신을 삭제하고 업데이트된 구성으로 다시 만들어야 합니다.
Google Cloud 콘솔을 사용하여 가상 머신 삭제
Google Cloud 콘솔에서 클러스터 페이지로 이동합니다.
대상 Google Cloud 프로젝트를 선택합니다.
(선택사항) 아직 로그인하지 않았다면 대상 클러스터에 로그인합니다.
왼쪽 탐색창에서 클러스터를 클릭합니다.
Anthos 관리형 클러스터 목록에서 타겟 클러스터를 클릭합니다.
오른쪽의 정보 창에서 로그인을 클릭합니다.
표시되는 대화상자에서 원하는 인증 방법을 선택하고 사용자 인증 정보를 입력한 다음 로그인을 클릭합니다.
가상 머신 페이지로 이동합니다.
가상 머신 목록에서 대상 가상 머신의 체크박스를 선택합니다.
페이지 상단에서 삭제를 클릭합니다.
확인 대화상자가 표시되면 가상 머신의 이름을 입력하고 삭제를 클릭합니다.