云原生虚拟化kubevirt安装

kubevirt 介绍

Kubevirt 是 Redhat 开源的一套以容器方式运行虚拟机的项目,通过 kubernetes 云原生方式来管理虚拟机生命周期。它通过使用自定义资源(CRD)和其它 Kubernetes 功能来无缝扩展现有的集群,以提供一组可用于管理虚拟机的虚拟化API。

在这里插入图片描述

利用 KubeVirt 和 Kubernetes 可以管理不便于容器化且适合虚拟机的应用,将已有的虚拟化工作负载与新容器化的工作负载相结合共存于同一个平台,并支持在容器中与已有的虚拟化应用有交互的新微服务应用的开发。

在这里插入图片描述

KubeVirt 项目于 2016 年底在红帽启动,由Red Hat、IBM、Google、Intel、SUSE等公司和组织共同推动和贡献。提出的问题是:虚拟机 (VM) 可以在容器中运行并由 Kubernetes 部署吗?事实证明,它不仅是可行的,而且很快就成为容器时代虚拟机未来的一个有前景的解决方案。

KubeVirt 于 2019 年 9 月作为沙箱项目加入CNCF,并于 2022 年 4 月作为孵化项目加入 CNCF。经过7年的不懈努力,KubeVirt于2023年7月发布v1.0.0,标志着其已达到生产就绪水平并拥有健康的社区。

云原生虚拟化介绍

参考:https://www.redhat.com/zh/engage/container-virtualisation-2024

云原生虚拟化(Cloud Native Virtualization)是指将虚拟化技术与云原生生态系统相结合,以更高效地管理虚拟机(VM)和容器化的工作负载。它将虚拟机作为云原生架构中的一部分,与容器工作负载一起运行、管理和编排,从而提供更强的灵活性和资源利用率。

传统虚拟化将多个虚拟机运行在物理服务器上,而云原生虚拟化则以云原生的方式进行虚拟机管理,集成了容器、微服务架构和现代 DevOps 实践。其主要目标是使虚拟机和容器能够无缝共存,并利用 Kubernetes 等编排工具来管理所有工作负载。

如何选择合适的虚拟化技术路线,云原生2.0时代,虚拟化技术发展路线。

在这里插入图片描述
在当今的企业环境中,虚拟化建设已经成为常态,而部分企业更是迈入了云原生时代,我们将其称为云原生1.0时代。随着业务和产品的不断演进,例如虚拟化产品的升级和新业务的涌现,企业迫切需要一个更加灵活、高效和简洁的核心平台,这标志着云原生2.0时代的到来。

kubevirt 安装

官方文档:https://kubevirt.io/user-guide/cluster_admin/installation/

环境信息

3个kubernetes节点,操作系统为Ubuntu 22.04.2 LTS,CPU内存磁盘4C/16G/100G,kubernetes版本v1.29.3

root@node40:~# kubectl get nodes -o wide
NAME     STATUS   ROLES           AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
node40   Ready    control-plane   154d   v1.29.3   192.168.72.40   <none>        Ubuntu 22.04.2 LTS   5.15.0-105-generic   containerd://1.7.15
node41   Ready    <none>          154d   v1.29.3   192.168.72.41   <none>        Ubuntu 22.04.2 LTS   5.15.0-76-generic    containerd://1.7.15
node42   Ready    <none>          154d   v1.29.3   192.168.72.42   <none>        Ubuntu 22.04.2 LTS   5.15.0-122-generic   containerd://1.7.15

前置要求

在开始之前需要满足一些要求:

  • Kubernetes集群或衍生产品(例如OpenShift)基于 KubeVirt 版本发布时发布的最新三个 Kubernetes 版本之一。
  • Kubernetes apiserver 必须具有--allow-privileged=true才能运行 KubeVirt 的特权 DaemonSet。
  • kubectl客户端实用程序

版本支持矩阵

官方参考:https://github.com/kubevirt/sig-release/blob/main/releases/k8s-support-matrix.md

kubevirt与kubernetes版本兼容性如下表所示:

KubeVirt版本1.301.291.281.27EOL1.26EOL1.25EOL
1.3---
1.2-EOL--
1.1--EOLEOL-
1.0---EOLEOLEOL
0.59----EOLEOL

注意: EOL表示 Kubernetes 版本受 KubeVirt 支持,但已达到生命周期终点。

