背景

新手入门OpenStack最头疼的就是一大堆的组件需要安装配置部署,纷繁复杂的配置文件,不同的操作系统间的细微差异,遇到问题各种上网搜索,由于社区版本迭代很快,很有可能迟迟不能准确的找到解决问题的方法。OpenStack的Kolla项目正好解决了这类问题,目前正在NewtouchX团队中尝试和推广。
本文主要是说明Kolla项目如何在本地虚拟机上安装部署一套OpenStack,通过自动化脚本将OpenStack的所有组件采用Docker镜像的方式启动和配置,整个过程小于一个小时,非常方便,另外基于物理机下的安装今后会另有博文说明。

安装必备环境

本地虚拟化软件

无论本地是windows还是macOS,都推荐大家使用Oracle VM VirtualBox,可到官网下载相应版本并安装。

安装centOS 7 最小化版本

CentOS官网下载最小化版本安装文件 CentOS-7-x86_64-Minimal-1611.iso

虚拟机的硬件配置

其实OpenStack的安装配置中,最麻烦的还是网络配置,网络配置的规划需要从一开始就设定好。
关于 VirtualBox 的网卡如何配置,见另一篇博文 VirtualBox的网卡配置详解
由于Kolla的安装,要求目标机器是两块网卡,所以需要规划虚拟机也是分配两块网卡:
eth1:NAT网络模式,设置的IP是:10.0.2.5,日后Horizon访问就是通过这个IP地址。
eth2:桥接网卡模式,ip其实是dhcp分配,这个其实是让neutron的br-ex 绑定使用,虚拟机是通过这块网卡访问外网。
在机器上连接虚拟机,是通过eth1的IP进行访问,如果你通过eth2 ssh,安装过程,会导致ssh中断。
默认设置,其实两块网卡都是可以访问到互联网。也可以是其中一块网卡访问外网,对于测试来说,基本问题不大。如果在服务器直接安装,两块网卡的IP,就算是同一个网段,也是没啥问题的。
可以直接下载kolla官方提供的镜像文件,这样就不需要自己build镜像的环节,而且也省去docker pull 费时还经常断的问题。

启动后需要设置网络

因为最小化安装没有net-tools,并且网卡也未激活,无法使用yum在线安装,首先可使用以下工具,先激活和配置网卡。
这是一个类似于图形化的命令(和setup类似)
通过这个组件窗口可以设置各种网卡的配置和网卡的激活和关闭。

yum install net-tools
nmtui

关闭 Selinux

需要关闭Selinux
编辑/etc/selinux/config

SELINUX=disabled

重启系统,然后检查Selinux是否关闭

sestatus

关闭Firewalld

由于是开发测试环境,需要开启大量的服务端口,为了今后简化配置,所以关闭防火墙,但是如果是生产环境或者暴露公网IP的服务器,强烈建议不要关闭防火墙

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
firewall-cmd --state

安装Epel源

yum install epel-release

配置hostname

vi /etc/hostname

kolla
vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.2.5   kolla.jackchen.com     kolla

检查配置是否正确

#hostname -F /etc/hostname

#hostname
kolla

#hostname -f
kolla.jackchen.com

安装NTP

# CentOS 7
yum install ntp
systemctl enable ntpd.service
systemctl start ntpd.service

手工同步时间

ntpdate 0.centos.pool.ntp.org

单节点安装Ocata

安装依赖包

yum install python-devel libffi-devel gcc openssl-devel git python-pip

安装Docker

目前最新版本的Docker是1.13.1,Kolla目前支持的Docker是1.12.x,所以我们要指定Docker的版本来安装,并且一定要采用Docker官方的源,不能使用红帽的源,红帽的源的Docker是有bug。
设置repo

vi /etc/yum.repos.d/docker.repo

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

yum install docker-engine-1.12.5 docker-engine-selinux-1.12.5

# Create the drop-in unit directory for docker.service
mkdir -p /etc/systemd/system/docker.service.d

