Herding Virtual Machines

on Kubernetes using KubeVirt.

Fabian Deutsch, Red Hat, FrOSCon, 2017

(saomik, CC BY-NC-ND 2.0)

Fabian Deutsch

Fedora User

oVirt and KubeVirt Contributor ⇝ kubevirt.io

Working at Red Hat

 

@dummdida

fabiand

Virtualization is omnipresent. today.

(drome, CC BY-NC 2.0)

Containers as well.

(davehamster, CC BY 2.0)

Containers look, taste, and
smell the same - just better

"Versatile, scalable, hyped, community driven, devops, …"
Take this with a grain of salt.

(colinwarren, CC BY-NC 2.0)

How do we get there?

 

"Can I replace my VMs with containers?"

Are they REALLY substitutes?
Is the one like the other?

Technology? Features? Feeling? Tools? Requirements?

⇝ It depends

Not yet?
"never"?

Yes

No

Cool

Replace?

We are here, because we assume a change.

From scratch?

(teflon, CC BY-NC-ND 2.0)

Evolve.

(coreyann, CC BY-ND 2.0)

Management Plane

Storage

Network

 

Virtual Machines

 

Management Plane

Storage

Network

 

Virtual Machines

 

Management Plane

Storage

Network

 

Containers

 

2x Infrastructure?

Management Plane

Storage

Network

 

Virtual Machines

 

Management Plane

Storage

Network

 

Containers

 

KubeVirt

Containers
&
Virtual Machines

on the same infrastructure.

Management Plane

Storage

Network

 

Virtual Machines

 

 

Containers

 

Keep your VMs …

Management Plane

Storage

Network

 

Virtual Machines

 

 

Containers

 

… Transition what you need …

Management Plane

Storage

Network

 

Virtual Machines

 

 

Containers

 

… And stick to VMs as needed.

Woot?

Tell me more.

(image source: giphy)

Kubernetes

Storage

Network

 

Virtual Machines

 

 

Containers

 

Kubernetes

Storage

Network

 

Virtual Machines

 

 

Containers

 

+ KubeVirt

Pillars and effects.

libvirt, … everything in pods

 

New resource type for VMs

 

Operator pattern to manage VMs

 

VMs live inside pods

Native Kubernetes add-on

 

API server with VM functionality

 

Declarative, like everything else

 

Kubernetes' infrastructure is leveraged

 

 

 

(tabor-roeder, CC BY 2.0)

$ kubectl create -f pod.yaml
$ kubectl create -f vm.yaml
apiVersion: kubevirt.io/v1alpha1
kind: VM
metadata:
  name: testvm
spec:
  domain:
    devices:
      graphics:
      - type: spice
      video:
      - type: qxl
      disks:
      - type: network
        snapshot: external
        device: disk
        driver:
          name: qemu
          type: raw
          cache: none
        source:
          host:
            name: iscsi-demo-target.default
            port: "3260"
          protocol: iscsi
          name: iqn.2017-01.io.kubevirt:sn.42/2
        target:
          dev: vda
      consoles:
      - type: pty
    memory:
      unit: MB
      value: 64

$ minikube start --vm-driver kvm --network-plugin cni

$ git clone -b froscon-2017 \

        https://github.com/fabiand/kubevirt-demo.git

$ cd kubevirt-demo

$ bash run-mini-demo.sh

Try (with minikube)

$ bash run-mini-demo.sh
# Deploying KubeVirt
...
vm "testvm" created
Waiting for KubeVirt to be ready ...
Waiting for KubeVirt to be ready ...
Waiting for KubeVirt to be ready ...
# KubeVirt is now ready. Try:
# $ kubectl get vms

$ kubectl get vms
NAME      KIND
testvm    VM.v1alpha1.kubevirt.io

$ kubectl get pods
NAME                                      READY     STATUS    RESTARTS   AGE
haproxy-723816479-wcblm                   1/1       Running   1          49s
iscsi-demo-target-tgtd-1270025779-nckbh   1/1       Running   0          48s
libvirt-8zj1k                             2/2       Running   0          48s
spice-proxy-3525077118-fswn9              1/1       Running   0          47s
virt-api-1956313626-t9rhj                 1/1       Running   0          46s
virt-controller-2251532855-tfm9f          1/1       Running   0          45s
virt-handler-s7g76                        1/1       Running   0          43s
virt-launcher-testvm-----q05vh            1/1       Running   0          38s
virt-manifest-1665692876-cs8wp            2/2       Running   0          42s

$ kubectl exec -it libvirt-8zj1k bash
Defaulting container name to libvirtd.
Use 'kubectl describe pod/libvirt-8zj1k' to see all of the containers in this pod.
# virsh list
 Id    Name                           State
----------------------------------------------------
 1     default_testvm                 running

# exit

Thank you.

Learn and contribute at http://kubevirt.io

Herding Virtual Machines on Kubernetes using KubeVirt.

By Fabian Deutsch

Herding Virtual Machines on Kubernetes using KubeVirt.

Learn about one way to run virtual machines on Kubernetes.

  • 2,943