DevStack 基于 Ubuntu 部署 OpenStack

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 secElapsed time: 1749 secTime if we did everything serially: 2028 secSpeedup:  1.15952Post-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: secretServices are running under systemd unit files.
For more information see: 
https://docs.openstack.org/devstack/latest/systemd.htmlDevStack Version: 2024.1
Change: 57c685496f0ef8da0d6ebc50845f752caf29948a Merge "Drop nodesets with ubuntu-xenial" 2024-02-26 21:04:24 +0000
OS Version: Ubuntu 22.04 jammy2024-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 list-units | grep -i devstackdevstack@c-api.service                                                                    loaded active running   Devstack devstack@c-api.servicedevstack@c-sch.service                                                                    loaded active running   Devstack devstack@c-sch.servicedevstack@c-vol.service                                                                    loaded active running   Devstack devstack@c-vol.servicedevstack@dstat.service                                                                    loaded active running   Devstack devstack@dstat.servicedevstack@etcd.service                                                                     loaded active running   Devstack devstack@etcd.servicedevstack@g-api.service                                                                    loaded active running   Devstack devstack@g-api.servicedevstack@keystone.service                                                                 loaded active running   Devstack devstack@keystone.servicedevstack@n-api-meta.service                                                               loaded active running   Devstack devstack@n-api-meta.servicedevstack@n-api.service                                                                    loaded active running   Devstack devstack@n-api.servicedevstack@n-cond-cell1.service                                                             loaded active running   Devstack devstack@n-cond-cell1.servicedevstack@n-cpu.service                                                                    loaded active running   Devstack devstack@n-cpu.servicedevstack@n-novnc-cell1.service                                                            loaded active running   Devstack devstack@n-novnc-cell1.servicedevstack@n-sch.service                                                                    loaded active running   Devstack devstack@n-sch.servicedevstack@n-super-cond.service                                                             loaded active running   Devstack devstack@n-super-cond.servicedevstack@placement-api.service                                                            loaded active running   Devstack devstack@placement-api.servicedevstack@q-ovn-metadata-agent.service                                                     loaded active running   Devstack devstack@q-ovn-metadata-agent.servicedevstack@q-svc.service                                                                    loaded active running   Devstack devstack@q-svc.servicesystem-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:~# pvsPV         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:~# vgsVG                        #PV #LV #SN Attr   VSize   VFreestack-volumes-lvmdriver-1   1   1   0 wz--n- <30.00g 1.43gubuntu-vg                   1   1   0 wz--n- <96.95g    0 
root@devstack:~# lvsLV                             VG                        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertstack-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=63192.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 1000link/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 hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast qlen 1000link/ether fa:16:3e:ae:ff:3b brd ff:ff:ff:ff:ff:ffinet 10.0.0.20/26 brd 10.0.0.63 scope global dynamic noprefixroute eth0valid_lft 42384sec preferred_lft 36984secinet6 fdaa:a0ad:306b:0:f816:3eff:feae:ff3b/64 scope global noprefixroute flags 100valid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:feae:ff3b/64 scope linkvalid_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\sshkeysMode                 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 1000link/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: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1442 qdisc fq_codel state UP group default qlen 1000link/ether fa:16:3e:65:9d:f0 brd ff:ff:ff:ff:ff:ffaltname enp0s3inet 10.0.0.47/26 metric 100 brd 10.0.0.63 scope global dynamic ens3valid_lft 40531sec preferred_lft 40531secinet6 fdaa:a0ad:306b:0:f816:3eff:fe65:9df0/64 scope global mngtmpaddr noprefixroute valid_lft forever preferred_lft foreverinet6 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 1000link/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 1442 qdisc fq_codel state UP group default qlen 1000link/ether fa:16:3e:91:55:ea brd ff:ff:ff:ff:ff:ffaltname enp0s3altname ens3inet 10.0.0.45/26 brd 10.0.0.63 scope global dynamic noprefixroute eth0valid_lft 42526sec preferred_lft 42526secinet6 fdaa:a0ad:306b:0:f816:3eff:fe91:55ea/64 scope global noprefixroute valid_lft forever preferred_lft foreverinet6 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.pswp.cn/news/718619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718619.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AcWing 799. 最長連續不重復子序列