容器运行时支持

目前以下容器运行时支持 KubeVirt:

  • containerd
  • crio (with runv)

其他不使用虚拟化功能的容器运行时也应该可以工作。然而,上述那些是主要目标。

验证硬件虚拟化支持

建议使用支持虚拟化的硬件。您可以使用 virt-host-validate 确保您的主机能够运行虚拟化工作负载:

$ apt install libvirt-clients -y
$ virt-host-validate qemuQEMU: Checking for hardware virtualization                                 : PASSQEMU: Checking if device /dev/kvm exists                                   : PASSQEMU: Checking if device /dev/kvm is accessible                            : PASSQEMU: Checking if device /dev/vhost-net exists                             : PASSQEMU: Checking if device /dev/net/tun exists                               : PASS
...

kubevirt 安装流程

KubeVirt 可以使用 KubeVirt operator安装,该operator管理所有 KubeVirt 核心组件的生命周期。以下是如何使用官方版本安装 KubeVirt 的示例。

下载yaml文件

export RELEASE=v1.3.0
wget https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
wget https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml

运行yaml文件

kubectl apply -f kubevirt-operator.yaml
kubectl apply -f kubevirt-cr.yaml

等待组件完全启动

 kubectl -n kubevirt wait kv kubevirt --for condition=Available

查看运行的pods

root@node40:~# kubectl -n kubevirt get pods NAME                               READY   STATUS    RESTARTS        AGE
virt-api-f97fbdff-twmw9            1/1     Running   0               4d17h
virt-api-f97fbdff-vmnlg            1/1     Running   0               4d17h
virt-controller-6bf9f4477f-4lzgg   1/1     Running   3 (3d20h ago)   4d17h
virt-controller-6bf9f4477f-dr6dw   1/1     Running   2 (3d20h ago)   4d17h
virt-handler-86zh6                 1/1     Running   0               4d17h
virt-handler-mhdqq                 1/1     Running   0               4d17h
virt-handler-xcp7k                 1/1     Running   0               4d17h
virt-operator-59f5558dcd-5txb8     1/1     Running   3 (3d20h ago)   4d17h
virt-operator-59f5558dcd-hzvw6     1/1     Running   2 (3d20h ago)   4d17h

如果硬件虚拟化不可用,则可以通过在 KubeVirt CR 中设置来启用软件模拟回退,将 spec.configuration.developerConfiguration.useEmulation 设置为true如下:

$ kubectl edit -n kubevirt kubevirt kubevirt

将以下内容添加到kubevirt.yaml文件中

spec:...configuration:developerConfiguration:useEmulation: true

virtctl 客户端工具安装

基本的 VirtualMachineInstance 操作可以使用 stock kubectl实用程序执行。但是,需要virtctl二进制实用程序才能使用高级功能,例如:

  • 串行和图形控制台访问
  • 启动和停止 VirtualMachineInstances
  • 实时迁移 VirtualMachineInstances 和取消实时迁移
  • 上传虚拟机磁盘镜像

可以从官方发布页面检索该工具的最新版本。

下载安装示例如下:

export VERSION=v1.3.0
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
chmod +x virtctl
sudo install virtctl /usr/local/bin

kubevirt 创建虚拟机

kubevirt支持多种方式导入虚拟机镜像,常用的有containerDiskdataVolumepersistentVolumeClaim (PVC)等。

具体参考官方文档:https://kubevirt.io/user-guide/storage/disks_and_volumes/

下面以containerDisk为例,介绍如何创建和管理虚拟机。

官方container-disk镜像地址:https://github.com/kubevirt/containerdisks

NameImage
CentOS Streamquay.io/containerdisks/centos-stream:9
Fedoraquay.io/containerdisks/fedora:40
Ubuntuquay.io/containerdisks/ubuntu:22.04

创建cirros虚拟机

下载官方示例yaml文件

wget https://kubevirt.io/labs/manifests/vm.yaml

查看yaml文件内容

root@node40:~# cat vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:name: testvm
spec:running: falsetemplate:metadata:labels:kubevirt.io/size: smallkubevirt.io/domain: testvmspec:domain:devices:disks:- name: containerdiskdisk:bus: virtio- name: cloudinitdiskdisk:bus: virtiointerfaces:- name: defaultmasquerade: {}resources:requests:memory: 64Mnetworks:- name: defaultpod: {}volumes:- name: containerdiskcontainerDisk:image: quay.io/kubevirt/cirros-container-disk-demo- name: cloudinitdiskcloudInitNoCloud:userDataBase64: SGkuXG4=

