Kubernetes Tools/Kubevirt

[KubeVirt Ep.3] 🚀 kubevirt 설치하기 | Docker Desktop으로 실습 환경 구성

ygtoken 2025. 3. 21. 13:17
728x90

이 글에서는 Docker Desktop의 쿠버네티스 환경을 활용하여 KubeVirt를 설치하고 기본 동작을 테스트하는 방법을 알아보겠습니다. Mac 환경을 기준으로 진행하지만, Windows 사용자도 큰 차이 없이 따라할 수 있도록 설명하겠습니다.


📌 실습 환경 요구사항

KubeVirt를 설치하기 전에 먼저 실습 환경의 요구사항을 확인해 보겠습니다.

Docker Desktop 준비

Docker Desktop은 개발자를 위한 로컬 쿠버네티스 환경을 쉽게 구성할 수 있게 해주는 도구입니다. KubeVirt 실습을 위해서는 다음 요구 사항을 충족해야 합니다:

  • Docker Desktop 버전 4.4.0 이상 설치
  • 쿠버네티스 기능 활성화 (버전 1.21 이상 권장)
  • 최소 4GB 메모리 할당 (8GB 이상 권장)
  • 하드웨어 가상화 기능 지원 (Mac의 경우 네이티브 지원)

▶️ 시스템 사양 참고: "Docker Desktop에서 KubeVirt 실습 시 VM을 실행하려면 추가 리소스가 필요합니다. 특히 메모리를 넉넉하게 할당하는 것이 중요합니다. 실제 VM 실행 시에는 Docker Desktop에 최소 8GB 이상의 메모리를 할당하는 것을 권장합니다."

 

필요한 CLI 도구

원활한 실습을 위해 다음 CLI 도구를 설치해야 합니다:

  • kubectl: 쿠버네티스 클러스터와 상호작용하는 CLI 도구
  • virtctl: KubeVirt VM을 관리하는 CLI 도구

대부분의 Mac 사용자는 Homebrew를 통해 이러한 도구를 쉽게 설치할 수 있습니다:

# kubectl 설치 (이미 있다면 생략)
$ brew install kubectl  # Homebrew를 통해 kubectl을 설치하는 명령어

# virtctl은 KubeVirt 설치 후 다운로드 예정

📌 Docker Desktop 설정하기

KubeVirt 실습 환경을 위한 Docker Desktop 설정 방법을 알아보겠습니다.

 

Docker Desktop 설치

아직 Docker Desktop이 설치되어 있지 않다면, 공식 웹사이트에서 다운로드하여 설치합니다:

쿠버네티스 활성화

Docker Desktop에서 쿠버네티스 기능을 활성화하는 방법은 다음과 같습니다:

  1. Docker Desktop 아이콘 클릭 > Preferences 선택
  2. Kubernetes 탭 클릭
  3. "Enable Kubernetes" 체크박스 선택
  4. "Apply & Restart" 버튼 클릭

Docker Desktop 에서 쿠버네티스 활성화

 

리소스 할당 설정

Docker Desktop에 충분한 리소스를 할당하기 위해:

  1. Docker Desktop 아이콘 클릭 > Preferences 선택
  2. Resources 탭 클릭
  3. CPU 할당: 최소 2코어 (4코어 이상 권장)
  4. Memory 할당: 최소 4GB (8GB 이상 권장)
  5. Swap 크기: 1GB 이상
  6. Disk image size: 최소 40GB
  7. "Apply & Restart" 버튼 클릭

Docker Desktop에서 리소스 할당 설정

 

▶️ 성능 팁: "Mac에서 Docker Desktop의 성능을 높이려면 'Use the new Virtualization framework' 옵션을 활성화하는 것이 좋습니다. 이는 Apple Silicon 맥에서 특히 중요합니다."

 

설정 확인

Docker Desktop이 올바르게 설정되었는지 확인하기 위해 다음 명령어를 실행합니다:

# 쿠버네티스 클러스터 상태 확인
$ kubectl cluster-info
# 출력: Kubernetes control plane이 실행 중인지 확인하고 API 서버 주소 표시

# 노드 상태 확인
$ kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
docker-desktop   Ready    master   1d    v1.24.0
# 출력: docker-desktop 노드가 Ready 상태인지 확인, 마스터 역할, 버전 정보 확인

# 네임스페이스 확인
$ kubectl get ns
# 출력: 클러스터의 기본 네임스페이스 목록이 표시됨 (kube-system, default 등)

모든 것이 정상이라면, 다음 단계인 KubeVirt 설치로 넘어갈 수 있습니다.


📌 KubeVirt 설치하기

이제 Docker Desktop 위에 KubeVirt를 설치해보겠습니다. 설치는 크게 Operator 설치와 KubeVirt CR 생성의 두 단계로 진행됩니다.

 

KubeVirt Operator 설치

쿠버네티스 Operator 패턴을 사용하여 KubeVirt를 설치합니다:

# 최신 KubeVirt 버전 확인 (현재 예시는 v0.59.0)
$ KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
# GitHub API를 통해 최신 KubeVirt 버전을 자동으로 가져옴

$ echo $KUBEVIRT_VERSION
v0.59.0
# 설정된 KubeVirt 버전 변수 확인

# 또는 특정 버전을 직접 지정
$ KUBEVIRT_VERSION="v0.59.0"
# 특정 버전을 사용하고 싶을 때 직접 지정 (안정성을 위해 권장)

# KubeVirt Operator 설치
$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
# KubeVirt Operator를 클러스터에 설치하는 명령어
# Operator는 KubeVirt의 배포와 관리를 자동화함

namespace/kubevirt created                                # kubevirt 네임스페이스 생성
customresourcedefinition.apiextensions.k8s.io/kubevirts.kubevirt.io created  # KubeVirt CRD 생성
priorityclass.scheduling.k8s.io/kubevirt-cluster-critical created  # 우선순위 클래스 생성
clusterrole.rbac.authorization.k8s.io/kubevirt-operator created  # Operator 권한 설정
serviceaccount/kubevirt-operator created                 # 서비스 계정 생성
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-operator created  # 역할 바인딩
deployment.apps/virt-operator created                    # Operator 배포 생성

 

KubeVirt CR 생성

이제 KubeVirt 커스텀 리소스(CR)를 생성하여 실제 KubeVirt 구성 요소를 배포합니다:

# KubeVirt CR 생성
$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
# KubeVirt 커스텀 리소스를 생성하는 명령어
# 이 명령은 virt-api, virt-controller, virt-handler 등의 KubeVirt 컴포넌트 배포를 시작함

kubevirt.kubevirt.io/kubevirt created  # KubeVirt CR이 성공적으로 생성됨

 

설치 확인

KubeVirt가 제대로 설치되었는지 확인합니다:

# KubeVirt 리소스 상태 확인
$ kubectl get kubevirt -n kubevirt
NAME       AGE    PHASE
kubevirt   5m     Deployed
# 출력: KubeVirt CR의 상태가 'Deployed'인지 확인, 배포 완료 의미

# 모든 KubeVirt Pod 확인
$ kubectl get pods -n kubevirt
NAME                               READY   STATUS    RESTARTS   AGE
virt-api-7c8b8d557b-84nvg         1/1     Running   0          4m  # API 서버 Pod
virt-api-7c8b8d557b-xtz6g         1/1     Running   0          4m  # API 서버 복제본
virt-controller-8459c4f88b-kjk7q  1/1     Running   0          3m  # 컨트롤러 Pod
virt-controller-8459c4f88b-r87tg  1/1     Running   0          3m  # 컨트롤러 복제본
virt-handler-fzpnq                1/1     Running   0          3m  # 노드 에이전트
virt-operator-54d785d64d-jdgkn    1/1     Running   0          5m  # Operator Pod
virt-operator-54d785d64d-wzs5h    1/1     Running   0          5m  # Operator 복제본
# 출력: 모든 KubeVirt 구성 요소 Pod가 Running 상태인지 확인