Problem: AcWing 799. 最長連續不重復子序列 文章目錄 思路解題方法復雜度Code 思路 這是一個求最長連續不重復子序列的問題。我們可以使用雙指針&#xff08;滑動窗口&#xff09;的方法來解決。我們維護一個窗口&#xff0c;并使用一個數組來記錄窗口內元素的出現次數。當窗口…

深度學習的一個完整過程通常包括以下幾個步驟

深度學習的一個完整過程通常包括以下幾個步驟&#xff1a; 問題定義和數據收集&#xff1a; 定義清晰的問題&#xff0c;明確任務的類型&#xff08;分類、回歸、聚類等&#xff09;以及預期的輸出。收集和整理用于訓練和評估模型的數據集。確保數據集的質量&#xff0c;進行預…

車聯網產品與應用

在中國&#xff0c;先是小鵬汽車官宣“智駕覆蓋城市數量、可用里程以及用戶口碑均為行業第一”。后有華為問界官宣OTA&#xff0c;領航功能全國可用路段高達99%&#xff0c;“全國都能用&#xff0c;哪哪都能開”。 似乎分分鐘&#xff0c;“自動駕駛”就要干成了。但日新月異的…

Day31|貪心算法1

貪心的本質是選擇每一階段的局部最優&#xff0c;從而達到全局最優。 無固定套路&#xff0c;舉不出反例&#xff0c;就可以試試貪心。 一般解題步驟&#xff1a; 1.將問題分解成若干子問題 2.找出適合的貪心策略 3.求解每一個子問題的最優解 4.將局部最優解堆疊成全局最…

【MySQL】深入解析 Buffer Pool 緩沖池

文章目錄 1、前置知識1.1、Buffer Pool介紹1.2、后臺線程1.2.1、Master Thread1.2.2、IO Thread1.2.3、Purge Thread1.2.4、Page Cleaner Thread 1.3、重做日志緩沖池 2、Buffer Pool 組成2.1、數據頁2.2、索引頁2.3、undo頁2.4、插入緩沖2.5、鎖空間2.6、數據字典2.6、自適應哈…

JavaScript之structuredClone現代深拷貝

在JavaScript中&#xff0c;實現深拷貝的方式有很多種&#xff0c;每種方式都有其優點和缺點。今天介紹一種原生JavaScript提供的structuredClone實現深拷貝。 下面列舉一些常見的方式&#xff0c;以及它們的代碼示例和優缺點&#xff1a; 1. 使用JSON.parse(JSON.stringify(…

代碼隨想錄 二叉樹第四周

目錄 617.合并二叉樹 700.二叉搜索樹中的搜索 98.驗證二叉搜索樹 530.二叉搜索樹的最小絕對差 501.二叉搜索樹中的眾樹 236.二叉樹的最近公共祖先 617.合并二叉樹 617. 合并二叉樹 簡單 給你兩棵二叉樹&#xff1a; root1 和 root2 。 想象一下&#xff0c;當你將其…

【Rust】——切片

&#x1f383;個人專欄&#xff1a; &#x1f42c; 算法設計與分析&#xff1a;算法設計與分析_IT閆的博客-CSDN博客 &#x1f433;Java基礎&#xff1a;Java基礎_IT閆的博客-CSDN博客 &#x1f40b;c語言&#xff1a;c語言_IT閆的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

第105講:Mycat垂直分表實戰:從規劃到解決問題的完整指南

文章目錄 1.垂直分表的背景2.垂直分表案例實戰2.1.垂直分表規劃2.2.配置Mycat實現垂直分表2.3.重啟Mycat2.4.在Mycat命令行中導入數據結構2.5.查看由Mycat分表后每個分片上存儲的表2.6.Mycat垂直分表后可能遇到的問題2.7.垂直分表完成 1.垂直分表的背景 我們的商城系統數據庫&…

Unity編輯器下如何獲取物體(GameObject)的中心位置

