DevStack 基于 Ubuntu 部署 OpenStack

news2024/9/23 21:32:15

Devstack 简介

DevStack 是一系列可扩展的脚本,用于基于 git master 的最新版本快速调出完整的 OpenStack 环境。devstack 以交互方式用作开发环境和 OpenStack 项目大部分功能测试的基础。

  • devstack 透过执行 stack.sh 脚本,搭建 openstack 环境,依据 local.conf 参数,决定提供哪些服务
  • 使用 systemd 来管理 devstack 部署的 OpenStack DevStack 插件。支持额外的 Openstack
  • 服务,以插件接口的概念,扩展 openstack 服务

在这里插入图片描述
官方文档:
https://docs.openstack.org/devstack/latest/

项目地址:
https://opendev.org/openstack/devstack

https://github.com/openstack/devstack

devstack 安装

从干净且最小化的 Linux 系统安装开始。 DevStack 尝试支持 Ubuntu、Rocky Linux 和 openEuler的两个最新 LTS 版本。如果您没有偏好,Ubuntu 22.04 (Jammy) 是经过最多测试的,并且可能会是最流畅的。

参考文档:

https://docs.openstack.org/devstack/latest/guides/single-machine.html

https://docs.openstack.org/contributors/zh_CN/code-and-documentation/devstack.html

网络配置

确定用于将 OpenStack 云与现有网络集成的接口上的网络配置。例如,如果 DHCP 在您的网络上给出的 IP 是 192.168.72.X - 其中 X 介于 100 和 200 之间,您将能够使用 IP 201-254 作为浮动 ip。
在这里插入图片描述
devstack网络设置支持两种方式:

  • Dedicated Guest Interface:主机需要双网卡
  • Shared Guest Interface:主机仅需单网卡

官方说明文档:https://docs.openstack.org/devstack/latest/networking.html

注意:本次部署为单网卡模式,不要重启devstack主机,否则主机SSH网络连接将异常,建议部署后创建好快照。

节点规划

基于 ubuntu 22.04 操作系统,使用 Devstack 部署工具搭建 all-in-one 的 OpenStack 开发环境。

主机名节点IPCPU内存磁盘OS网卡
devstack192.168.72.338C16G100GUbuntu 22.04 LTSens33

前置准备

系统更新

root@devstack:~# apt-get update && apt-get upgrade -y 

配置主机名

hostnamectl set-hostname devstack

配置时间同步

apt install -y chrony
timedatectl set-timezone Asia/Shanghai

配置国内阿里APT源

cp /etc/apt/sources.list{,.bak}
sed -i 's#http://cn.archive.ubuntu.com/#http://mirrors.aliyun.com/#g' /etc/apt/sources.list

配置国内阿里PIP源,需要切换到stack用户

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF 
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
EOF

由于众所周知的原因,devstack 从 github 直接下载二进制文件时依然可能因为网络原因失败。最稳妥的办法是通过下面的科技手段。

配置http代理(可选,需要科技)

cat >/etc/profile.d/proxy.sh<<EOF
export http_proxy="http://192.168.72.1:7890"
export https_proxy="http://192.168.72.1:7890"
EOF
source /etc/profile

配置apt代理(可选,需要科技)

cat >/etc/apt/apt.conf.d/proxy.conf<<EOF
Acquire::http::proxy "http://192.168.72.1:7890";
Acquire::https::proxy "http://192.168.72.1:7890";
EOF

添加 Stack 用户

DevStack 应以启用 sudo 的非 root 用户身份运行(标准登录云映像,例如“ubuntu”或“cloud-user”通常就可以)。

如果您不使用云映像,则可以创建一个单独的stack用户来运行 DevStack

root@devstack:~# sudo useradd -s /bin/bash -d /opt/stack -m stack

确保 stack 用户的主目录对所有人都具有可执行权限,因为基于 RHEL 的发行版使用 700 创建它,而 Ubuntu 21.04+ 使用 750 创建它,这可能会在运行期间导致问题部署。