应用yaml文件

kubectl apply -f vm.yaml

查看创建的虚拟机,默认虚拟机未启动

root@node40:~# kubectl get vm
NAME                   AGE     STATUS    READY
testvm                 4s      Stopped   False

启动虚拟机

root@node40:~# virtctl start testvm
VM testvm was scheduled to start

查看虚拟机运行状态为Running

root@node40:~# kubectl get vm
NAME                   AGE     STATUS    READY
testvm                 3m19s   Running   True

通过控制台访问虚拟机

root@node40:~# virtctl console testvm
Successfully connected to testvm console. The escape sequence is ^]login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
testvm login: cirros
Password: 
$ 
$ cat /etc/os-release 
NAME=Buildroot
VERSION=2015.05-g31af4e3-dirty
ID=buildroot
VERSION_ID=2015.05
PRETTY_NAME="Buildroot 2015.05"
$ 

通过nodeport service 暴露虚拟机SSH端口

virtctl expose virtualmachine  testvm --name vmiservice-node --target-port 22 --port 24 --type NodePort

查看创建的service

root@node40:~# kubectl get svc
NAME              TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1    <none>        443/TCP        154d
vmiservice-node   NodePort    10.96.3.81   <none>        24:32310/TCP   2m42s

通过SSH远程访问虚拟机

root@node40:~# ssh -p 32310 cirros@192.168.72.40
cirros@192.168.72.40's password: 
$ 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000link/ether 3e:01:5a:08:21:5b brd ff:ff:ff:ff:ff:ffinet 10.0.2.2/24 brd 10.0.2.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::3c01:5aff:fe08:215b/64 scope link valid_lft forever preferred_lft forever
$ 

创建CentOS虚拟机

示例yaml如下

root@node40:~# cat centos_vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:creationTimestamp: nullname: centos-stream
spec:runStrategy: Alwaystemplate:metadata:creationTimestamp: nullspec:domain:devices:disks:- disk:bus: virtioname: containerdisk- disk:bus: virtioname: cloudinitrng: {}resources:requests:memory: 1GiterminationGracePeriodSeconds: 180volumes:- containerDisk:image: quay.io/containerdisks/centos-stream:9name: containerdisk- cloudInitNoCloud:userData: |-#cloud-config# The default username is: cloud-userpassword: cloud-passwordchpasswd: { expire: False }name: cloudinit
status: {}

创建虚拟机

kubectl apply -f centos_vm.yaml

访问虚拟机,默认用户为cloud-user,密码为cloudInitNoCloud中设定的密码cloud-password

root@node40:~# kubectl get vm
NAME            AGE   STATUS    READY
centos-stream   19m   Running   True
testvm          69m   Running   True
root@node40:~# 
root@node40:~# virtctl console centos-stream
Successfully connected to centos-stream console. The escape sequence is ^]centos-stream login: cloud-user
Password: 
Last login: Sun Sep 22 22:06:45 on ttyS0
[cloud-user@centos-stream ~]$ cat /etc/os-release 
NAME="CentOS Stream"
VERSION="9"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="9"
PLATFORM_ID="platform:el9"
PRETTY_NAME="CentOS Stream 9"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:centos:centos:9"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://issues.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
[cloud-user@centos-stream ~]$ 

创建Fedora虚拟机

示例yaml如下

root@node40:~# cat fedora_vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:creationTimestamp: nullname: fedora
spec:runStrategy: Alwaystemplate:metadata:creationTimestamp: nullspec:domain:devices:disks:- disk:bus: virtioname: containerdisk- disk:bus: virtioname: cloudinitrng: {}features:acpi: {}smm:enabled: truefirmware:bootloader:efi:secureBoot: trueresources:requests:memory: 1GiterminationGracePeriodSeconds: 180volumes:- containerDisk:image: quay.io/containerdisks/fedora:40name: containerdisk- cloudInitNoCloud:userData: |-#cloud-config# The default username is: fedorapassword: fedorachpasswd: { expire: False }name: cloudinit
status: {}

访问虚拟机,默认用户为fedora,密码为cloudInitNoCloud中设定的密码fedora