모든 Pod가 Running 상태가 되면 KubeVirt가 성공적으로 설치된 것입니다.

 

virtctl 설치

KubeVirt VM을 관리하기 위한 virtctl CLI 도구를 설치합니다:

# Mac용 virtctl 다운로드
$ curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-darwin-amd64
# Mac용 virtctl 바이너리를 다운로드하는 명령어
# darwin-amd64: Mac OS용 바이너리를 의미

# 실행 권한 부여
$ chmod +x virtctl
# 다운로드한 virtctl 파일에 실행 권한 부여

# PATH가 설정된 디렉토리로 이동
$ sudo mv virtctl /usr/local/bin
# virtctl을 시스템 경로에 추가하여 어디서든 실행 가능하게 함

# 설치 확인
$ virtctl version
Client Version: v0.59.0  # 로컬 virtctl 도구 버전
Server Version: v0.59.0  # 서버측 KubeVirt 버전
# 출력: 클라이언트와 서버 버전이 일치하는지 확인

▶️ Windows 사용자 참고: "Windows 사용자는 .exe 확장자를 가진 Windows용 바이너리를 다운로드하고, 시스템 PATH에 추가해야 합니다. 또는 WSL2를 사용 중이라면 Linux 바이너리를 사용할 수 있습니다."


📌 KVM 가속 확인 및 설정

KubeVirt는 가능하면 하드웨어 가속을 사용하여 VM 성능을 최적화합니다. 설치된 환경에서 KVM 가속 상태를 확인해 보겠습니다.

KVM 지원 확인

# 노드의 KVM 지원 상태 확인
$ kubectl get nodes -o json | jq '.items[].status.allocatable | "kvm: " + (.devices\.kubevirt\.io\/kvm // "false")'
# 노드에서 KVM 가속 기능 지원 여부를 확인하는 명령어
# jq: JSON 처리 도구를 사용해 노드의 KVM 지원 상태를 추출

"kvm: false"  # Docker Desktop에서는 일반적으로 false로 나타남
# 출력: Docker Desktop에서는 KVM 가속이 일반적으로 지원되지 않음

 

소프트웨어 에뮬레이션 사용 설정

Docker Desktop 환경에서는 일반적으로 KVM 가속을 사용할 수 없습니다. 이 경우 소프트웨어 에뮬레이션을 사용하도록 KubeVirt를 구성해야 합니다:

# KubeVirt CR 수정
$ kubectl edit kubevirt kubevirt -n kubevirt
# KubeVirt 커스텀 리소스를 편집하는 명령어
# 이 명령은 기본 에디터를 열어 KubeVirt 구성을 수정할 수 있게 함

다음 구성을 spec.configuration 아래에 추가합니다:

  configuration:
    developerConfiguration:
      useEmulation: true  # 하드웨어 가속 대신 소프트웨어 에뮬레이션 사용
      # KVM 가속이 없는 환경에서도 VM을 실행할 수 있게 해주는 설정

저장 후 종료하면 KubeVirt가 구성을 적용합니다.

▶️ 성능 참고사항: "소프트웨어 에뮬레이션은 KVM 가속에 비해 성능이 크게 저하될 수 있습니다. 하지만 테스트 및 학습 목적으로는 충분합니다. 실제 프로덕션에서는 KVM 가속을 지원하는 베어메탈이나 중첩 가상화를 지원하는 클라우드 환경을 사용하는 것이 좋습니다."

 

구성 확인

