baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 华仔聊技术

  • 业务设计

  • 场景设计

  • 运维

  • 安全

  • 面试

  • mac相关工具推荐

  • 开发工具

  • 人工智能

  • 推荐

  • 阅读

  • 工具

  • 计划

  • 产品

  • 云原生

  • go

  • QVM

    • OpenStack

    • K8S

    • kubevirt

      • kubevirt基础知识
        • 什么是kubevirt
        • 如何创建一个虚拟机
          • 虚拟机
      • 基础知识
      • GPU相关知识
      • kubevirt安装过程
  • 软件设计师

  • 极客时间

  • 单元测试

  • 其他
  • QVM
  • kubevirt
xugaoyi
2023-09-05
目录

kubevirt基础知识

# 什么是kubevirt

什么是k8s CRD

Kubernetes中的CRD代表"Custom Resource Definition",即自定义资源定义。它是Kubernetes中的一个重要概念,用于扩展Kubernetes API,允许用户定义自己的自定义资源类型。

CRD允许您创建和管理自己的自定义资源对象,这些对象与Kubernetes内置资源(如Pod、Service、Deployment等)具有类似的生命周期管理能力。CRD的使用场景包括但不限于以下几种:

  1. 自定义控制器: 您可以创建自定义控制器来监视和管理自定义资源对象的状态,以便根据特定的应用需求自动执行操作。
  2. 自定义配置: 您可以使用CRD定义自定义配置对象,以便将应用程序或服务的配置参数存储为自定义资源。这使得配置管理更加灵活和可扩展。
  3. 操作日志和审计: 您可以创建CRD来记录操作日志或审计事件,以便更好地了解集群内的活动和故障排除。
  4. 多租户管理: 如果您需要在集群中实现多租户隔离,CRD可以用于定义租户对象,以便更好地管理和隔离租户之间的资源。

创建CRD通常需要以下步骤:

  1. 创建CRD定义,其中包括资源名称、字段结构和验证规则等信息。
  2. 使用kubectl apply或类似的工具将CRD定义应用到Kubernetes集群。
  3. 创建自定义资源对象(CR),这些对象遵循CRD定义的结构。
  4. 创建或扩展控制器来处理CR对象的生命周期。

CRD为Kubernetes提供了很大的灵活性,使其能够适应各种不同的应用场景和需求。可以根据具体需求定义自定义资源,以便更好地管理和扩展Kubernetes集群。

什么是libvirtd

libvirtd(通常称为libvirt守护进程)是一个开源的虚拟化管理工具,它提供了一种抽象层,用于管理多种虚拟化技术和虚拟机。libvirt允许你统一地管理和监控不同类型的虚拟机,包括KVM、QEMU、Xen、LXC、OpenVZ等。

以下是libvirtd的一些主要功能和用途:

  1. 虚拟机管理:libvirtd允许你创建、启动、停止、暂停和删除虚拟机。这些虚拟机可以是基于KVM、QEMU或其他虚拟化技术的。
  2. 资源管理:你可以使用libvirtd来管理虚拟机的资源分配,如CPU、内存、磁盘和网络。这使得你可以有效地控制和调整虚拟机的性能和资源使用。
  3. 网络管理:libvirt提供了网络管理功能,允许你创建和配置虚拟网络,以便虚拟机可以与主机和其他虚拟机进行通信。
  4. 存储管理:它还允许你管理虚拟机的存储,包括创建、删除和挂载虚拟磁盘。
  5. 远程管理:libvirtd支持远程管理,这意味着你可以从远程计算机上管理虚拟机和宿主机。
  6. 支持多种虚拟化技术: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
1
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

1
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
1
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=

1
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
1
2
3

启动虚拟机

root@openstackTest-1:~/kubevirt# virtctl start testvm
VM testvm was scheduled to start
1
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

1
2
3
4
5
6
7
8
9
10

https://github.com/kubevirt/kubevirt/issues/7780

# 虚拟机

image-20230906101725309

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
kubeconfig详解
基础知识

← kubeconfig详解 基础知识→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式