kubevirt基础知识
# 什么是kubevirt
什么是k8s CRD
Kubernetes中的CRD代表"Custom Resource Definition",即自定义资源定义。它是Kubernetes中的一个重要概念,用于扩展Kubernetes API,允许用户定义自己的自定义资源类型。
CRD允许您创建和管理自己的自定义资源对象,这些对象与Kubernetes内置资源(如Pod、Service、Deployment等)具有类似的生命周期管理能力。CRD的使用场景包括但不限于以下几种:
- 自定义控制器: 您可以创建自定义控制器来监视和管理自定义资源对象的状态,以便根据特定的应用需求自动执行操作。
- 自定义配置: 您可以使用CRD定义自定义配置对象,以便将应用程序或服务的配置参数存储为自定义资源。这使得配置管理更加灵活和可扩展。
- 操作日志和审计: 您可以创建CRD来记录操作日志或审计事件,以便更好地了解集群内的活动和故障排除。
- 多租户管理: 如果您需要在集群中实现多租户隔离,CRD可以用于定义租户对象,以便更好地管理和隔离租户之间的资源。
创建CRD通常需要以下步骤:
- 创建CRD定义,其中包括资源名称、字段结构和验证规则等信息。
- 使用
kubectl apply
或类似的工具将CRD定义应用到Kubernetes集群。- 创建自定义资源对象(CR),这些对象遵循CRD定义的结构。
- 创建或扩展控制器来处理CR对象的生命周期。
CRD为Kubernetes提供了很大的灵活性,使其能够适应各种不同的应用场景和需求。可以根据具体需求定义自定义资源,以便更好地管理和扩展Kubernetes集群。
什么是libvirtd
libvirtd
(通常称为libvirt守护进程)是一个开源的虚拟化管理工具,它提供了一种抽象层,用于管理多种虚拟化技术和虚拟机。libvirt允许你统一地管理和监控不同类型的虚拟机,包括KVM、QEMU、Xen、LXC、OpenVZ等。以下是libvirtd的一些主要功能和用途:
- 虚拟机管理:libvirtd允许你创建、启动、停止、暂停和删除虚拟机。这些虚拟机可以是基于KVM、QEMU或其他虚拟化技术的。
- 资源管理:你可以使用libvirtd来管理虚拟机的资源分配,如CPU、内存、磁盘和网络。这使得你可以有效地控制和调整虚拟机的性能和资源使用。
- 网络管理:libvirt提供了网络管理功能,允许你创建和配置虚拟网络,以便虚拟机可以与主机和其他虚拟机进行通信。
- 存储管理:它还允许你管理虚拟机的存储,包括创建、删除和挂载虚拟磁盘。
- 远程管理:libvirtd支持远程管理,这意味着你可以从远程计算机上管理虚拟机和宿主机。
- 支持多种虚拟化技术:libvirt支持多种虚拟化技术,因此你可以使用它来管理不同类型的虚拟机,而无需了解每种技术的细节。
总之,libvirtd是一个强大的虚拟化管理工具,适用于虚拟化环境中的资源管理、虚拟机创建和监控。它提供了一个方便的方式来管理各种虚拟化技术,使管理员能够更轻松地管理和维护虚拟化基础架构。它通常用于Linux系统上,作为虚拟化技术堆栈的一部分。
后Kubernetes时代的虚拟机管理技术之kubevirt篇 (opens new window)
virt-host-validate qemu
安装:
前提,已经安装了k8s
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/v0.57.0/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/v0.57.0/kubevirt-cr.yaml
2
3
- 查看pod启动情况
get pods -n kubevirt
root@openstackTest-1:~/kubevirt# kubectl get pods -n kubevirt
NAME READY STATUS RESTARTS AGE
virt-api-679958f6c4-8tczm 1/1 Running 0 42s
virt-api-679958f6c4-m6f9k 1/1 Running 0 42s
virt-operator-84b569bcf4-q8btk 1/1 Running 0 5m28s
virt-operator-84b569bcf4-xkhbj 1/1 Running 0 5m28s
root@openstackTest-1:~/kubevirt# kubectl get kubevirt -n kubevirt
NAME AGE PHASE
kubevirt 7m56s Deployed
2
3
4
5
6
7
8
9
10
11
12
下载virtctl
wget https://github.com/kubevirt/kubevirt/releases/download/v0.57.0/virtctl-v0.57.0-linux-amd64 -O virtctl
--2023-09-04 23:50:27-- https://github.com/kubevirt/kubevirt/releases/download/v0.57.0/virtctl-v0.57.0-linux-amd64
2
# 如何创建一个虚拟机
创建虚拟机
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=
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
查看虚拟机状态
kubectl get vms
root@openstackTest-1:~/kubevirt# kubectl get vms
NAME AGE STATUS READY
testvm 75s Stopped False
2
3
启动虚拟机
root@openstackTest-1:~/kubevirt# virtctl start testvm
VM testvm was scheduled to start
2
发现虚拟机没有启动起立,返回以下内容
- lastProbeTime: null
lastTransitionTime: "2023-09-04T16:24:50Z"
message: '0/3 nodes are available: 3 node(s) didn''t match Pod''s node affinity/selector.
preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..'
reason: Unschedulable
status: "False"
type: PodScheduled
guestOSInfo: {}
phase: Scheduling
2
3
4
5
6
7
8
9
10
https://github.com/kubevirt/kubevirt/issues/7780