# KubeVirt 구성 확인
$ kubectl get kubevirt kubevirt -n kubevirt -o yaml | grep -A3 emulation
# 설정된 에뮬레이션 구성을 확인하는 명령어
# -A3: 일치하는 라인과 이후 3줄을 함께 표시

    developerConfiguration:
      useEmulation: true  # 에뮬레이션 사용 설정이 true로 되어 있는지 확인

이제 KubeVirt가 소프트웨어 에뮬레이션을 사용하도록 설정되었습니다.


📌 첫 번째 VM 배포하기

이제 KubeVirt 설치가 완료되었으니, 첫 번째 VM을 배포해 보겠습니다. 테스트를 위해 가벼운 CircOS VM을 사용하겠습니다.

 

VM 매니페스트 생성

다음 내용으로 cirros-vm.yaml 파일을 생성합니다:

apiVersion: kubevirt.io/v1  # KubeVirt API 버전
kind: VirtualMachine         # 리소스 유형: 가상머신 정의
metadata:
  name: cirros-vm            # VM 이름
spec:
  running: true              # 생성 즉시 VM 시작 여부
  template:                  # VM 템플릿 정의 시작
    metadata:
      labels:
        kubevirt.io/vm: cirros-vm  # VM 식별용 레이블
    spec:
      domain:                # VM 도메인(하드웨어) 정의
        devices:
          disks:             # 디스크 장치 정의
          - name: containerdisk  # 첫 번째 디스크 (컨테이너 디스크)
            disk:
              bus: virtio    # virtio 버스 사용 (성능 최적화)
          - name: cloudinitdisk  # 두 번째 디스크 (cloud-init 설정용)
            disk:
              bus: virtio
          interfaces:        # 네트워크 인터페이스 정의
          - name: default
            masquerade: {}   # NAT 모드 네트워크 (Pod 외부 통신 가능)
        resources:
          requests:
            memory: 256Mi    # VM에 할당할 메모리 (최소 요청량)
      networks:              # 네트워크 정의
      - name: default
        pod: {}              # 기본 Pod 네트워크 사용
      volumes:               # 볼륨 정의
      - name: containerdisk  # OS 이미지가 들어있는 컨테이너 디스크
        containerDisk:
          image: quay.io/kubevirt/cirros-container-disk-demo:latest  # 경량 OS 이미지
      - name: cloudinitdisk  # cloud-init 볼륨 (VM 초기 설정용)
        cloudInitNoCloud:
          userDataBase64: SGkuXG4=  # "Hi.\n"을 base64로 인코딩한 값

 

VM 배포

# VM 생성
$ kubectl apply -f cirros-vm.yaml
virtualmachine.kubevirt.io/cirros-vm created
# 출력: VM 리소스가 성공적으로 생성됨을 확인

# VM 상태 확인
$ kubectl get vm
NAME        AGE   STATUS    READY
cirros-vm   30s   Running   True
# 출력: VM이 Running 상태이고 Ready 상태가 True인지 확인

# VM 인스턴스 확인
$ kubectl get vmi
NAME        AGE   PHASE     IP            NODENAME
cirros-vm   35s   Running   10.1.0.123    docker-desktop
# 출력: VM 인스턴스가 Running 상태이고 IP 주소가 할당되었는지 확인
# NODENAME은 VM이 실행 중인 노드를 나타냄

 

VM 콘솔 접속

virtctl 명령어를 사용하여 VM 콘솔에 접속할 수 있습니다:

# VM 콘솔 접속
$ virtctl console cirros-vm
# virtctl을 사용해 VM의 직렬 콘솔에 접속하는 명령어

# 로그인 (기본 계정: cirros / gocubsgo)
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
cirros-vm login: cirros
Password: gocubsgo

$ uname -a
Linux cirros-vm 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64 GNU/Linux
# VM 내부에서 리눅스 커널 정보 확인

# VM에서 네트워크 확인
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.123/24 brd 10.1.0.255 scope global eth0
       valid_lft forever preferred_lft forever