root@node40:~# kubectl get vm
NAME            AGE     STATUS    READY
centos-stream   10m     Running   True
fedora          5m31s   Running   True
testvm          60m     Running   True
root@node40:~#
root@node40:~# virtctl console fedora
Successfully connected to fedora console. The escape sequence is ^]fedora login: fedora
Password: 
[fedora@fedora ~]$ cat /etc/os-release 
NAME="Fedora Linux"
VERSION="40 (Cloud Edition)"
ID=fedora
VERSION_ID=40
VERSION_CODENAME=""
PLATFORM_ID="platform:f40"
PRETTY_NAME="Fedora Linux 40 (Cloud Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:40"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f40/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=40
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=40
SUPPORT_END=2025-05-13
VARIANT="Cloud Edition"
VARIANT_ID=cloud
[fedora@fedora ~]$ 

创建Ubuntu虚拟机

示例yaml如下

root@node40:~# cat ubuntu_vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:creationTimestamp: nullname: ubuntu
spec:runStrategy: Alwaystemplate:metadata:creationTimestamp: nullspec:domain:devices:disks:- disk:bus: virtioname: containerdisk- disk:bus: virtioname: cloudinitrng: {}resources:requests:memory: 1GiterminationGracePeriodSeconds: 180volumes:- containerDisk:image: quay.io/containerdisks/ubuntu:22.04name: containerdisk- cloudInitNoCloud:userData: |-#cloud-config# The default username is: ubuntupassword: ubuntuchpasswd: { expire: False }name: cloudinit
status: {}

访问虚拟机,默认用户为ubuntu,密码为cloudInitNoCloud中设定的密码ubuntu

root@node40:~# kubectl get vm
NAME            AGE   STATUS    READY
centos-stream   19m   Running   True
fedora          14m   Running   True
testvm          69m   Running   True
ubuntu          86s   Running   True
root@node40:~# 
root@node40:~# virtctl console ubuntu
Successfully connected to ubuntu console. The escape sequence is ^]ubuntu login: ubuntu
Password: 
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-119-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proSystem information disabled due to load higher than 1.0Expanded Security Maintenance for Applications is not enabled.0 updates can be applied immediately.Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro statusThe list of available updates is more than a week old.
To check for new updates run: sudo apt updateThe programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.ubuntu@ubuntu:~$ 
ubuntu@ubuntu:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
ubuntu@ubuntu:~$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544048.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript的注释与常见输出方式

注释 源码中注释是不被引擎所解释的&#xff0c;它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释&#xff0c;用//起头;另一种是多行注释&#xff0c;放在/*和*/之间。 单行注释&#xff1a; //这是单行注释 多行注释&#xff1a; /*这是 多行 注…

远程升级,你成功了吗?

最近又遇到了远程升级失败的情况&#xff0c;而且是不明原因的多次接连失败。。。 事情是这样的&#xff1a;最近有客户反馈在乡村里频繁出现掉线的情况。通过换货、换SIM卡对比排查测试&#xff0c;发现只有去年5月22号采购的那批模块在客户环境附近会出现掉线的情况&#xf…

服务器操作系统【sar 命令】

sar 安装、语法参数说明以及示例 文章目录 功能概述一、功能介绍1.安装配置2. 配置3. 启动二、sar 语法及参数说明三、示例及释义1.汇报 io 传输速率信息2.内存分页信息3.块设备状态信息4.hugepages 利用率统计信息5.列长度和负载平均值6.内存利用率统计信息7.swap 交换空间利用…

Redis数据持久化总结笔记

Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能&#xff01; Redis 提供了 2 个不同形式的持久化方式 RDB&#xff08;Redis DataBase&#…

VS2019配置Open3Dv0.18.0版本库

文章目录 一、引言二、配置过程三、举个例子参考资料一、引言 现在如果直接使用vs2019对Open3D(v0.15.2)进行编译,会比较麻烦,一是需要科学上网,另一个就是容易出现错误,这里就仍然按照之前的思路来配置新版本的Open3D(VS2015(及以上版本)配置Open3Dv0.15.2版本库)。 二…

科研小白入门工具

三、科研绘图 1.流程图绘制工具&#xff1a;powerpoint、亿图图示、visio、draw.io 2.绘制标准&#xff1a;布局合理、色彩鲜明、字体大小、矢量输出 矢量图绘制推荐流程&#xff1a;亿图图示绘制--visio--word--pdf无损放大 3.文章插图&#xff1a;excel、origin、matlab、…

