kubevirt初体验
在云计算发展过程中,有两类虚拟化平台技术:
• OpenStack(laaS):关注虚拟机的计算、网络和存储资源管理
• Kubernetes(PaaS):关注容器的自动化部署、编排调度和发布管理
安装Kubevirt组件
如果虚拟化不可用,则需要手动开启软件仿真
kubectl create configmap kubevirt-config -n kubevirt --from-literal debug.useEmulation=true --from-literal feature-gates=Macvtap,LiveMigration,Snapshot
# LiveMigration 开启迁移功能
# Snapshot 开启快照功能
export VERSION=v0.46.1
echo $VERSION
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-cr.yaml
检查实例是否正常运行
kubectl get pods -n kubevirt
使用KubeVirt创建虚拟机
wget https://kubevirt.io/labs/manifests/vm.yaml
kubectl apply -f vm.yaml
kubectl get vm
vm.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: testvm
spec:
running: false
template:
metadata:
labels:
kubevirt.io/size: small
kubevirt.io/domain: testvm
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
interfaces:
- name: default
masquerade: {}
resources:
requests:
memory: 64M
networks:
- name: default
pod: {}
volumes:
- name: containerdisk
containerDisk:
image: quay.io/kubevirt/cirros-container-disk-demo
- name: cloudinitdisk
cloudInitNoCloud:
userDataBase64: SGkuXG4=
virtctl常用命令
export VERSION=v0.41.0
wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
copy virtctl-v0.41.0-linux-amd64 /usr/local/sbin/virtctl
chmod +x /usr/local/sbin/virtctl
virtctl start testvm
virtctl stop testvm
virtctl restart testvm
virtctl console testvm
退出虚拟机
快捷键: ctrl+]
创建虚拟机快照和恢复
snap.yaml
apiVersion: snapshot.kubevirt.io/v1alpha1
kind: VirtualMachineSnapshot
metadata:
name: snap-testvm
spec:
source:
apiGroup: kubevirt.io
kind: VirtualMachine
name: testvm
查看快照
kubectl get virtualmachinesnapshot.snapshot.kubevirt.io
recovery-snap.yaml
apiVersion: snapshot.kubevirt.io/v1alpha1
kind: VirtualMachineRestore
metadata:
name: restore-testvm
spec:
target:
apiGroup: kubevirt.io
kind: VirtualMachine
name: testvm
virtualMachineSnapshotName: snap-testvm
查看恢复快照
kubectl get virtualmachinerestore.snapshot.kubevirt.io
目前测试镜像快照和恢复有问题,恢复虚拟机快照数据丢失。
虚拟机迁移
virtctl migrate testvm
会将虚拟机vm从一个节点迁移到另外一台节点上,测试从旧节点迁移到新节点,不会丢数据。
查看命令
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
virt-launcher-testvm-bwfh8 3/3 Running 0 14m 172.12.124.24 node-117 <none> <none>
virt-launcher-testvm-znv55 1/3 NotReady 0 21h 172.12.64.96 node-119 <none> <none>
迁移前
kubectl get vmi
NAME AGE PHASE IP NODENAME READY
testvm 21h Running 172.12.64.96 node-119 Tru
迁移后
kubectl get vmi
NAME AGE PHASE IP NODENAME READY
testvm 21h Running 172.12.124.24 node-117 Tru
kubevirt磁盘和卷
在 spec.volumes 下可以指定多种类型的卷:
cloudInitNoCloud:Cloud-init相关的配置,用于修改或者初始化虚拟机中的配置信息 containerDisk:指定一个包含 qcow2 或 raw 格式的 docker 镜像,重启 vm 数据会丢失 dataVolume:动态创建一个 PVC,并用指定的磁盘映像填充该 PVC,重启 vm 数据不会丢失 emptyDisk:从宿主机上分配固定容量的空间,映射到vm中的一块磁盘,emptyDisk 的生命周期与 vm 等同,重启 mv 数据会丢失
ephemeral: 在虚机启动时创建一个临时卷,虚机关闭后自动销毁,临时卷在不需要磁盘持久性的任何情 况下都很有用。
hostDisk:在宿主机上创建一个 img 镜像文件,挂给虚拟机使用。重启 vm 数据不会丢失。 persistentVolumeClaim: 指定一个 PVC 创建一个块设备。重启 vm 数据不会丢失。
configMap
serviceAccount
secret : 可以把信息configMap,serviceAccount,secret写入到 iso 磁盘中,挂给虚拟机。
删除命名空间下异常pod
delete_unexpect_pods.sh
namespace=$1
list=`kubectl get pods -n $namespace | grep UnexpectedAdmissionError |awk '{print $1}'`
for i in $list;do echo $i; kubectl delete pods -n $namespace $i;done
参考链接
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!