# VM의 네트워크 인터페이스 정보 확인
# eth0: Pod 네트워크를 통해 할당된 IP 주소 확인

# 종료하려면 Ctrl+] 입력

 

VM 종료 및 시작

virtctl 명령어로 VM 라이프사이클을 관리할 수 있습니다:

# VM 종료
$ virtctl stop cirros-vm
VM cirros-vm was scheduled to stop
# 출력: VM 종료 요청이 스케줄링되었음을 확인

# 상태 확인
$ kubectl get vm cirros-vm
NAME        AGE   STATUS     READY
cirros-vm   5m    Stopped    False
# 출력: VM이 Stopped 상태이고 Ready가 False로 변경됨을 확인

# VM 시작
$ virtctl start cirros-vm
VM cirros-vm was scheduled to start
# 출력: VM 시작 요청이 스케줄링되었음을 확인

# 상태 확인
$ kubectl get vm cirros-vm
NAME        AGE   STATUS    READY
cirros-vm   6m    Running   True
# 출력: VM이 다시 Running 상태가 되고 Ready가 True로 변경됨을 확인

▶️ 중요 포인트: "KubeVirt에서는 VirtualMachine(VM) 리소스가 VirtualMachineInstance(VMI)의 라이프사이클을 관리합니다. virtctl stop은 VMI를 삭제하지만 VM 리소스는 유지됩니다. 이는 쿠버네티스의 Deployment와 Pod의 관계와 유사합니다."


📌 VM 세부 정보 확인하기

생성된 VM의 세부 정보를 확인하여 KubeVirt의 동작 방식을 자세히 살펴보겠습니다.

 

VM Pod 확인

KubeVirt는 VM을 실행하기 위해 특별한 Pod을 생성합니다:

# VM Pod 확인
$ kubectl get pods | grep virt-launcher
virt-launcher-cirros-vm-abc123   1/1     Running   0          3m
# 출력: VM을 실행하는 virt-launcher Pod 확인
# 각 VM 인스턴스마다 하나의 virt-launcher Pod이 생성됨

# Pod 세부 정보 확인
$ kubectl describe pod virt-launcher-cirros-vm-abc123
# 출력: virt-launcher Pod의 상세 정보 확인
# VM 실행에 필요한 컨테이너, 볼륨, 환경변수 등 정보가 표시됨

Pod 설명에서 주목할 점:

  • virt-launcher 컨테이너가 VM을 실행
  • compute 컨테이너가 libvirt/QEMU 프로세스 관리
  • 특수 볼륨과 마운트 포인트 구성

VM 리소스 세부 정보

# VM 리소스 세부 정보 확인
$ kubectl describe vm cirros-vm
# 출력: VirtualMachine 리소스의 상세 정보 확인
# VM의 구성, 상태, 이벤트 등 정보가 표시됨

# VMI 리소스 세부 정보 확인
$ kubectl describe vmi cirros-vm
# 출력: VirtualMachineInstance 리소스의 상세 정보 확인
# 실행 중인 VM 인스턴스의 도메인 설정, IP 주소 등 정보가 표시됨

이 명령은 VM의 다양한 구성 요소와 상태 정보를 보여줍니다:

  • 도메인 설정 (CPU, 메모리 등)
  • 디스크 및 네트워크 구성
  • 현재 상태 및 이벤트 로그

VM 로그 확인

# VM Pod의 로그 확인
$ kubectl logs virt-launcher-cirros-vm-abc123
# 출력: virt-launcher Pod의 로그 확인
# VM 부팅 과정과 관련된 로그 메시지가 표시됨

이 로그에서는 다음과 같은 정보를 볼 수 있습니다:

  • VM 부팅 프로세스
  • 디스크 및 네트워크 연결 상태
  • 오류 또는 경고 메시지

📌 SSH 접속 구성하기

VM에 SSH로 접속하려면 포트 포워딩이나 서비스를 구성해야 합니다. 간단한 포트 포워딩 방법을 알아보겠습니다.

 