sudo chmod +x /opt/stack

由于该用户将对您的系统进行许多更改,因此它应该具有 sudo 权限:

echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
sudo -u stack -i

下载 DevStack

stack@devstack:~$ git clone https://opendev.org/openstack/devstack
stack@devstack:~$ cd devstack

devstack 存储库包含一个用于安装 OpenStack 和配置文件模板的脚本。

创建 local.conf

在 devstack git 存储库的根目录下创建一个带有四个预设密码的 local.conf 文件。

cat >local.conf<<'EOF'
[[local|localrc]]
HOST_IP=192.168.72.33
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
DEST=/opt/stack

## Neutron options
FLOATING_RANGE=192.168.72.0/24
Q_FLOATING_ALLOCATION_POOL=start=192.168.72.220,end=192.168.72.230
PUBLIC_INTERFACE=ens33
PUBLIC_NETWORK_GATEWAY=192.168.72.8
EOF

参数说明:

  • HOST_IP: 本机IP地址
  • ADMIN_PASSWORD:OpenStack 用户 admindemo 的密码
  • DATABASE_PASSWORD:MySQL 管理员用户密码
  • RABBIT_PASSWORD:RabbitMQ 密码
  • SERVICE_PASSWORD:服务组件和 KeyStone 交互的密码
  • FLOATING_RANGE:用于 GUEST VM 访问外部网络,并且可以通过向其分配 FLOATING IP 来从外部网络访问GUEST VM。
  • Q_FLOATING_ALLOCATION_POOL:为devstack分配指定的外部IP地址范围
  • PUBLIC_INTERFACE: 节点网卡名称
  • PUBLIC_NETWORK_GATEWAY:外部网络网关地址

在某些发行版中,您可能还需要设置 HOST_IP 。 是否需要这样做将取决于操作系统中网络接口使用的命名约定。

这是开始使用 DevStack 所需的最低配置。devstack 存储库中的sample目录下有一个示例 local.conf 文件。

开始安装

stack@devstack:~/devstack$ ./stack.sh

这将需要 15 - 30 分钟,很大程度上取决于您的互联网连接速度。在此过程中将安装许多 git 树和软件包。

运行完成后日志如下,记录访问 Horizon 的URL地址及用户密码。

......
=========================
DevStack Component Timing
 (times are in seconds)  
=========================
wait_for_service      14
async_wait            65
osc                  190
apt-get              745
test_with_retry        4
dbsync                 3
pip_install          182
apt-get-update        18
run_process           55
git_timed            141
-------------------------
Unaccounted time     331
=========================
Total runtime        1748

=================
 Async summary
=================
 Time spent in the background minus waits: 279 sec
 Elapsed time: 1749 sec
 Time if we did everything serially: 2028 sec
 Speedup:  1.15952

Post-stack database query stats:
+------------+-----------+-------+
| db         | op        | count |
+------------+-----------+-------+
| keystone   | SELECT    | 35246 |
| keystone   | INSERT    |    93 |
| neutron    | SELECT    |  4668 |
| neutron    | CREATE    |     1 |
| neutron    | SHOW      |     4 |
| neutron    | INSERT    |  4112 |
| neutron    | DELETE    |    27 |
| neutron    | UPDATE    |   120 |
| placement  | SELECT    |    46 |
| placement  | INSERT    |    57 |
| placement  | SET       |     1 |
| nova_api   | SELECT    |   114 |
| nova_cell0 | SELECT    |    73 |
| nova_cell1 | SELECT    |   145 |
| nova_cell0 | INSERT    |     5 |
| nova_cell0 | UPDATE    |     5 |
| placement  | UPDATE    |     3 |
| nova_cell1 | INSERT    |     4 |
| nova_cell1 | UPDATE    |    19 |
| cinder     | SELECT    |   115 |
| cinder     | INSERT    |     5 |
| cinder     | UPDATE    |     1 |
| glance     | SELECT    |    49 |
| glance     | INSERT    |     6 |
| glance     | UPDATE    |     2 |
| nova_api   | INSERT    |    20 |
| nova_api   | SAVEPOINT |    10 |
| nova_api   | RELEASE   |    10 |
| cinder     | DELETE    |     1 |
+------------+-----------+-------+

