欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu下容器部署openstack

程序员文章站 2024-01-11 20:11:04
...

引言

这篇文章的目的是在一台物理机上利用kolla-ansible安装openstack单节点环境。
最近研究kolla项目,主要是用容器来自动部署openstack组件。下面记录我在ubuntu下成功部署openstack-queens版本的过程。虽然说官网也有文档,叫quickstart,但是如果刚接触kolla-ansible,然后看那个quickstart,可能需要碰一些壁。因为它有些内容省略了,这篇文档可以作为一个补充吧。
官网文档:
https://docs.openstack.org/kolla-ansible/queens/user/quickstart.html

  • 软件版本控制
软件 查询命令 版本
ubuntu lsb_release -a Ubuntu 16.04.4 LTS
docker docker –version Docker version 18.05.0-ce, build f150324
ansible ansible –version ansible 2.5.4
openstack none stable/queens

基本步骤

安装操作系统

推荐 ubuntu16.04 server版本
如果只有14.04的镜像,可以尝试升级啊,因为手边只有ubuntu14.04的光盘,所以从14.04升级到16.04,然后再安装openstack。升级完成后,pip出了点问题,但是百度一下就解决了。
参考的网址:
https://blog.csdn.net/dylloveyou/article/details/78232656

其他软件依赖

apt-get update
apt-get install python-pip
pip install -U pip
apt-get install python-dev libffi-dev gcc libssl-dev python-selinux

安装ansible

如果用apt来安装,装的是2.0.0.2版本,而用pip安装,装的是2.5.4。建议用高版本的吧。pip会自动把apt装的低版本的ansible卸载掉,然后成功安装最新版本的ansible。

pip install -U ansible

安装docker

这里推荐用阿里云上的教程来下载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

下载kolla-ansble的源码

这里用developing的方式来安装openstack,所以直接下载源码

git clone https://github.com/openstack/kolla
git clone https://github.com/openstack/kolla-ansible

环境配置

将必须的文件拷贝到相应的地方,有两个文件比较重要

  • /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/

修改配置文件
1. 修改/etc/host
添加自己主机名对应的ip地址。一般是用于rabbitmq。
2. 修改global.yml,除了修改自己的网络配置以外,如果要添加其他服务,可以enable一下相关的配置。在部署的时候会拉取对应的容器并启动提供相关服务。最好看官网上你需要的服务关联的配置。
ubuntu下容器部署openstack
如果需要添加其他组件,查找对应的组件,并且enable相关的设置。这里启动了sahara组件、tacker组件以及neutron相关子服务。
ubuntu下容器部署openstack
3. 生成密码

./kolla-ansible/tools/generate_passwords.py
如果自己想修改密码,可以修改/etc/kolla/password.yml文件。

4. 如果是多节点的话修改multinode
5. 安装一下requirement.txt里面的软件依赖 (文档没有提,但是后面执行会报错)

pip install kolla-ansible/

基本环境检查

记住: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

openstack服务验证

生成对应的身份认证信息,配置命令行的环境。后面运行命令行的时候会用到。

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

注意事项

  1. 明确你需要安装的openstack版本
    因为kolla是个开源的项目,因此不一定所有的版本都一直维护,一般只维护最新的三个版本,截止至目前(2018年6月),可以看到kolla-ansible项目有4个分支,分别是master, queens, ocata和pike。如果要找回以前的版本,可以看回releases里面的内容。但是之前尝试想要复现Mitaka版本,但是失败了。这里提醒一句,M版本以及之前的版本使用的docker、ansible的版本与N版之后的有区别哦。并且kolla-ansible对于软件依赖的版本很敏感,很多时候安装失败都是因为软件的版本不对导致。
    因此明确你要安装的版本,并且要将kolla-ansible切换到对应的分支,复制配置文件的时候最好也是用同一个版本的配置文件比较好。

  2. 为什么用docker hub来下载镜像
    我们这里不直接用kolla来构建镜像,而是从docker-hub中下载对应的镜像。当我尝试用kolla来构建镜像时,不但构建的时间很长,构建会出错,有几个镜像一直无法构建成功。然后通过docker info命令来查看镜像数量的时候多达三四百个。然而我们如果直接用从docker hub中拉取镜像,只会有我们要用到的镜像,镜像数量大大减小。后期通过docker export或者docker save将镜像导出即可,然后用于多节点部署,可以支持离线安装openstack。

  3. 尽管是stable分支,还是有bug的,要留心
    比如说我们运行的一个sahara的组件,但是在horizon上就不能正常显示。后面通过debug发现原来部署的register.yml里面写错了,把service_name写错了,导致endpoint无法正确写入、从horizon的日志中看到的无法找到对应的endpoint。最后的解决方法是修改register.yml文件,然后重新reconfigure。

  4. 开启eth1
    sudo ifconfig eth1 up
    因为用ifup eth1说是unknown interfaces,所以换了一种方式
    用ipaddr或者ifconfig查看网卡状态,看是否有RUNNING标志

  5. 报错: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,将镜像打包,然后通过部署节点-服务节点的方式来安装多节点模式。