这篇文章的目的是在一台物理机上利用kolla-ansible安装openstack单节点环境。
最近研究kolla项目,主要是用容器来自动部署openstack组件。下面记录我在ubuntu下成功部署openstack-queens版本的过程。虽然说官网也有文档,叫quickstart,但是如果刚接触kolla-ansible,然后看那个quickstart,可能需要碰一些壁。因为它有些内容省略了,这篇文档可以作为一个补充吧。
官网文档:
https://docs.openstack.org/kolla-ansible/queens/user/quickstart.html
推荐 ubuntu16.04 server版本
如果只有14.04的镜像,可以尝试升级啊,因为手边只有ubuntu14.04的光盘,所以从14.04升级到16.04,然后再安装openstack。升级完成后,pip出了点问题,但是百度一下就解决了。
参考的网址:
https://blog.csdn.net/dylloveyou/article/details/78232656
找到的一个可用的阿里源
https://www.cnblogs.com/hcl1991/p/7894958.html
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
apt-get update
apt-get install -y python-pip
pip install -U pip
apt-get install -y python-dev libffi-dev gcc libssl-dev python-selinux
如果用apt来安装,装的是2.0.0.2版本,而用pip安装,装的是2.5.4。建议用高版本的吧。pip会自动把apt装的低版本的ansible卸载掉,然后成功安装最新版本的ansible。
pip install -U ansible
有一個簡單的方式直接安裝docker。并且版本也是符合要求的。
sudo apt-get install docker.io
另一個方式可以是,安裝阿里云上的教程来下载docker-ce,最新版本即可
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
这个脚本有时候在晚上的时候无法执行,不知道为什么。下面提供一个详细版本的。一步步执行也能够成功安装
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
安装加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://j2ed47d8.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
这里 注意,需要设置docker为mountflag=share(文档里没有提,但是prechecks的时候会报错)
mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
测试下自己能不能正常使用docker hub
docker search kolla
这里用developing的方式来安装openstack,所以直接下载源码
git clone https://github.com/openstack/kolla-ansible
cd kolla-ansible
git checkout stable/queens//切換到穩定的分支
将必须的文件拷贝到相应的地方,有两个文件比较重要
/etc/kolla/*
global.yml
以及password.yml
/root/inventory/*
all-in-one
以及multinode
cp -r kolla-ansible/etc/kolla /etc/kolla/
mkdir /root/inventory/
cp kolla-ansible/ansible/inventory/* /root/inventory/
修改配置文件
network_interface: "ens33"
, neutron_external_interface: "ens34"
, enable_haproxy=no
pip install kolla-ansible/
先安裝依賴包,後面執行的時候就不會報錯。
./kolla-ansible/tools/generate_passwords.py
如果自己想修改密码,可以修改/etc/kolla/password.yml文件。
记住:prechecks成功不一定deploy成功,但是prechecks不成功deploy一定不成功
漫长的等待,如果哪里报错就根据提示修改
cd kolla-ansible/tools/
./kolla-ansible prechecks -vvv -i /root/inventory/all-in-one
cd kolla-ansible/tools/
./kolla-ansible deploy -vvv -i /root/inventory/all-in-one
生成对应的身份认证信息,配置命令行的环境。后面运行命令行的时候会用到。
kolla-ansible post-deploy
chmod +x admin-openrc.sh
. /etc/kolla/admin-openrc.sh
下面是安装client客户端,然后就可以愉快的用命令行了。另外还提供了一个脚本来测试openstack的服务。但是注意的是,这里创建的外部网络只是一个例子,不符合实际的网络配置,因此你还是要自己改一下子网。
pip install python-openstackclient python-glanceclient python-neutronclient
./init-runone
查看容器启动状态(UP/RESTART/DOWN…)
docker ps
查看镜像
docker images
debug 看日志
进入fluentd容器(日志集中的容器)
docker exec -it fluentd /bin/bash
cd /var/log/kolla/
然后要看的容器日志(举例:sahara_api)
tail -f sahara/sahara-api.log
退出fluentd容器
exit
修改配置文件,这里用root权限登录,没有密码没有密码没有密码!!!
docker exec -u -0 -it <容器名称> /bin/bash
docker exec -u -0 -it sahara_api /bin/bash
进入配置文件目录(一般是/etc/组件名称)
cd /etc/sahara/
找到对应的配置文件然后修改
我们还发现容器里面连文字编辑器都没有,由于用的是host网络,手动安装一下vim吧。
apt-get update
apt-get install vim
改完之后退出容器,然后重启这个容器
如果修改了ansible下的部署文件,用reconfigure可以避免将环境破坏掉,它会自动找到修改的容器,并且重新启动。
reconfigure is VERY IMPORTANT!!!
明确你需要安装的openstack版本
因为kolla是个开源的项目,因此不一定所有的版本都一直维护,一般只维护最新的三个版本,截止至目前(2018年6月),可以看到kolla-ansible项目有4个分支,分别是master, queens, ocata和pike。如果要找回以前的版本,可以看回releases里面的内容。但是之前尝试想要复现Mitaka版本,但是失败了。这里提醒一句,M版本以及之前的版本使用的docker、ansible的版本与N版之后的有区别哦。并且kolla-ansible对于软件依赖的版本很敏感,很多时候安装失败都是因为软件的版本不对导致。
因此明确你要安装的版本,并且要将kolla-ansible切换到对应的分支,复制配置文件的时候最好也是用同一个版本的配置文件比较好。
为什么用docker hub来下载镜像
我们这里不直接用kolla来构建镜像,而是从docker-hub中下载对应的镜像。当我尝试用kolla来构建镜像时,不但构建的时间很长,构建会出错,有几个镜像一直无法构建成功。然后通过docker info
命令来查看镜像数量的时候多达三四百个。然而我们如果直接用从docker hub中拉取镜像,只会有我们要用到的镜像,镜像数量大大减小。后期通过docker export
或者docker save
将镜像导出即可,然后用于多节点部署,可以支持离线安装openstack。
尽管是stable分支,还是有bug的,要留心
比如说我们运行的一个sahara的组件,但是在horizon上就不能正常显示。后面通过debug发现原来部署的register.yml里面写错了,把service_name写错了,导致endpoint无法正确写入、从horizon的日志中看到的无法找到对应的endpoint。最后的解决方法是修改register.yml文件,然后重新reconfigure。
开启eth1
sudo ifconfig eth1 up
因为用ifup eth1说是unknown interfaces,所以换了一种方式
用ipaddr或者ifconfig查看网卡状态,看是否有RUNNING标志
报错:Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
我们现在需要找到PyYAML的安装文件,然后删掉它。重新执行安装软件依赖的操作。
find /usr/lib/python2.7/dist-packages/ -type f -name '*.egg-info'
操作系统 | 方式 | 是否成功 |
---|---|---|
centos | all in one | yes |
centos | multinode | yes |
ubuntu | all in one | yes |
ubuntu | multinode | 暂未尝试 |
后续工作可以尝试离线安装openstack,将镜像打包,然后通过部署节点-服务节点的方式来安装多节点模式。