This is your host IP address: 192.168.72.33
This is your host IPv6 address: ::1
Horizon is now available at http://192.168.72.33/dashboard
Keystone is serving at http://192.168.72.33/identity/
The default users are: admin and demo
The password: secret

Services are running under systemd unit files.
For more information see: 
https://docs.openstack.org/devstack/latest/systemd.html

DevStack Version: 2024.1
Change: 57c685496f0ef8da0d6ebc50845f752caf29948a Merge "Drop nodesets with ubuntu-xenial" 2024-02-26 21:04:24 +0000
OS Version: Ubuntu 22.04 jammy

2024-03-02 09:05:06.156 | stack.sh completed in 1749 seconds.

devstack 提供了一个环境文件,可以使用它通过 CLI 与openstack进行交互:

# source openrc file to load your environment with OpenStack CLI creds
stack@devstack:~/devstack$ . openrc
# list instances
openstack server list
openstack network list
openstack image list

安装完成

您现在已经有了一个可以运行的 DevStack!恭喜!

  • 您的 devstack 将安装 keystoneglancenovaplacementcinderneutron 。浮动IP将可用,guests 可以访问外部世界。
  • 您可以访问 Horizo​​n 来体验 OpenStack 的 Web 界面,并从那里管理虚拟机、网络、卷和映像。
  • 您可以在 shell 中 source openrc ,然后使用 openstack 命令行工具来管理您的 devstack。
  • 您可以 cd /opt/stack/tempest 并运行已配置为与您的DevStack一起使用的Tempest测试。
  • 您可以对 OpenStack 进行代码更改并验证它们。

通过浏览器访问IP地址查看是否能访问并登录成功

http://192.166.66.18/dashboard

在这里插入图片描述
切换到demo项目,查看网络拓扑图
在这里插入图片描述

查看部署的systemd服务

stack@devstack:~$ systemctl | grep devstack
  devstack@c-api.service                                                                    loaded active running   Devstack devstack@c-api.service
  devstack@c-sch.service                                                                    loaded active running   Devstack devstack@c-sch.service
  devstack@c-vol.service                                                                    loaded active running   Devstack devstack@c-vol.service
  devstack@dstat.service                                                                    loaded active running   Devstack devstack@dstat.service
  devstack@etcd.service                                                                     loaded active running   Devstack devstack@etcd.service
  devstack@g-api.service                                                                    loaded active running   Devstack devstack@g-api.service
  devstack@keystone.service                                                                 loaded active running   Devstack devstack@keystone.service
  devstack@n-api-meta.service                                                               loaded active running   Devstack devstack@n-api-meta.service
  devstack@n-api.service                                                                    loaded active running   Devstack devstack@n-api.service
  devstack@n-cond-cell1.service                                                             loaded active running   Devstack devstack@n-cond-cell1.service
  devstack@n-cpu.service                                                                    loaded active running   Devstack devstack@n-cpu.service
  devstack@n-novnc-cell1.service                                                            loaded active running   Devstack devstack@n-novnc-cell1.service
  devstack@n-sch.service                                                                    loaded active running   Devstack devstack@n-sch.service
  devstack@n-super-cond.service                                                             loaded active running   Devstack devstack@n-super-cond.service
  devstack@placement-api.service                                                            loaded active running   Devstack devstack@placement-api.service
  devstack@q-ovn-metadata-agent.service                                                     loaded active running   Devstack devstack@q-ovn-metadata-agent.service
  devstack@q-svc.service                                                                    loaded active running   Devstack devstack@q-svc.service
  system-devstack.slice                                                                     loaded active active    Slice /system/devstack