# Create the drop-in unit file
tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared
EOF
# Run these commands to reload the daemon
systemctl daemon-reload
systemctl enable docker
systemctl restart docker

允许访问私有仓库

编辑 /usr/lib/systemd/system/docker.service

#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --insecure-registry 10.0.2.5:4000

重启Docker服务

systemctl daemon-reload
systemctl restart docker

sudo mkdir /opt/registry
docker run -d -v /opt/registry:/var/lib/registry -p 4000:5000 --restart=always --name registry registry:2

下载官方镜像

下载kolla官方提供的镜像

http://tarballs.openstack.org/kolla/images/

这是kolla官方提供的镜像给CI使用,只保留最新版本和最新的stable版本。大家可以下载Ocata版本

wget http://tarballs.openstack.org/kolla/images/centos-source-registry-ocata.tar.gz
tar zxvf centos-source-registry-ocata.tar.gz -C /opt/registry/

curl -XGET http://10.0.2.5:4000/v2/_catalog

安装ansible

由于ansible不在YUM的官方源中,建议到如下地址查看 http://dl.fedoraproject.org/pub/epel/7/x86_64/e/ ,可以找到 epel-release开头的文件,将此文件作为源增加到本机

rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm
yum install ansible

安装pip

sudo yum install python-pip
sudo pip install --upgrade pip

安装kolla-ansible

cd ~
git clone https://github.com/openstack/kolla-ansible.git -b stable/ocata

Install Kolla for development

cd kolla-ansible
pip install .

cp -r etc/kolla /etc/kolla/
cp ansible/inventory/* /root/

如果是在虚拟机里装kolla,希望可以启动再启动虚拟机,那么你需要把virt_type=qemu,默认是kvm,物理机安装可以跳过此步骤。

mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type=qemu
cpu_mode = none
EOF

生成密码文件

kolla-genpwd

编辑 /etc/kolla/passwords.yml

keystone_admin_password: chenhao

这是登录Dashboard,admin使用的密码,你可以根据自己需要进行修改。

编辑 /etc/kolla/globals.yml 文件

kolla_install_type: "source"
openstack_release: "4.0.2"
kolla_internal_vip_address: "10.0.2.10"

docker_registry: "10.0.2.5:4000"
docker_namespace: "lokolla"

network_interface: "eth1"
neutron_external_interface: "eth2"

上述配置中注意kolla_install_type需要与之前下载的Kolla官方镜像包的类型一致,openstack_release也需要与Kolla官方镜像包中实际的镜像包tag一致,否则ansible会报错找不到镜像。

10.0.2.10,这个ip是一个没有使用的的ip地址,他是给haproxy使用,单节点其实压根没有意义。

安装OpenStack

kolla-ansible deploy -i /root/all-in-one 

验证部署

kolla-ansible post-deploy
这样就创建 /etc/kolla/admin-openrc.sh 文件

安装OpenStack client端

pip install python-openstackclient

编辑 /usr/share/kolla-ansible/init-runonce,

网络需要根据实际情况修改

EXT_NET_CIDR='192.168.3.0/24'
EXT_NET_RANGE='start=192.168.3.30,end=192.168.3.40'
EXT_NET_GATEWAY='192.168.3.1'

192.168.3.0的网络,就是我上面eth2接的网络,这个网络是通过路由器访问互联网,需要根据大家的实际情况配置,装完虚拟机就可以直接ping通。

运行

source /etc/kolla/admin-openrc.sh
cd /usr/share/kolla-ansible
./init-runonce

最后你可以创建一个虚拟机来玩玩,根据最后的命令提示

openstack server create \
    --image cirros \
    --flavor m1.tiny \
    --key-name mykey \
    --nic net-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    demo1

这个时候,你可以登录Dashboard,给虚拟机分配一个floating ip,如果顺利,你应该就可以直接ping 通 floating ip的地址。

后续

以上完成的OpenStack环境搭建,后端并没有使用ceph,如果需要继续安装配置ceph,可参考博文:使用kolla容器化部署ceph