SSH 키 생성 및 VM에 추가

더 안전한 접속을 위해 SSH 키를 사용하는 새 VM을 생성해 보겠습니다:

# SSH 키 생성 (이미 있다면 생략)
$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/kubevirt_rsa -N ""
# 출력: KubeVirt용 새 SSH 키 쌍 생성
# -t rsa: RSA 알고리즘 사용
# -b 2048: 2048비트 키 길이
# -N "": 패스프레이즈 없이 생성

# 공개 키 가져오기
$ SSH_PUB_KEY=$(cat ~/.ssh/kubevirt_rsa.pub)
# 생성한 SSH 공개 키를 환경 변수에 저장

 

새 VM 매니페스트 ssh-vm.yaml을 만듭니다:

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: ssh-vm             # VM 이름
spec:
  running: true            # 생성 즉시 VM 시작 
  template:
    metadata:
      labels:
        kubevirt.io/vm: ssh-vm  # VM 식별 레이블
    spec:
      domain:
        devices:
          disks:
          - name: containerdisk
            disk:
              bus: virtio    # virtio 버스 사용 (성능 최적화)
          - name: cloudinitdisk
            disk:
              bus: virtio
          interfaces:
          - name: default
            masquerade: {}   # NAT 모드 네트워크
        resources:
          requests:
            memory: 512Mi    # 메모리 512MB 할당 (Fedora에는 더 많은 메모리 필요)
      networks:
      - name: default
        pod: {}              # 기본 Pod 네트워크 사용
      volumes:
      - name: containerdisk
        containerDisk:
          image: quay.io/kubevirt/fedora-cloud-container-disk-demo:latest  # Fedora OS 이미지
      - name: cloudinitdisk
        cloudInitNoCloud:    # cloud-init 구성
          userData: |
            #cloud-config
            password: fedora              # 기본 패스워드 설정
            chpasswd: { expire: False }   # 패스워드 만료 비활성화
            ssh_authorized_keys:
              - ${SSH_PUB_KEY}            # 생성한 SSH 공개 키 추가

 

포트 포워딩으로 SSH 접속

계속해서 KubeVirt 설치 및 SSH 접속 부분을 이어가겠습니다.

# VM 생성
$ SSH_PUB_KEY=$(cat ~/.ssh/kubevirt_rsa.pub)
$ sed "s|\${SSH_PUB_KEY}|$SSH_PUB_KEY|" ssh-vm.yaml | kubectl apply -f -
# 출력: SSH 키가 포함된 VM 매니페스트 적용
# sed 명령어를 사용해 SSH 공개 키를 VM 매니페스트에 삽입

# 포트 포워딩 설정
$ virtctl port-forward ssh-vm 22:22
# 출력: VM의 22번 포트(SSH)를 로컬 22번 포트로 포워딩
# 이렇게 하면 로컬에서 localhost:22로 VM에 SSH 접속 가능

# 새 터미널에서 SSH 접속
$ ssh -i ~/.ssh/kubevirt_rsa fedora@localhost
# 출력: 생성한 개인 키를 사용해 VM에 SSH 접속
# -i: SSH 개인 키 경로 지정
# fedora: Fedora VM의 기본 사용자

# VM 내부에서
[fedora@ssh-vm ~]$ sudo dnf update -y  # 패키지 업데이트
[fedora@ssh-vm ~]$ exit                # 접속 종료

▶️ VM 접속 팁: "실제 환경에서는 VM에 서비스를 연결하여 클러스터 내부 또는 외부에서 접근할 수 있습니다. 개발 환경에서는 virtctl port-forward가 간편한 솔루션입니다."


📌 VM 상태 모니터링

KubeVirt VM의 상태를 모니터링하는 방법을 알아보겠습니다.

 

이벤트 확인