查看磁盘信息,devstack新建了一个loop设备。

root@devstack:~# lsblk
NAME                                                                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
......
loop6                                                                     7:6    0    30G  0 loop 
├─stack--volumes--lvmdriver--1-stack--volumes--lvmdriver--1--pool_tmeta 253:1    0    32M  0 lvm  
│ └─stack--volumes--lvmdriver--1-stack--volumes--lvmdriver--1--pool     253:3    0  28.5G  0 lvm  
└─stack--volumes--lvmdriver--1-stack--volumes--lvmdriver--1--pool_tdata 253:2    0  28.5G  0 lvm  
  └─stack--volumes--lvmdriver--1-stack--volumes--lvmdriver--1--pool     253:3    0  28.5G  0 lvm  
sda                                                                       8:0    0   100G  0 disk 
├─sda1                                                                    8:1    0     1G  0 part /boot/efi
├─sda2                                                                    8:2    0     2G  0 part /boot
└─sda3                                                                    8:3    0  96.9G  0 part 
  └─ubuntu--vg-lv--0                                                    253:0    0  96.9G  0 lvm  /

查看逻辑卷,新建了 loop6 物理卷、stack-volumes-lvmdriver-1卷组以及stack-volumes-lvmdriver-1-pool逻辑卷。

root@devstack:~# pvs
  PV         VG                        Fmt  Attr PSize   PFree
  /dev/loop6 stack-volumes-lvmdriver-1 lvm2 a--  <30.00g 1.43g
  /dev/sda3  ubuntu-vg                 lvm2 a--  <96.95g    0 
root@devstack:~# vgs
  VG                        #PV #LV #SN Attr   VSize   VFree
  stack-volumes-lvmdriver-1   1   1   0 wz--n- <30.00g 1.43g
  ubuntu-vg                   1   1   0 wz--n- <96.95g    0 
root@devstack:~# lvs
  LV                             VG                        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  stack-volumes-lvmdriver-1-pool stack-volumes-lvmdriver-1 twi-a-tz--  28.50g             0.00   10.45                           
  lv-0                           ubuntu-vg                 -wi-ao---- <96.95g                                                    

项目服务都已在systemd中注册。 每个服务都以 devstack@ 为前缀。 因此,您可以通过systemd使用以下命令验证Cinder Volume进程是否正在运行:

systemctl status devstack@c-vol.service

由于systemd接受通配符,因此与DevStack关联的所有服务的状态都可以显示为:

systemctl status devstack@*

也可以通过systemd查看正在运行的服务的日志。 要显示Cinder Volume服务的日志,可以使用以下命令:

journalctl -u devstack@c-vol.service

可以在 Using Systemd in DevStack 页面上找到有关使用systemd与DevStack进行交互的更完整参考。

创建 cirros 虚拟机

在private网络上基于cirros镜像创建虚拟机,为了能够让cirros虚拟机解析外网域名,首先为private网络配置DNS服务器。

切换到demo项目,点击网络–>private–>private-subnet,编辑子网:

在这里插入图片描述
点击子网详情,配置DNS服务器地址,这里以阿里云DNS服务器为例:
在这里插入图片描述
创建虚拟机实例
在这里插入图片描述
选择private网络
在这里插入图片描述
为实例绑定浮动IP
在这里插入图片描述
查看实例绑定的浮动IP
在这里插入图片描述
点击实例名称,进入实例控制台,以ping github网站为例,测试访问外网
在这里插入图片描述

配置安全组规则,入口方向放通ICMP协议及SSH协议,允许外网对实例进行ping和远程ssh登录
在这里插入图片描述

通过外网PING cirros实例浮动IP地址

C:\Users\pc>ping 192.168.72.221

