终于开始 OpenStack 的介绍了。
本节将介绍 OpenStack 架构和安装。模块的详细功能将在后面的小节中介绍。
一、概念架构(Conceptual Architecture)
1. 核心模块说明
Nova: 管理计算资源,管理虚拟机的生命周期
Neutron:管理网络资源,负责创建和管理 L2,L3 网络,为虚拟机提供虚拟网络和物理网络
Glance:管理虚拟机的启动镜像,Nova 创建虚拟机时将使用 Glance 提供的镜像
Cinder:为虚拟机提供块存储服务,Cinder 提供虚拟机的虚拟硬盘,一般作为数据盘
Keystone:为各种服务提供认证和权限管理服务。OpenStack 的每个操作必须通过 Keystone 的审核
2. 可选服务
Swift:对象存储服务
Ceilometer:提供 OpenStack 监控和计量服务,为报警、统计或计费提供数据
Horzon:Web 操作页面
Ironic:是一个进行裸机部署安装的模块,可以很方便的对指定的一台或多台裸机,执行硬盘 RAID、分区和格式化;安装操作系统、驱动程序;安装应用程序的操作
Trove:为用户提供的数据库即服务 (DBaaS)
Heat:Heat 是 OpenStack 提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序。
Sahara:为用户提供简单部署 Hadoop 集群的能力,比如通过简单的配置:Hadoop 版本、集群结构、节点硬件信息等。在用户提供了这些参数后,Sahara 迅速把 Hadoop 集群部署起来。同时也支持集群的扩容和减容。
二、 逻辑架构(Logical Architecture)
在逻辑架构中可以看到每个服务由若干个组件组成。每个组件的详细信息后面的章节会逐个介绍。
三、安装OpenStack
我使用的是 OpenStack 的 DevStack 进行开发环境的部署。
DevStack 有丰富的选项让我们能够灵活的选择和部署想要的 OpenStack 服务。
1. 部署拓扑
-
控制节点(Controller Node)
管理 OpenStack,运行的服务有 Keystone、Glance、Horizon、Nove 和 Neutron 中管理相关的组件。
运行支持 OpenStack 的服务,如:数据库(MySQL)、消息队列(RabbitMQ)和网络时间服务 NTP。
-
网络节点(Network Node)
运行的服务为 Neutron 为 OpenStack 提供 L2 和 L3 网络。包含虚拟机网络、DHCP、路由、NAT 等。
逻辑上,OpenStack 至少包括下面几类网络:
Management 网络
用于节点之间的 message queue 内部通信以及访问 database 服务,所有的节点都需要连接到 management 网络。API 网络
OpenStack 各组见通过该网络向用户暴露 API 服务。Keystone、Nova、Neutron、Glance、Cinder、Horizon 的 Endpoint 均配置在 API 网络上。VM 网络
VM 网络也叫 Tenant 网络,用于 Instance 之间通讯。VM 网络可以选择的类型包括 local、flat、vlan、vxlan 和 gre。VM 网络由 Neutron 配置和管理。External 网络
External 网络指的是 VM 网络之外的网络,该网络不由 Neutron 管理。Neutron 可以将 router 连接到 External 网络,为 Instance 提供可以访问外部网络的能力。
这几类网络只是逻辑上的划分,物理实现上可以有非常大的自由度。我可以为每个网络分配单独的网卡,也可以多种网络使用一个网卡。
-
存储节点 (Storage Node)
提供块存储(Cinder)或对象存储(Swift)服务。
-
计算节点(Compute Node)
运行 Hypervisor (默认使用KVM)服务。同时运行 Neuron 服务的 agent,为虚拟机提供网络支持。
以上节点是从功能上进行的逻辑划分,在实际中可以根据需求配置。
2. 开发环境
-
两台虚拟机
devstack-controller:控制节点 + 网络节点 + 块存储节点 + 计算节点
devstack-compute:计算节点
拓扑图如下:
-
虚拟机配置
devstack-controller:
CPU 1~2
Memory 8 GB
Disk 100 GB
NIC 3
System Ubuntu-16.04devstack-compute:
CPU 2~4+
Memory 8+ GB
Disk 100+ GB
NIC 2
System Ubuntu-16.04-
网络规划
devstack-controller:
eth0:内部管理,如服务之间的通信问题。可以和外部网络共用一个。
eth1:部署的虚拟机所使用的网络。内部私有网络(Tenant Network)。
eth2:外部网络(External Network)。
devstack-compute:
eth0:内部管理用的管理网络。
eth1:部署虚拟机使用的网络。-
虚拟机网卡配置信息如下
devstack-controller:
/etc/network/interfaces
配置文件
root@controller:~# vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens35
iface ens35 inet static
address 172.16.245.138
netmask 255.255.255.0
gateway 172.16.245.2
dns-nameservers 172.16.245.2
auto ens33
iface ens33 inet manual
auto ens34
iface ens34 inet manual
网卡信息
root@controller:~# ifconfig
ens33 Link encap:Ethernet HWaddr 00:0c:29:45:54:1b
inet6 addr: fe80::20c:29ff:fe45:541b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45867 errors:0 dropped:0 overruns:0 frame:0
TX packets:119 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2758193 (2.7 MB) TX bytes:10194 (10.1 KB)
Interrupt:19 Base address:0x2000
ens34 Link encap:Ethernet HWaddr 00:0c:29:45:54:25
inet6 addr: fe80::20c:29ff:fe45:5425/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:1048 (1.0 KB)
Interrupt:16 Base address:0x2080
ens35 Link encap:Ethernet HWaddr 00:0c:29:45:54:2f
inet addr:172.16.245.138 Bcast:172.16.245.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe45:542f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:719810 errors:122 dropped:4 overruns:0 frame:0
TX packets:414852 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1022413200 (1.0 GB) TX bytes:30446706 (30.4 MB)
Interrupt:17 Base address:0x2400
- devstack-compute:
/etc/network/interfaces
配置文件
root@compute:~# vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens33
iface ens33 inet static
address 172.16.245.140
netmask 255.255.255.0
gateway 172.16.245.2
dns-nameservers 172.16.245.2
auto ens34
iface ens34 inet manual
网卡信息
root@compute:~# ifconfig
ens33 Link encap:Ethernet HWaddr 00:0c:29:cd:cf:60
inet addr:172.16.245.140 Bcast:172.16.245.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecd:cf60/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:201970 errors:81 dropped:81 overruns:0 frame:0
TX packets:105843 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:291109470 (291.1 MB) TX bytes:6866198 (6.8 MB)
Interrupt:19 Base address:0x2000
ens34 Link encap:Ethernet HWaddr 00:0c:29:cd:cf:6a
inet6 addr: fe80::20c:29ff:fecd:cf6a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Interrupt:16 Base address:0x2080
3. 开始安装
-
更新
apt-get
# apt-get update
# apt-get upgrade
:apt-get
的源建议不要修改,虽然会很慢。有些源内容不完整,会有很多错误哦。
以下源我使用安装的目前没有报错。/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
-
安装并且更新
pip
# apt-get install python-pip
# pip install --upgrade pip
# pip install -U os-testr
:如果pip版本很旧的话在安装 DevStack 时会报错
-
设定时区
设定时区: Asia -> Shanghai -> OK
# dpkg-reconfigure tzdata
-
同步时间
安装时间同步工具 ntpdate
# apt-get install ntpdate
与网络服务器同步时间
# ntpdate cn.pool.ntp.org
查看是否成功
# date
-
安装
git
# apt-get install git
-
创建stack用户并设置权限
# sudo useradd -s /bin/bash -d /opt/stack -m stack
# echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
:因为stack账户会修改系统的权限,所以要给一个高级权限。
-
进入
stack
账户
# su - stack
-
下载
devstack
为了方便将 devstack
放在 /opt/stack/
目录下
# cd /opt/stack
# git clone https://github.com/openstack-dev/devstack -b stable/ocata
devstack 有很多分支,可以去这里 https://git.openstack.org/cgit/openstack-dev/devstack 查看
-
配置 Devstack 编辑
local.conf
文件 devstack-controller
目录:/opt/stack/devstack/local.conf
内容如下:
HOST_IP
为控制节点内部管理IP;
# Credentials
相关服务的密码
# Branches
是安装的版本(也就是分支名);
[[local|localrc]]
MULTI_HOST=true
GIT_BASE=http://git.trystack.cn
# management & api network
HOST_IP=172.16.245.138
LOGFILE=/opt/stack/logs/stack.sh.log
# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=admin
RABBIT_PASSWORD=admin
SERVICE_PASSWORD=admin
SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
# enable neutron-ml2-vlan
disable_service n-net
enable_service q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron,q-lbaas,q-fwaas,q-vpn
enable_plugin neutron-fwaas http://git.trystack.cn/openstack/neutron-fwaas.git
enable_plugin neutron-fwaas-dashboard http://git.trystack.cn/openstack/neutron-fwaas-dashboard.git
enable_plugin neutron-lbaas http://git.trystack.cn/openstack/neutron-lbaas.git
enable_plugin neutron-lbaas-dashboard http://git.trystack.cn/openstack/neutron-lbaas-dashboard.git
Q_AGENT=linuxbridge
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
LOG_COLOR=True
LOGDIR=$DEST/logs
SCREEN_LOGDIR=$LOGDIR/screen
# Branches
# KEYSTONE_BRANCH=stable/ocata
# NOVA_BRANCH=stable/ocata
# NEUTRON_BRANCH=stable/ocata
# SWIFT_BRANCH=stable/ocata
# GLANCE_BRANCH=stable/ocata
# CINDER_BRANCH=stable/ocat
enable_service 服务介绍
服务 | 介绍 |
---|---|
q-agt | Core Agent,包括 Linux Bridge Agent 和 Open vSwitch Agent |
q-dhcp | dhcp agent |
q-l3 | L3 Agent 提供 routing 服务 |
q-meta | Neutron Metadata Agent |
q-lbaas | Load Balance Agent |
q-fwaas | Firewall 服务 |
q-vpn | VPN Agent 提供 VPN as a Service |
- devstack-compute
目录:/opt/stack/devstack/local.conf
内容如下:
HOST_IP
为计算节点内部管理IP;
# Credentials
相关服务的密码
SERVICE_HOST
为控制节点IP;
# Branches
是安装的版本(也就是分支名);
# vnc config
为vnc 配置信息;
[[local|localrc]]
MULTI_HOST=true
GIT_BASE=http://git.trystack.cn
# management & api network
HOST_IP=172.16.245.140
# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=admin
RABBIT_PASSWORD=admin
SERVICE_PASSWORD=admin
SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
# Service information
SERVICE_HOST=172.16.245.138
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
Q_HOST=$SERVICE_HOST
KEYSTONE_AUTH_HOST=$SERVICE_HOST
KEYSTONE_SERVICE_HOST=$SERVICE_HOST
CEILOMETER_BACKEND=mongodb
DATABASE_TYPE=mysql
ENABLED_SERVICES=n-cpu,q-agt,neutron
Q_AGENT=linuxbridge
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
# vnc config
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
LOG_COLOR=True
LOGDIR=$DEST/logs
SCREEN_LOGDIR=$LOGDIR/screen
# Branches
# KEYSTONE_BRANCH=stable/ocata
# NOVA_BRANCH=stable/ocata
# NEUTRON_BRANCH=stable/ocata
# SWIFT_BRANCH=stable/ocata
# GLANCE_BRANCH=stable/ocata
# CINDER_BRANCH=stable/ocata
# use TryStack git mirror
GIT_BASE=http://git.trystack.cn
-
可以使用国内源安装 OpenStack
在 [[local|localrc]]
添加下面代码即可,国内源
GIT_BASE=http://git.trystack.cn
: 国内源存在同步滞后,可能包不兼容或者下载某些包失败问题,出现这种情况时只需要重新替换原来的镜像源,然后重新运行 ./stack.sh
即可。
-
部署其它 OpenStack 服务
使用 enable_plugin plugin_name [code repo] [branch]
即可如下
enable_plugin neutron-fwaas http://git.trystack.cn/openstack/neutron-fwaas.git
enable_plugin neutron-fwaas-dashboard http://git.trystack.cn/openstack/neutron-fwaas-dashboard.git
enable_plugin neutron-lbaas http://git.trystack.cn/openstack/neutron-lbaas.git
enable_plugin neutron-lbaas-dashboard http://git.trystack.cn/openstack/neutron-lbaas-dashboard.git
配置安装防火墙和负载均衡服务。
-
开始安装
# /opt/stack/devstack/stack.sh
时间超长等待即可。如果提示time out
重新执行就可以;
安装成功后,如果重启系统,需要手动启动OpenStack
# su stack
# screen -c stack-screenrc
关于 screen 后面有介绍。
-
控制节点安装成功返回如下信息:
-
计算节点安装成功返回如下信息:
-
访问
-
登录
用户名:admin,我这里设置的密码也是admin
http://172.16.245.138/dashboard
-
确认服务正常
-
删除测试网络
在部署完成时会自动创建几个测试网络,为了一个干净的环境删掉即可
Admin -> 系统 -> 路由
Admin -> 系统 -> 网络
把这两个里面的内容删掉,就可以得到一个干净的环境了。
三、可能遇到的错误
-
执行
./stack.sh
时1. If you wish to run this script anyway run with FORCE=yes
# FORCE=yes ./stack.sh
-
在执行安装前一定要把
pip
升级,升级可能遇到的错误如下
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
删除 /usr/bin/pip
, 然后重新软连ln -s /usr/local/bin/pip /usr/bin/pip
;
:这个操作切换到root用户下执行。
-
错误
Unable to locate package libsystemd-dev
ubuntu 16.04
# apt-get install libsystemd-dev
ubuntu 14.04
# apt-get install libsystemd-daemon-dev
-
加载不到模块
openstack_auth
ImportError: No module named openstack_auth
解决办法:
进入 root 用户下,卸载 openstack_auth pip uninstall django_openstack_auth
。
然后升级 pip 到最新,我目前是 19.X。然后再用最新的 pip 重新安装 pip install django_openstack_auth
然后就可以了。
蛋疼啊~~
-
执行过程中需要重新执行
如果安装过程中某个包提示找不到,则需要重新执行 ./stack.sh
(如果有其他问题则需要先 ./unstack.sh
)。在整个 devstack 安装过程中会有很多次重新执行 ./stack.sh
。
-
安装过程 pip 报错
from pip._internal import main
修改/opt/stack/.local/bin/pip2.7
将 from pip._internal import main
改 from pip import main
-
安装计算节点时报错
Didn't find service registered by hostname after 120 seconds
。
在计算节点的 local.conf
中添加placement-api
.。如下
ENABLED_SERVICES=n-cpu,q-agt,neutron,placement-api
或者直接
enable_service placement-api
-
在创建 Instance 时使用 cirros 测试镜像报错,计算节点找不到硬盘。
Booting from Hard Disk...GRUB
修改计算节点 /etc/nova/nova.conf
中 virt_type=kvm
改为 virt_type=qemu
重启 nova 服务即可
-
在创建 Instance 时使用 cirros 测试镜像报错,cpu x86-64错误时
This kernel requires an x86-64 CPU, but only detected an i686 CPU.
Unable to boot - please use a kernel appropriate for your CPU.
因为当前计算节点的操作系统不是 x86-64 的系统。所以不能跑 x86-64 的镜像。
四、screen工具的使用
1. 查看
stack@controller:~/devstack$ screen -ls
There is a screen on:
16041.stack (Saturday, February 23, 2019 06:56:47 CST) (Detached)
1 Socket in /var/run/screen/S-stack.
2. 进入
stack@controller:~/devstack$ screen -x 16041
或 screen -x stack
进入
可以看见 Terminal 最下方有一串白色的字符串,其中的每一个数字对应一个子 screen 也就是一个 Openstack services 。 下图:
3. 退出 ctrl + a + d
4. 切换子screen
-
ctrl + a + p
:切换到上一个 screen -
ctrl + a + n
:切换到下一个 screen -
ctrl + a + a
:返回上一个 screen -
ctrl + a + 等一秒 + shift + '(单引号)
: 显示所有的子 screen 的列表 -
ctrl + a + 数字
: 切换到数字所对应的子screen中,当需切换至10以上的子 -
ctrl+a+'(单引号)
切换10以上时使用, 屏幕下出现Switch to window: + 数字
。 -
ctrl + a + ?
:帮助,同样ctrl+a
按一会儿松开后在按shift + ?
-
ctrl + [
:开始滚动模式 ,然后可以使用上下左右键滚屏 -
ctrl + ]
:退出滚动模式
5. 第一次出现问题 Cannot open your terminal '/dev/pts/0' - please check.
# script /dev/null
5. 退出和重启任务
-
ctrl + c
:终止一个 screen - 进入希望 Restart 的 Openstack Services 的 screen 中,然后输入
ctrl + c
结束这个进程,输入↑
并重新执行上一条指令。
以上就是本节全部内容。
下一节将介绍 Keystone、Glance 模块