# VM 관련 이벤트 확인
$ kubectl get events | grep cirros-vm
# 출력: VM 관련 이벤트 목록 표시
# VM 생성, 시작, 종료 등 이벤트 정보가 시간순으로 나타남

 

상태 모니터링

# VM 상태 감시
$ watch kubectl get vm,vmi
# 출력: VM과 VMI 상태를 실시간으로 확인
# watch 명령어로 2초마다 자동 갱신됨

# 특정 VM의 세부 상태 확인
$ kubectl get vm cirros-vm -o jsonpath='{.status}' | jq
# 출력: VM의 상태 정보를 JSON 형식으로 출력
# jq를 통해 보기 좋게 포맷팅

 

리소스 사용량 확인

# VM Pod의 리소스 사용량 확인
$ kubectl top pod virt-launcher-cirros-vm-abc123
# 출력: VM Pod의 CPU 및 메모리 사용량 확인
# metrics-server가 설치되어 있어야 작동

# 노드 전체 리소스 사용량 확인
$ kubectl top node
# 출력: 노드의 전체 CPU 및 메모리 사용량 확인
# VM을 포함한 모든 워크로드의 리소스 사용 상황 파악 가능

📌 VM 삭제 및 정리

실습이 끝난 후 리소스를 정리하는 방법입니다.

VM 삭제

# 단일 VM 삭제
$ kubectl delete vm cirros-vm
virtualmachine.kubevirt.io "cirros-vm" deleted
# 출력: cirros-vm VM 리소스가 삭제됨
# VM 삭제 시 연관된 VMI와 virt-launcher Pod도 함께 삭제됨

# 다른 VM도 삭제
$ kubectl delete vm ssh-vm
virtualmachine.kubevirt.io "ssh-vm" deleted
# 출력: ssh-vm VM 리소스가 삭제됨

# 모든 VM 삭제 확인
$ kubectl get vm
No resources found in default namespace.
# 출력: 기본 네임스페이스에 VM이 없음을 확인

 

KubeVirt 제거 (선택 사항)

실습 환경을 완전히 정리하려면 KubeVirt를 제거할 수 있습니다:

# KubeVirt CR 삭제
$ kubectl delete -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml
# 출력: KubeVirt CR 삭제
# 이 명령은 virt-api, virt-controller, virt-handler 등 KubeVirt 컴포넌트를 삭제함

# Operator 및 관련 리소스 삭제
$ kubectl delete -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
# 출력: KubeVirt Operator 및 관련 리소스 삭제
# 이 명령은 CRD, 네임스페이스, RBAC 등 모든 KubeVirt 관련 리소스를 삭제함

 

실습 환경 재사용

다음 실습을 위해 Docker Desktop 쿠버네티스를 리셋하려면:

  1. Docker Desktop 아이콘 클릭 > Preferences
  2. Kubernetes 탭 선택
  3. "Reset Kubernetes Cluster" 버튼 클릭
  4. "Reset" 확인

▶️ 참고: "간단한 테스트 후에는 VM만 삭제하고 KubeVirt 설치는 유지하는 것이 좋습니다. 이렇게 하면 다음 실습을 더 빠르게 시작할 수 있습니다."


📌 Summary

이 글에서는 Docker Desktop의 쿠버네티스 환경에 KubeVirt를 설치하고 기본 VM을 실행하는 방법을 알아보았습니다. 주요 내용을 요약하면:

  • Docker Desktop 설정: 쿠버네티스 활성화 및 충분한 리소스 할당
  • KubeVirt 설치: Operator 설치 및 CR 생성 방식
  • 소프트웨어 에뮬레이션 설정: Docker Desktop 환경에서 VM 실행을 위한 구성
  • 첫 번째 VM 배포: VM 정의 및 관리 방법
  • VM 접속 및 관리: 콘솔 및 SSH 접속, 라이프사이클 관리
  • 모니터링 및 정리: VM 상태 확인 및 리소스 정리
728x90