正在 Ping 192.168.72.221 具有 32 字节的数据:
来自 192.168.72.221 的回复: 字节=32 时间=4ms TTL=63
来自 192.168.72.221 的回复: 字节=32 时间=2ms TTL=63
来自 192.168.72.221 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.72.221 的回复: 字节=32 时间=1ms TTL=63

192.168.72.221 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 1ms,最长 = 4ms,平均 = 2ms

通过外网SSH 登录到cirros实例,默认密码为gocubsgo

C:\Users\pc>ssh cirros@192.168.72.221
cirros@192.168.72.221's password:
$
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:ae:ff:3b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.20/26 brd 10.0.0.63 scope global dynamic noprefixroute eth0
       valid_lft 42384sec preferred_lft 36984sec
    inet6 fdaa:a0ad:306b:0:f816:3eff:feae:ff3b/64 scope global noprefixroute flags 100
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:feae:ff3b/64 scope link
       valid_lft forever preferred_lft forever

通过网络拓扑图查看创建的实例
在这里插入图片描述

创建 ubuntu 虚拟机

下载ubuntu cloud image

wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

注意,在ubuntu cloud image中,默认登录帐户为ubuntu,没有密码。

上传ubuntu cloud image 到openstack
在这里插入图片描述

创建密钥对,弹出私钥文件sshkey.pem下载到本地,去除后缀重命名为sshkey。然后复制公钥内容保存到本地sshkey.pub文件。

$ cat sshkey.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSrYTk+s8mFWk/QennC7iL9cgwrQzElZRKOFBChykZEecfICQpXpNKDmHzdX7lNkPR69EGT/DTLk8S0IvsXktSH8/B4yVzzl9vfLm2c8GB/naHKSpXjO+gY8jcdTtKnn647GuEaGe7obChCFhiIfvgJQ7AZrJAQCtDLimO66yDfFaKOLSCtL4tIlRHp6U64JGdBc48ihsaHKrVJS4hlQkxGXPcsUvbQsnBTy9sR9CCxctXgr149JBwyQwBeBzLmHMvSYLkKe2uIeLghRZ6mZF2MZopZqA2FodVzxozq9U9KV7yV6k69Zw5UQJZwr157kh/GbwYC1uQu+cdl7N9Uj0h Generated-by-Nova

查看保存到本地的公钥和私钥文件

PS C:\Users\pc\Desktop> ls .\sshkeys\

    目录: C:\Users\will\Desktop\sshkeys

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----


-a----          2024/3/3     22:05           1675 sshkey
-a----          2024/3/3     22:06            398 sshkey.pub

创建ubuntu实例,在源中ubuntu2204镜像,选择绑定Key Pair。并绑定浮动IP地址。
在这里插入图片描述
获取实例浮动IP,通过sshkey远程连接到实例。SecureCRT工具配置示例:
在这里插入图片描述
实例连接后如下

ubuntu@ubuntu2204-demo:~$ sudo -i
root@ubuntu2204-demo:~# 
root@ubuntu2204-demo:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:65:9d:f0 brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    inet 10.0.0.47/26 metric 100 brd 10.0.0.63 scope global dynamic ens3
       valid_lft 40531sec preferred_lft 40531sec
    inet6 fdaa:a0ad:306b:0:f816:3eff:fe65:9df0/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe65:9df0/64 scope link 
       valid_lft forever preferred_lft forever
root@ubuntu2204-demo:~# 
root@ubuntu2204-demo:~# cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 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

创建 rocky linux虚拟机

下载Rocky-9 cloud image

wget https://download.rockylinux.org/pub/rocky/9.3/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2

注意,在rocky linux cloud image中,默认登录帐户为rocky,没有密码。

实例创建流程类似,注意SSH连接时指定账号为rocky

连接rocky实例后信息如下:

[rocky@rocky9-demo ~]$ sudo -i
[root@rocky9-demo ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:91:55:ea brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 10.0.0.45/26 brd 10.0.0.63 scope global dynamic noprefixroute eth0
       valid_lft 42526sec preferred_lft 42526sec
    inet6 fdaa:a0ad:306b:0:f816:3eff:fe91:55ea/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe91:55ea/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@rocky9-demo ~]# 
[root@rocky9-demo ~]# cat /etc/os-release 
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"

查看最终上传的镜像
在这里插入图片描述
查看最终创建的实例
在这里插入图片描述
查看网络拓扑图
在这里插入图片描述

删除 DevStack

要关闭在节点上运行的DevStack实例,应使用以下命令:

./unstack.sh

此命令清除在节点上执行的OpenStack安装。 这包括:

  • 停止项目服务,mysql和rabbitmq
  • 清理iSCSI卷
  • 清除临时LVM挂载

在DevStack运行失败的情况下,首先要尝试运行 unstack.sh 。 如果后续运行失败,则可以使用以下命令更彻底地删除DevStack组件:

./clean.sh

clean.sh 运行执行 unstack.sh 的步骤以及其他清理工作:

  • 从/etc删除项目的配置文件
  • 删除日志文件
  • 清理Hypervisor
  • 删除.pyc文件
  • 清理数据库
  • 等等

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

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

相关文章

ChatGPT最新功能“Text To Speech (TTS,文本转语音)”详细解读!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意&#xff0c;舵机的5V 线不能接到面包板上的正极&#xff0c;面包板上的正极只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我们如何驱动舵机呢&#xff1f;由之前我们介绍原理知道&#xff0c;要输出如下图对应的PWM波形才行…

【FPGA/IC】CRC电路的Verilog实现

前言 在通信过程中由于存在各种各样的干扰因素&#xff0c;可能会导致发送的信息与接收的信息不一致&#xff0c;比如发送数据为 1010_1010&#xff0c;传输过程中由于某些干扰&#xff0c;导致接收方接收的数据却成了0110_1010。为了保证数据传输的正确性&#xff0c;工程师们…

CentOS配网报错:network is unreachable

常用命令&#xff1a; 打开&#xff1a; cd /etc/sysconfig/network-scripts/ 修改&#xff1a; vim ifcfg-ens33 打开修改&#xff1a; vim /etc/sysconfig/network-scripts/ifcfg-ens33 保存&#xff1a; 方法1&#xff1a;ESCZZ&#xff08;Z要大写&#xff09; 方…

递归实现n的k次方(C语言)

编写一个函数实现n的k次方&#xff0c;使用递归实现。 下面来说一下思路 5的3次方&#xff1a;就是5*(5的3-1次方) 7的4次方&#xff1a;就是7*&#xff08;7的4-1次方&#xff09; 以此类推 n的k次方就是&#xff1a;n* n的&#xff08;k-1&#xff09;次方 int Func(int n,…

C++基于多设计模式下的同步异步日志系统day4

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 只要内容主要实现了同步日志消息…

“智农”-农业物联网可视化

大棚可视化|设施农业可视化|农业元宇宙|农业数字孪生|大棚物联网|大棚数字孪生|农业一体化管控平台|智慧农业可视化|智农|农业物联网可视化|农业物联网数字孪生|智慧农业|大棚三维可视化|智慧大棚可视化|智慧大棚|农业智慧园区|数字农业|数字大棚|农业大脑|智慧牧业数字孪生|智…

072:vue+cesium 实现下雪效果

第072个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中实现下雪效果,这里使用着色器来实现实例特效。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共120行)着色代码实现心得:专栏目标示例效果

2022NOC大赛原创未来赛道小学低年级组图形化真题加解析

这篇文档是一份未来小学低年级组图形化真题加解析,主要面向小学生进行考试。考试内容主要包括图形化思维、数学运算和阅读理解等方面。 图形化思维是近年来数学教育中备受关注的领域,通过将抽象的概念转化为具体的形象,帮助学习者更好地理解和掌握数学知识。因此,在这个考试…

