본 가이드는 kubevirt 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
KubeVirt 배포 (k3s 테스트완료)
최신 KubeVirt 버전을 사용하여 KubeVirt 운영자를 배포합니다.
오퍼레이터는 쿠버네티스 애플리케이션을 패키징, 배포 및 관리하는 방법입니다. 쿠버네티스 애플리케이션은 쿠버네티스에 배포되고 쿠버네티스 API와 kubectl 도구를 사용하여 관리되는 애플리케이션입니다. 오퍼레이터는 쿠버네티스에서 이러한 유형의 애플리케이션을 관리하는 런타임이라고 생각하면 됩니다. 오퍼레이터에 대해 더 자세히 알아보려면 쿠버네티스 문서를 참조하세요.
여기서는 GitHub의 API를 쿼리하여 최신 릴리스를 가져옵니다. (텍스트를 클릭하면 콘솔에서 명령이 자동으로 실행됩니다.)
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
echo $KUBEVIRT_VERSION
KubeVirt Operator를 배포하려면 다음 명령을 실행하세요.
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
이제 ‘운영자’ 반응을 트리거하고 배포를 수행하는 사용자 지정 리소스를 만들어 KubeVirt를 배포합니다.
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
다음으로, KubeVirt가 가상화에 소프트웨어 에뮬레이션을 사용하도록 설정해야 합니다. 이는 강의 환경에서는 필수적이지만 성능 저하를 초래하므로 프로덕션 환경에서는 이 단계를 피하십시오.
kubectl -n kubevirt patch kubevirt kubevirt --type=merge --patch '{"spec":{"configuration":{"developerConfiguration":{"useEmulation":true}}}}'
Virtctl 설치
KubeVirt 운영자가 모든 Pod를 시작할 때까지 기다리는 동안 다음 단계에서 필요한 클라이언트를 다운로드하는 데 시간을 할애할 수 있습니다.
virtctl 은 VM과 상호 작용하는 데 도움이 되는 클라이언트 유틸리티입니다(시작/중지/콘솔 등):
wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
chmod +x virtctl
KubeVirt 배포가 완료될 때까지 기다리세요.
배포를 확인해 보겠습니다.
kubectl get pods -n kubevirt
준비가 되면 다음과 비슷한 내용이 표시됩니다.
controlplane $ kubectl get pods -n kubevirt
NAME READY STATUS RESTARTS AGE
virt-api-7fc57db6dd-g4s4w 1/1 Running 0 3m
virt-api-7fc57db6dd-zd95q 1/1 Running 0 3m
virt-controller-6849d45bcc-88zd4 1/1 Running 0 3m
virt-controller-6849d45bcc-cmfzk 1/1 Running 0 3m
virt-handler-fvsqw 1/1 Running 0 3m
virt-operator-5649f67475-gmphg 1/1 Running 0 4m
virt-operator-5649f67475-sw78k 1/1 Running 0 4m
여러 배포가 관련되어 있으므로 운영자가 완전히 설치되었는지 확인하는 가장 좋은 방법은 운영자의 사용자 지정 리소스 자체를 확인하는 것입니다.
kubectl -n kubevirt get kubevirt
완전히 배포되면 다음과 같습니다.
NAME AGE PHASE
kubevirt 3m Deployed
이제 모든 준비가 끝났고 VM을 실행하면 됩니다.
VM
가상 머신 배포
아래 명령은 가상 머신의 YAML 정의를 현재 Kubernetes 환경에 적용하여 VM 이름, 필요한 리소스(디스크, CPU, 메모리) 등을 정의합니다. 가상 머신 정의에 대해 더 자세히 알고 싶다면 vm.yaml 파일을 살펴 보세요.
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
KubeVirt 연산자 덕분에 다른 쿠버네티스 리소스를 생성하는 것과 동일한 방식으로 가상 머신을 생성하고 있습니다. 이제 쿠버네티스 리소스로 가상 머신이 생성되었습니다.
VM 리소스가 생성된 후에는 표준 ‘kubectl’ 명령을 사용하여 VM을 관리할 수 있습니다.
kubectl get vms
kubectl get vms -o yaml testvm | grep -E 'runStrategy:.*|$'
출력에서 VM이 아직 실행되고 있지 않다는 것을 알 수 있습니다.
VM을 시작하려면 start 동사 와 함께 virtctl을 사용합니다 .
./virtctl start testvm
다시 한번 VM 상태를 확인하세요.
kubectl get vms
VirtualMachine 리소스에는 VM의 정의와 상태가 포함됩니다. 실행 중인 VM의 인스턴스 에는 VirtualMachineInstance 라는 추가 리소스가 연결됩니다 .
VM이 실행되면 상태를 검사할 수 있습니다.
kubectl get vmis
준비가 되면 위의 명령을 실행하면 다음과 같은 내용이 출력됩니다.
NAME AGE PHASE IP NODENAME
testvm 1m Running 10.32.0.11 controlplane
VM에 액세스(시리얼 콘솔 및 VNC)
이제 VM이 실행 중이므로 직렬 콘솔에 액세스할 수 있습니다.
경고: 일부 OS 및 브라우저 환경에서는 이 과정에서 직렬 콘솔을 빠져나가지 못할 수 있습니다.
참고: \^]는 콘솔을 종료하려면 “CTRL” 키와 “]” 키를 누르라는 의미입니다.
./virtctl console testvm
Killercoda 코스 환경에서 시리얼 콘솔을 열었는데 \^] 키를 눌러도 콘솔에서 나갈 수 없는 경우 , 터미널 창 상단의 + 버튼을 클릭하여 새 셸을 시작할 수 있습니다. 종료 및 정리 섹션의 다음 단계를 계속 진행할 수 있습니다.
VNC 클라이언트 액세스가 가능한 환경에서는 virtctl vnc 명령을 사용하여 VM의 그래픽 콘솔에 액세스할 수 있습니다.
종료 및 정리
VM을 시작할 때와 마찬가지로 중지하는 작업도 virtctl 명령을 사용하여 수행할 수 있습니다.
./virtctl stop testvm
마지막으로, kubectl을 사용하여 다른 Kubernetes 리소스와 마찬가지로 VM을 삭제할 수 있습니다 .
kubectl delete vms testvm
Leave a Reply