文章目录
ubuntu20采用DevStack部署OpenStack - wallaby
sudo vim /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse
sudo mkdir ~/.pip && sudo vim ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
更新并安装依赖包
sudo apt update && sudo apt upgrade
sudo apt install bridge-utils git python3-pip
sudo pip3 install wheel
stack用户# 添加 stack 用户
sudo useradd -s /bin/bash -d /opt/stack -m stack
# 授予 sudo 权限
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
# 以 stack 用户登录
sudo su - stack
export HTTP_PROXY=http://proxy_ip:port
export HTTPS_PROXY=http://proxy_ip:port
# export HTTP_PROXY=http://10.70.181.238:7890
# export HTTPS_PROXY=http://10.70.181.238:7890
-b指定版本git clone https://opendev.org/openstack/devstack.git -b stable/wallaby
cd devstack && vim local.conf
[[local|localrc]]
HOST_IP=172.19.204.10
GIT_BASE=http://git.trystack.cn
ADMIN_PASSWORD=123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
OS_AUTH_URL=http://172.19.204.10:5000/v3
DEST=/opt/stack
SCREEN_LOGDIR=$DEST/logs/screen
ADMIN_PASSWORD:OpenStack 用户 admin 和 demo 的密码DATABASE_PASSWORD:MySQL 管理员用户密码RABBIT_PASSWORD:RabbitMQ 密码SERVICE_PASSWORD:服务组件和 KeyStone 交互的密码GIT_BASE:源代码托管服务器HOST_IP:绑定的 IP 地址# 安装
./stack.sh
# 停止 DevStack
./unstack.sh
# 停止 DevStack 并删除配置文件等
./clean.sh
=========================
DevStack Component Timing
(times are in seconds)
=========================
wait_for_service 15
pip_install 118
apt-get 58
run_process 44
dbsync 23
apt-get-update 6
test_with_retry 2
async_wait 0
osc 170
-------------------------
Unaccounted time 646
=========================
Total runtime 1082
This is your host IP address: 172.19.204.10
This is your host IPv6 address: fc00:5a24:1958:1:5ea7:21ff:fe3c:17c4
Horizon is now available at http://172.19.204.10/dashboard
Keystone is serving at http://172.19.204.10/identity/
The default users are: admin and demo
The password: 123
Services are running under systemd unit files.
For more information see:
https://docs.openstack.org/devstack/latest/systemd.html
DevStack Version: wallaby
Change: ea636e0a92670353ac48274e704d30662f722691 Write safe.directory items to system git config 2022-04-18 21:31:09 -0500
OS Version: Ubuntu 20.04 focal
2022-04-21 15:05:10.495 | stack.sh completed in 1083 seconds.
ubuntu20.04 LTS安装OpenStack Wallaby版本。一个controller节点,两个compute节点。
【环境准备】部分的所有操作均需要在各节点执行。
sudo vim /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse
更新软件包:sudo apt update && sudo apt upgrade
sudo mkdir ~/.pip && sudo vim ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
有的依赖包不安装后面可能会出错,因此先手动安装
sudo apt install bridge-utils git python3-pip
sudo pip3 install wheel
添加用户stack,并设置为无密码可执行sudo命令。
# 添加 stack 用户
sudo useradd -s /bin/bash -d /opt/stack -m stack
# 授予 sudo 权限
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
# 以 stack 用户登录
sudo su - stack
# 修改stack用户密码,用于配置后续ssh的免密登录
sudo passwd stack
通过export设置的代理仅在当前终端下有效,重新打开终端后也需重新设置。
export HTTP_PROXY=http://proxy_ip:port
export HTTPS_PROXY=http://proxy_ip:port
# export HTTP_PROXY=http://10.70.181.238:7890
# export HTTPS_PROXY=http://10.70.181.238:7890
修改hosts文件,并添加各节点的ip地址:vim /etc/hosts
172.19.204.30 h3c-node01 computer2
172.19.204.20 h3c-node02 computer1
172.19.204.10 h3c-node03 controller
# 生成key
ssh-keygen
# 复制key到其他节点
ssh-copy-id stack@controller
ssh-copy-id stack@computer1
ssh-copy-id stack@computer2
# 测试连通性
ssh stack@controller
ssh stack@computer1
ssh stack@computer2
通过-b指定版本。
git clone https://opendev.org/openstack/devstack.git -b stable/wallaby
先安装好controller,再安装computer节点。默认安装路径在/opt/stack
local.conf文件在下载的git仓库devstack目录下创建配置文件local.conf。
[[local|localrc]]
HOST_IP=172.19.204.10
GIT_BASE=http://git.trystack.cn
OS_AUTH_URL=http://172.19.204.10:5000/v3
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
DEST=/opt/stack
ADMIN_PASSWORD=123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
# Internal IP (Project IP)
# FIXED_RANGE=192.168.100.0/24
# External IP (Floating IP)
# FLOATING_RANGE=10.0.0.0/24
在下载的git仓库devstack目录下创建配置文件local.conf。
[[local|localrc]]
HOST_IP=172.19.204.20 # change this per compute node
GIT_BASE=http://git.trystack.cn
OS_AUTH_URL=http://172.19.204.10:5000/v3
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
DEST=/opt/stack
ADMIN_PASSWORD=123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
DATABASE_TYPE=mysql
SERVICE_HOST=172.19.204.10
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,c-vol,placement-client,ovn-controller,ovs-vswitchd,ovsdb-server,q-ovn-metadata-agent
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
[[local|localrc]]
HOST_IP=172.19.204.30 # change this per compute node
GIT_BASE=http://git.trystack.cn
OS_AUTH_URL=http://172.19.204.10:5000/v3
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
DEST=/opt/stack
ADMIN_PASSWORD=123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
DATABASE_TYPE=mysql
SERVICE_HOST=172.19.204.10
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,c-vol,q-agt,placement-client,ovn-controller,ovs-vswitchd,ovsdb-server,q-ovn-metadata-agent
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
各节点均需要执行
避免出现 [错误: Build of instance 6ec6e8b1-9300-4be4-95fe-20434ea041f5 aborted: Volume e3dcad3d-dd22-4947-99d8-b8d0ad4b1025 did not finish being created even after we waited 187 seconds or 61 attempts. And its status is error.]问题。
修改nova.conf,添加以下参数设置。
[root@cinder ~] # vim /etc/nova/nova.conf
block_device_allocate_retries=600
block_device_allocate_retries_interval=5
block_device_creation_timeout=600
# 重启服务
[root@cinder ~] # sudo systemctl restart devstack@*
修改OpenStack创建虚拟机时分配磁盘的位置。
查看/etc/cinder/cinder.conf,搜索volume_group对应的值,默认为stack-volumes-lvmdriver-1
输入命令vgs查看当前vg,删除不需要的vg, vgremove ****
stack@controller:/$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes-default 1 0 0 wz--n- <30.00g <30.00g
stack-volumes-lvmdriver-1 1 1 0 wz--n- <30.00g 1.43g
vgubuntu 1 2 0 wz--n- 1.09t 0
stack@controller:/$ sudo vgremove stack-volumes-lvmdriver-1
在对应的磁盘上创建vg
sudo pvcreate /dev/sdc
sudo vgcreate stack-volumes-lvmdriver-1 /dev/sdc
重启服务,sudo systemctl restart devstack@*
openstack image create "ubuntu20-server" --file ubuntu20-server.qcow2 --disk-format qcow2 --container-format bare --public
openstack availability zone listopenstack host listopenstack hypervisor listopenstack network listopenstack server create --flavor ds1G --image ubuntu20-server --nic net-id=6d7e18b4-d289-4d2f-a75a-2ab8f6c9a6cd --availability-zone nova:compute1:compute1 ubuntu1-1
查看各计算节点的虚拟机
创建实例后,可以分配浮动IP,从而可以从外部直接操作虚拟机。
默认使用netplan管理网络配置,修改/etc/netplan/****.yaml,修改网卡名称,设置DHCP并添加DNS,否则无法通过域名访问外部网络。
# 修改网络配置
vim /etc/netplan/****.yaml
# 配置文件示例
# This is the network config written by 'subiquity'
network:
ethernets:
ens3:
dhcp4: true
nameservers:
addresses: [114.114.114.114,8.8.8.8]
version: 2
# 使网络配置生效
sudo netplan apply
/etc/network/interfaces.d/***.cfg中添加DNS服务器,添加dns-nameserver 114.114.114.114sudo /etc/init.d/networking restart,sudo /etc/init.d/resolvconf restart
默认安全组规则不允许从外部进行SSH操作与ping操作,因此需要开启22端口与ICMP规则,可以直接将ICMP、TCP、UDP的所有端口的出入口规则打开。

devstack相关组件均通过systemctl进行控制,其日志信息通过journalctl查看。
c-*是cinder,g-*是glance,n-*是nova,o-*是octavia,q-*是neutron。
/etc/systemd/system/ | grep devstack | awk ‘{print $9}’
输出:
devstack@c-api.service
devstack@c-sch.service
devstack@c-vol.service
devstack@dstat.service
devstack@etcd.service
devstack@g-api.service
devstack@keystone.service
devstack@n-api-meta.service
devstack@n-api.service
devstack@n-cond-cell1.service
devstack@n-cpu.service
devstack@n-novnc-cell1.service
devstack@n-sch.service
devstack@n-super-cond.service
devstack@placement-api.service
devstack@q-agt.service
devstack@q-dhcp.service
devstack@q-l3.service
devstack@q-meta.service
devstack@q-svc.service
在控制节点执行nova-manage cell_v2 discover_hosts --verbose
stack@controller:~$ nova-manage cell_v2 discover_hosts --verbose
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 9b2d95a4-22da-4af4-8313-66f4d2f74680
Checking host mapping for compute host 'h3c-node01': b1cc044a-841b-41fa-bbe0-ad07045ff46d
Creating host mapping for compute host 'h3c-node01': b1cc044a-841b-41fa-bbe0-ad07045ff46d
Checking host mapping for compute host 'h3c-node02': c4894695-8adf-4243-bc7f-9c950c6f9491
Creating host mapping for compute host 'h3c-node02': c4894695-8adf-4243-bc7f-9c950c6f9491
Found 2 unmapped computes in cell: 9b2d95a4-22da-4af4-8313-66f4d2f74680
[错误: Build of instance 6ec6e8b1-9300-4be4-95fe-20434ea041f5 aborted: Volume e3dcad3d-dd22-4947-99d8-b8d0ad4b1025 did not finish being created even after we waited 187 seconds or 61 attempts. And its status is error.]
修改nove.conf中的重复尝试次数。参考[2.3.1 nove.conf](#2.3.1 nova.conf)。
/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
from cryptography.utils import int_from_bytes
/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
from cryptography.utils import int_from_bytes
将cryptography版本降至3.4以下,pip install cryptography==3.3.2
Error response
Error code: 404
Message: File not found.
Error code explanation: HTTPStatus.NOT_FOUND - Nothing matches the given URI.
方法1:将local.conf的NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"改为NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_lite.html",但是需要重装该节点的openstack
方法2:将controller节点的vnc_lite.html复制为vnc_auto.html,推荐
root@controller:/opt/stack/noVNC# cp vnc_lite.html vnc_auto.html
方法3:修改nova的配置文件,该方法未验证
PortBindingFailed: Binding failed for port 57ae0adc-89f9-41c6-afa7-cef5c19c6276, please check neutron logs for more information
在DashBoard的【管理员】-【系统】-【系统信息】-【网络代理】中发现对应的compute节点没有Open vSwitch agent,需要在local.conf中修改ENABLED_SERVICES参数,添加q-agt以启用该服务。需重新部署该节点的openstack。

我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po