STM32-BKP备份寄存器和RTC时钟

BKP介绍 BKP(Bckup Registers&#xff09;备份寄存器 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT&#xff08;备用电池电源&#xff09;维持供电。当系统在待机…

011集——vba获取CAD图中图元类名objectname

在CAD中&#xff0c;通过快捷键PL&#xff08;即POLYLINE命令&#xff09;绘制的线属于AcDbPolyline。AcDbPolyline也被称为LWPOLYLINE&#xff0c;即简单Polyline&#xff0c;它所包含的对象在本身内部。 此外&#xff0c;CAD中还有另一种二维多段线对象&#xff0c;称为AcDb2…

Vue开发实例(十一)用户列表的实现与操作

用户列表的实现与操作 一、创建用户页面和路由二、表格优化1、表头自定义2、表格滚动3、加入数据索引4、利用插槽自定义显示 三、功能1、查询功能3、增加4、删除5、修改 一、创建用户页面和路由 创建用户页面 在 src/components/Main 下创建文件夹user&#xff0c;创建文件Us…

苍穹外卖Day05——总结5

前期文章 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day01——解决总结1中存在的问题https://lushimeng.blog.csdn.net/article/details/135473412苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/articl…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…

【二叉树的最近公共祖先】【后序遍历】Leetcode 236. 二叉树的最近公共祖先

【二叉树的最近公共祖先】【后序遍历】Leetcode 236. 二叉树的最近公共祖先 解法1 涉及到结果向上返回就要用后序遍历解法2 自己写的方法 后序遍历 ---------------&#x1f388;&#x1f388;236. 二叉树的最近公共祖先 题目链接&#x1f388;&#x1f388;-----------------…

【kubernetes】关于k8s集群如何将pod调度到指定node节点?

目录 一、k8s的watch机制 二、scheduler的调度策略 Predicate&#xff08;预选策略&#xff09; 常见算法&#xff1a; priorities&#xff08;优选策略&#xff09;常见的算法有&#xff1a; 三、k8s的标签管理之增删改查 四、k8s的将pod调度到指定node的方法 方案一&am…

20个 K8S集群常见问题总结,建议收藏

问题1&#xff1a;K8S集群服务访问失败&#xff1f; 原因分析&#xff1a;证书不能被识别&#xff0c;其原因为&#xff1a;自定义证书&#xff0c;过期等。 解决方法&#xff1a;更新证书即可。 问题2&#xff1a;K8S集群服务访问失败&#xff1f; curl: (7) Failed connec…

YOLOv9改进 | 基础篇 | 提供YOLOv9全系列支持V9n、V9s、V9m、V9l、V9x的修改方式(全网独家首发)

一、本文介绍 大家好&#xff0c;本文给大家带来的是2024年2月21日全新发布的SOTA模型YOLOv9的补全教程&#xff08;算是一种补全吧我个人认为&#xff09;&#xff0c;了解V7的读者都知道V7系列是不支持模型深度和宽度的修改的也就是没有办法像YOLOv8那样有多个版本&#xff…

IOC中Bean的生命周期

生命周期的各个阶段&#xff1a; 可以分为三个阶段&#xff1a;产生-使用-销毁 又可以分四个阶段&#xff1a;四个阶段 实例化 ->属性注入->初始化 ->销毁 实例化后到使用的初始化过程&#xff1a; 属性赋值 ->处理各种Aware接口->实现BeanPostProcessor的b…

【大厂AI课学习笔记NO.63】模型的维护

说是模型的维护&#xff0c;其实这堂课都是在讲“在工业环境中开发和部署机器学习模型的流程”。 上图来自于我的笔记思维脑图&#xff0c;已经上传&#xff0c;要链接的访问的主页查看资源。 一路走来&#xff0c;我们学习了数据管理、模型学习、模型验证、模型部署等重要的步…