【JUC并发编程系列】深入理解Java并发机制:Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)

文章目录 【JUC并发编程系列】深入理解Java并发机制&#xff1a;Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)1. Volatile的特性2. Volatile的用法3. CPU多核硬件架构剖析4. JMM内存模型4.1 主要特性4.2 JMM 的工作原理4.3 实现机制 5.…

电商跨境电商商城系统/网上商城接口/电商数据接口详情

电商API接口背景&#xff1a;电商运营中&#xff0c;数据分析这项工作越来越重要&#xff0c;许多品牌方也越来越热衷去做电商数据分析。不过&#xff0c;全面的数据该如何获取呢&#xff0c;此时&#xff0c;电商数据接口的重要性便凸显出来了。 电商API数据接口主要有以下特…

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法&#xff1a; (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…

对c语言中的指针进行深入全面的解析

1.普通的指针: 实际上指针就是存放地址的变量&#xff0c;eg: int a10; int *p&a; 拆分一下int *中的*说明p是一个指针&#xff0c;int是它所指向的类型&#xff1b; 2.字符串指针和字符串数组 char*str1"abcd"; 先看这一个&#xff0c;这个就是一个字符串…

[vulnhub] Hackademic.RTB1

第一次打靶机&#xff0c;思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境&#xff1a;kali Linux - 192.168.75.131&#xff0c;靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线&#xff0c;不进行端口扫描 nmap -sP 192.16…

关于API概念:连接数字世界的桥梁

在数字化时代&#xff0c;信息和数据的流动是构建现代应用程序的基础。API&#xff08;应用程序编程接口&#xff09;作为连接不同软件和服务的桥梁&#xff0c;正逐渐成为现代技术架构中不可或缺的一部分。本文将探讨API的概念、重要性以及它如何塑造我们的数字生活。 什么是A…

解决Echarts:宽度100%,渲染的宽度却是100px

为什么我们宽度设置了100%&#xff0c;结果变为了100px&#xff1f; 源码这里没有获取到clientWidth&#xff0c;会将设置的width:100%转换称100px 解决办法&#xff1a; <div ref"numberPieRef"></div>let numberPieRef ref(null); let myChart nu…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

深度学习之表示学习 - 贪心逐层无监督预训练篇

引言 在人工智能的浩瀚星空中&#xff0c;深度学习以其强大的数据处理与模式识别能力&#xff0c;成为了一颗璀璨的明星。而表示学习&#xff0c;作为深度学习的核心基石之一&#xff0c;正引领着这一领域不断突破边界。表示学习旨在将原始数据转换为更加抽象、更有意义的特征…

【51实物与仿真】基于51单片机设计的波形/函数发生器(正弦波、锯齿波、三角波、矩形波,设定频率步进值,改变振幅,LCD显示)——文末完整资料链接

基于51单片机设计的波形函数发生器 演示视频: 功能简介: 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。 2.LCD1602液晶显示波形种类和频率值(10-100HZ)。 3.按键设置波形种类和设定频率步进值。 4.电位器器改变振幅(0V-3.5V稳定)。 5…

苹果AI手机遇阻,国产手机找到超车机遇

行至九月&#xff0c;2024年&#xff0c;这个所谓AI手机的元年&#xff0c;已经走过近三个季度了。 市场最为期待的AI手机机型也基本都发布了。9月20日&#xff0c;首款搭载Apple Intelligence功能的苹果新品iPhone16正式发售。或许是为了进一步扩大销售&#xff0c;今年天猫A…

html+css(如何用css做出京东页面,静态版)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>京东</title><link rel"stylesheet&q…

OmniPeek 空口抓包软件安装指导

OmniPeek 空口抓包软件安装指导 1 双击omnp75安装包---Unzip解压缩 生成install包 2 进入install文件夹点击setup开始进入安装界面 3 点击install Omnipeek 4 点击next,勾选手动安装

基于微信小程序的竞赛答题小程序开发笔记(一)

开发背景调研 中小学学科答题小程序&#xff0c;适合各中小学校方&#xff0c;老师或者家长。通过互动和参与式学习&#xff0c;小程序能够通过游戏化元素提升学习的积极性和参与度&#xff0c;从而提升学习效率&#xff0c;促进学生自主学习 功能规划 分类题库&#xff1a;…