注意僅能在編輯器下才能使用該方法 實現方式依靠UnityEditor.Tools提供的參數&#xff0c;具體實現如下&#xff1a; 獲取單個物體的中心坐標 public static Vector3 GetGameObjectCenter(GameObject gameObject) {// 選中物體Selection.activeObject gameObject;// 記錄當前…

C#中Byte.Parse的用法,如果需要解析含有數字以外的字符,應該如何使用?

在C#中&#xff0c;Byte.Parse用于將字符串解析為byte類型的數字。它的用法如下&#xff1a; byte result Byte.Parse(str);其中&#xff0c;str是要解析的字符串。 如果要解析的字符串含有數字以外的字符&#xff0c;Byte.Parse會拋出一個FormatException異常。為了處理這種…

javaWebssh水利綜合信息管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh水利綜合信息管理系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為TOMCA…

MATLAB 實現貝葉斯決策

1. 原理 后驗概率&#xff1a; 1.最小錯誤率決策&#xff08;最大后驗概率決策&#xff09;&#xff1a; 2.最小風險決策&#xff1a; 3.正態分布下的貝葉斯決策 2. 過程 2.1 訓練集數據可視化 導入兩類訓練集數據&#xff0c;并繪制其數據分布&#xff0c;如下&#xff1a;…

云時代【5】—— LXC 與 容器

云時代【5】—— LXC 與 容器 三、LXC&#xff08;一&#xff09;基本介紹&#xff08;二&#xff09;相關 Linux 指令實戰&#xff1a;使用 LXC 操作容器 四、Docker&#xff08;一&#xff09;刪除、安裝、配置&#xff08;二&#xff09;鏡像倉庫1. 分類2. 相關指令&#xf…

JavaSE-09(Java IO精華總結)

Java IO 簡單做個總結&#xff1a; 1 .InputStream/OutputStream 字節流的抽象類。2 .Reader/Writer 字符流的抽象類。3 .FileInputStream/FileOutputStream 節點流&#xff1a;以字節為單位直接操作“文件”。4 .ByteArrayInputStream/ByteArrayOutputStream 節點流&#xff…

Running job: job_1709516801756_0003

** yarn運行卡在Running job: job_1709516801756_0003問題解決&#xff1a; ** 在運行wordcount時出現錯誤&#xff0c;一直卡住 運行命令&#xff1a;hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 出現錯誤&#xff1a…

嶺回歸算法

回歸分析方法是利用數理統計方法分析數據&#xff0c;建立自變量和因變量間的回歸模型&#xff0c;用于預測因變量變化的分析方法。其中比較經典的是HoerI和Kennard提出的嶺回歸算法。嶺回歸算法是在最小二乘法的基礎上引|入正則項&#xff0c;使回歸模型具有較好泛化能力和穩定…

經典思路!人參葉際微生物如何發8分文章?

中國中醫科學院中藥研究所在《Environmental Microbiome》期刊上(IF7.9)發表了關于葉際真菌微生態網絡的文章&#xff0c;該研究通過對ITS測序結果和環境因子測定結果以及皂苷含量測定結果進行生信分析&#xff0c;提出了維持微生態網絡的穩定性策略和影響皂苷含量的因素。 期刊…

H12-821_113

113.如圖所示是路由器現ATE輸出的部分信息&#xff0c;以下關于這部分信息的描述&#xff0c;錯誤的是哪一項&#xff1f; A.display pim rp-info命令用來查看組播組對應的RP信息 B.RP地址是2.2.2.2 C.組地址是225.0.0.0 D.RP的優先級是0 答案&#xff1a;C 注釋&#xff1a; …

HCIA-Datacom題庫(自己整理分類的)_29_PPP協議判斷【6道題】

1.數據鏈路層采用PPP封裝鏈路兩端的IP地址可以不在同一個網段。√ 2.PPP鏈路兩端不在同一網段不能通信。 3.參考以下拓撲及配置&#xff0c;路由器R1與R2通過Serial低速線纜連接&#xff0c;且數據鏈路層封裝使用PPP。當R1和R2的Holdtime不一致時&#xff0c;PPP協商失敗&…