玩转OpenStack(三)架构、安装、screen

2019-02-24  本文已影响0人  河码匠

终于开始 OpenStack 的介绍了。
本节将介绍 OpenStack 架构和安装。模块的详细功能将在后面的小节中介绍。

一、概念架构(Conceptual Architecture)

概念架构

1. 核心模块说明

2. 可选服务

二、 逻辑架构(Logical Architecture)

逻辑架构

在逻辑架构中可以看到每个服务由若干个组件组成。每个组件的详细信息后面的章节会逐个介绍。

三、安装OpenStack

我使用的是 OpenStack 的 DevStack 进行开发环境的部署。
DevStack 有丰富的选项让我们能够灵活的选择和部署想要的 OpenStack 服务。

1. 部署拓扑

管理 OpenStack,运行的服务有 Keystone、Glance、Horizon、Nove 和 Neutron 中管理相关的组件。
运行支持 OpenStack 的服务,如:数据库(MySQL)、消息队列(RabbitMQ)和网络时间服务 NTP。

运行的服务为 Neutron 为 OpenStack 提供 L2 和 L3 网络。包含虚拟机网络、DHCP、路由、NAT 等。

逻辑上,OpenStack 至少包括下面几类网络:

这几类网络只是逻辑上的划分,物理实现上可以有非常大的自由度。我可以为每个网络分配单独的网卡,也可以多种网络使用一个网卡。

提供块存储(Cinder)或对象存储(Swift)服务。

运行 Hypervisor (默认使用KVM)服务。同时运行 Neuron 服务的 agent,为虚拟机提供网络支持。

以上节点是从功能上进行的逻辑划分,在实际中可以根据需求配置。

2. 开发环境

拓扑图如下:


开发环境拓扑图
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
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 update
# apt-get upgrade

\color{red}{注意}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
# apt-get install python-pip
# pip install --upgrade pip
# pip install -U os-testr

\color{red}{注意}:如果pip版本很旧的话在安装 DevStack 时会报错

设定时区: Asia -> Shanghai -> OK

# dpkg-reconfigure tzdata

安装时间同步工具 ntpdate

# apt-get install ntpdate

与网络服务器同步时间

# ntpdate cn.pool.ntp.org

查看是否成功

# date
# apt-get install git
# sudo useradd -s /bin/bash -d /opt/stack -m stack
# echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack

\color{red}{注意}:因为stack账户会修改系统的权限,所以要给一个高级权限。

# su - stack

为了方便将 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 查看

[[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
[[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

[[local|localrc]] 添加下面代码即可,国内源

GIT_BASE=http://git.trystack.cn

\color{red}{注意}: 国内源存在同步滞后,可能包不兼容或者下载某些包失败问题,出现这种情况时只需要重新替换原来的镜像源,然后重新运行 ./stack.sh 即可。

使用 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 -> 系统 -> 网络
把这两个里面的内容删掉,就可以得到一个干净的环境了。

三、可能遇到的错误

# FORCE=yes ./stack.sh
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;
\color{red}{注意} :这个操作切换到root用户下执行。

ubuntu 16.04

# apt-get install libsystemd-dev

ubuntu 14.04

# apt-get install libsystemd-daemon-dev
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

修改/opt/stack/.local/bin/pip2.7

将 from pip._internal import main
改 from pip import main

在计算节点的 local.conf 中添加placement-api.。如下

ENABLED_SERVICES=n-cpu,q-agt,neutron,placement-api
或者直接
enable_service placement-api
Booting from Hard Disk...GRUB

修改计算节点 /etc/nova/nova.confvirt_type=kvm 改为 virt_type=qemu 重启 nova 服务即可

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

5. 第一次出现问题 Cannot open your terminal '/dev/pts/0' - please check.

# script /dev/null  

5. 退出和重启任务

以上就是本节全部内容。
下一节将介绍 Keystone、Glance 模块

上一篇 下一篇

猜你喜欢

热点阅读