본문 바로가기

Cloud/MSA

[Kubevirt] vm 생성

사전 설치 : Kubevirt, cdi, rook-ceph(file-Storage 대체 가능)

 

1. 네임스페이스 limit-range 생성

- 컨테이너 형식으로 생성되는 vm은 호스트 os의 커널을 공유한다.

- 모든 자원을 독점 사용으로 인하여, 모든 서비스에 영향을 미칠 수 있으므로 해당 namespace의 자원을 제한한다.

---

apiVersion: v1
kind: LimitRange
metadata:
  name: piracoon-limit-range
  namespace: piracoon
spec:
  limits:
    - default:
        cpu: 4
        memory: 4Gi
      defaultRequest:
        cpu: 3
        memory: 512Mi
      type: Container

---

 

2. loadBalancer 생성

- windows vm을 생성한다면 포트는 3389로 설정한다. (원격 데스크탑 연결 시도 시, 3389포트 사용)

- linux vm을 생성한다면 포트는 22로 설정한다. (default ssh 22포트 사용)

- selector는 이후 생성하는 vm에 명시를 해줘야 해당 externalIP로 접근이 가능하다.

- LoadBalancer를 설정해 주지 않았다면 NodePort로 지정해도 좋다.

---

apiVersion: v1
kind: Service
metadata:
  name: windows-lb
  namespace: piracoon
spec:
  selector:
      piracoonlb: lb
  ports:
    - protocol: TCP
      port: 3389
      targetPort: 3389
  type: LoadBalancer

---

 

3. 데이터 볼륨 생성

- 호스트 os의 커널을 공유하기 때문에 ISO 파일로 설치하는 과정과 다르다. 

- 데이터 볼륨을 생성을 해줘야 부팅을 할 수 있는 스토리지가 생성된다.

- 이때, 지정한 크기의 2배 저장공간이 확보가 되어야 한다.

---

apiVersion: cdi.kubevirt.io/v1alpha1

kind: DataVolume
metadata:
  name: dv-windows
  namespace: piracoon
spec:
  source:
    registry:
            url: "docker://xxx.xxx.xxx.81:5000/vm/windows_server:2012r2"
  pvc:
    storageClassName: rook-ceph-block
    reclaimPolicy:
    - Delete
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 100Gi
---

 

4. vm 생성

---

apiVersion: kubevirt.io/v1alpha3

kind: VirtualMachine
metadata:
  name: vm-windows
  namespace: piracoon
spec:
  running: true
  template:
    metadata:
      labels:
        lbtest: lb
    spec:
      hostname: master
      domain:
        machine:
          type: q35
        devices:
          disks:
            - disk:
                bus: virtio
              name: rootdisk
            - cdrom:
                bus: sata
                readonly: true
              name: cloudinitdisk
          interfaces:
            - name: default
              model: virtio
              bridge: {}
        cpu:
          cores: 4
        memory:
          guest: 4Gi
        resources:
          overcommitGuestOverhead: false
          requests:
            cpu: 3500m
            memory: 4Gi
          limits:
            cpu: 4500m
            memory: 5Gi
      terminationGracePeriodSeconds: 0
      networks:
        - name: default
          pod: {}
      volumes:
        - name: rootdisk
          persistentVolumeClaim:
            claimName: dv-windows
        - name: cloudinitdisk
          cloudInitConfigDrive:
            userData: |
              #ps1_sysnative
              NET USER piracoon "Qwer12345" /ADD
              NET LOCALGROUP "Administrators" "piracoon" /add

---