【Openstack】零基础用DevStack安装OpenStack(单机)
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作,但是安装OpenStack却不是很容易,尤其是它涉及的学科特别广泛,让许多初学者望而却步。安装openstack可以通过很多途径,但是可以使用DevStack来安装是业界最常用的方式。
但是我找了网上好多安装教程,写的都不太详细,不适合小白来学习,安装过程走了许多弯路,所以我写这个特别详细教程来从零安装openstack
以下是安装openstack的具体步骤:
一、环境搭建
1. 安装虚拟机管理器Vmware12.0
去官网下载即可。
2. 安装Ubuntu 14.04 Serve;下面是下载链接:
https://www.ubuntu.com/download/alternative-downloads
安装过程中,请保证网络畅通(使用默认NAT网络即可,其他按照默认值),另外,可能会出现安装失败的情况,可以多尝试几次。另外,需要安装两个虚拟机,分别是两个节点controller和computer,其拓扑结构和网络下面详细讲解。
3. 安装Xshell
去官网下载即可。
4. 因为许多配置要通过终端配置,但是server自带的tty命令行模式不太好操作,所以最好通过Xshell远程登陆,但是LInux默认不允许SSH远程Root登陆,所以要开启SHH远程ROOT登陆。
(1) 在执行apt-get过程中可能会提示错误,以下是解决方案:
打开源文件,将所有以cdrom开头的代码(第二行)注释掉
sudo vi /etc/apt/sources.list
下载安装vim,用于编辑配置文件
sudo apt-get install vim
使用apt-get安装openssh server,用于支持远程登陆
sudo apt-get install openssh-server
然后再执行上述命令即可。
(2)安装完成后对openssh server配置
sudo vim /etc/ssh/sshd_config
(3) 找到PermitRootLogin no一行,改为PermitRootLogin yes
(4)重启 openssh server
sudo service ssh restart
5. 配置好ssh服务后,查看本机ip,远程登陆。
Ifconfig 查看inet addr 的IP地址;
使用Xshell远程登陆虚拟机
以下操作均在Xshell下运行!!!
6. 更换为国内的镜像源
备份源文件:
cd /etc/apt/
sudo cp sources.list sources.list.bak
打开镜像文件:
sudo vim sources.list
输入以下内容:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
更新源
sudo apt-get update
7. pip源地址也可以换为国内的豆瓣源
安装pip
sudo apt-get install python-pip -y
创建pip配置文件
sudo mkdir /root/.pip
sudo vim /root/.pip/pip.conf
输入以下内容,没有配置文件可以创建:
[global] index-url = http://pypi.douban.com/simple/
trusted-host = pypi.douban.com
8. 配置网络结构,
首先介绍以下配置的网络结构:
总结:controller节点的虚拟机有三块网卡分别是:eth0、eth1、eth2
Eth0:主要用于上网访问网络和用于内部管理,如服务之间的通信问题。
Eth1:OpenStack 部署的虚拟机所使用的网络。 OpenStack 支持多租户(Tenant),虚机是放在 Tenant 下的,所以叫 Tenant Network。
Eth2:一般来说,Tenant Network 是内部私有网络,只用于 VM 之间通信,与其他非 VM 网络是隔离的。 这里我们规划了一个外部网络(External Network),通过 devstak-controller 的 eth2 连接。 Neutron 通过 L3 服务让 VM 能够访问到 External Network。 对于公有云,External Network 一般指的是 Internet。 对于企业私有云,External Network 则可以是 Intranet 中的某个网络。
因此,eth0使用桥接网络,两个虚拟机配置不同的ip地址
Eth1使用NAT网络、eth2使用仅主机模式。
(1)配置固定IP
因为两个虚拟机中的eth0网卡需要使用桥接模式,所以主机最好使用固定ip;
固定IP的配置方法可自行百度,注意不要忘记配置DNS:
参考:https://jingyan.baidu.com/article/7908e85c7c1147af481ad237.html
(2)配置网卡
打开VMware - 相应的虚拟机-设置-添加-网络适配器-选择模式:
Controller节点,配置截图:
Computer节点,配置截图:
(3)设置桥接的连接模式:
编辑-网络编辑器-更改设置-桥接模式
桥接模式可选自动,或者选择上一步已经配置好固定ip的网卡:
因为,我的电脑只有以太网卡可以设置为固定IP,所以这里我选择的是相应的网卡,谨记!
配置网卡后,重启虚拟机并查看网卡信息:
sudo reboot
ifconfig
(3)配置固定ip --以下操作可在系统tty1进行操作配置
注意:ubuntu14.04 网卡标志:eth0/1/2
ubuntu16.04 网卡标志:ens 33/38/39
注意;在配置ubuntu16.04是,ifconfig查看网卡,只有一个网卡信息,等配置完所有信息后才全部显示
我实验室能用IP:115/116(computer/controller)
打开配置文件(记得配置完重启并ping一下)
sudo vim /etc/network/interface
Controller虚拟机节点:
# The loopback network interfaces
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.*
netmask 255.255.255.0
gateway 192.168.*.*
dns-nameservers 202.112.144.30 202.112.144.236
auto eth1
iface eth1 inet manual
auto eth2
iface eth2 inet manual
computer虚拟机节点:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.119
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 202.112.144.30 202.112.144.236
auto eth1
iface eth1 inet manual
注意:此处的IP地址一定要和之前设置桥接模式时连接的网卡,在同一个网段,其他掩码、网关、DNS都与主机网卡的相同,注意要在主机上测试IP地址可用,避免被占用。
(4)重启计算机
测试 ping baidu.com
而且,保证两个虚拟机之间能够联通。
重启后,ip固定,以后操作可在xshell操作,也可以先配置固定ip,然后在配置其他设置。
二、部署openstack
1. 下载 devstack 代码,并切换到 stable/ocata分支
注意:分支ocata可以改,最新的版本是ocata
sudo apt-get install git -y
git clone https://git.openstack.org/openstack-dev/devstack -b stable/ocata
2.目前Devstack脚本已经不支持直接使用root身份运行,你需要创建stack用户运行
sudo devstack/tools/create-stack-user.sh
为方便起见,将devstack目录放到/opt/stack下,并设置权限
sudo mv devstack /opt/stack
sudo chown -R stack:stack /opt/stack/devstack
切换到 stack 用户
sudo su stack
cd devstack
3. 在 /opt/stack/devstack 目录下,创建 local.conf
vim local.conf
Controller节点配置文件内容:
[[local|localrc]]
MULTI_HOST=true
HOST_IP=192.168.0.116 # management & api network
LOGFILE=/opt/stack/logs/stack.sh.log
# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
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-v*n
Q_AGENT=linuxbridge
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
LOG_COLOR=False
LOGDIR=$DEST/logs
SCREEN_LOGDIR=$LOGDIR/screen
# use TryStack git mirror
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git
enable_service placement-api
enable_service placement-client
Computer节点配置文件内容:
[[local|localrc]]
MULTI_HOST=true
HOST_IP=192.168.0.115 # management & api network
# Credentials
ADMIN_PASSWORD=admin
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
# Service information
SERVICE_HOST=192.168.0.119
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=False
LOGDIR=$DEST/logs
SCREEN_LOGDIR=$LOGDIR/screen
# use TryStack git mirror
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git
enable_service placement-api
enable_service placement-client
4.分别在 devstack-controller 和 devstak-compute 上执行命令
./stack.sh
问题总结:
(1)cp: cannot stat '/opt/stack/keystone/etc/policy.json': No such file or directory
解决方法:/opt/stack/keystone/etc/下有一个sample policy文件,把它复制一份命名为policy.json,然后重新跑stack.sh。另外,建议不是ocata版本,这个成功率较高
(2) Devstack 安装 openstack 时执行./stack.sh 时出现
[ERROR] ./stack.sh:227 If you wish to run this script anyway run with FORCE=yes
解决方法: FORCE=yes ./stack.sh
(3)E: There are problems and -y was used without --force-yes
再试一次
(4)[ERROR] /opt/stack/devstack/inc/python:396 Can't find package systemd-python in requirements
目前无解
(5)建议用ocata版本,这个 成功率高。
Ocata版本,需要在/etc/nova/nova.conf中加入placement-api这个section,
对于devstack,需要在local.conf中加入下面两行:
enable_service placement-api
enable_service placement-client
5.验证结果
输出各项操作的结果, 日志会写到 stack.sh.log 文件。 整个过程需要连接Internet,网速慢可能会花较长时间,成功后最后会打印出相关信息。