新手轻喷,不定期更新… …
这里是用docker搭建openstack实验环境的手工记录,是一步步实际操作而来,因此不会用到script来进行自动化处理。等我实际搭建成功后会写一个自动化的搭建脚本。
目录
一,需求及基础环境
- 需求:博主现正进行openstack相关的开发,刚开始接触这个项目,但苦于其规模庞大,同时其部署非常麻烦且易出错,对新手极其不友好。博主现在只使用mirantis在虚拟机上搭建成功过一次,部署一次非常麻烦且耗时很长,因此想利用docker的便捷性快速搭建openstack的实验环境。当然博主考察过kolla项目,它就是使用docker来部署openstack的,但限于网络问题,如果不将其docker的repo的地址更改到国内一些镜像源,则实际上是无法使用的,但这个项目也非常庞大,对新手而言还是很不友好,还不如自己动手,丰衣足食 >_<
- 基础环境:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
$ uname -a
Linux docker 4.4.0-157-generic #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ docker --version
Docker version 18.09.7, build 2d0083d
这里由于博主的工作笔记本用的是windows,但是WSL毕竟不是linux,而且windows对docker的支持也面临许多权限的限定,特别是关于网络设备这类比较底层的问题,WSL是没有权限操作的。综合各方面因素考虑博主是使用虚拟机作为主机的,可以选择ubuntu14/16版本的,至于debian,redhat,suse等也可以,但博主没有试过,其可以调整内存、磁盘、cpu等参数,比较方便。因为openstack的节点多的时候对计算机资源的要求是很大的,最好能选用大一些的内存和磁盘空间。具体多少等博主实际测过后再说。
二,搭建过程
1,搭建局域网内的apt源
因为在openstack的搭建过程中,非常容易出问题,这时网速就成为最令人头疼的问题,如果能在本地的局域网内搭建一个apt源,则可以大大减轻由网络异常带来的问题,甚至可以说已成功了一半。
上图是使用container搭建局域网内apt源的网络拓扑,使用的网络是docker的默认网桥,因为该网桥可以连通外部网络,同时每个container默认都连接这个网桥,所以非常合适。
(1) 安装http server
http server可以有很多选择,我这里就简单地使用Apache。
## 进入container
$ docker run -it ubuntu:16.04.3 /bin/bash
## 使用这个container作为apt server
$ apt update
$ apt install -y apache2
## 启动apache
$ service apache2 start
## 检查apache是否正常启动
$ service apache2 status
为了检查apt server是否正常启动http的服务,可以在docker所在的主机或任何能连上局域网(172.17.0.2/16)的主机向它发送http的请求
# 在apt server的container中
$ cd /var/www/html
$ echo "apache run successfully!" > test.txt
# 然后在另一个在该局域网内的主机上
$ curl -g -i -X GET http://172.17.0.2/test.txt
HTTP/1.1 200 OK
Date: Thu, 26 Sep 2019 01:34:40 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Thu, 26 Sep 2019 01:21:31 GMT
ETag: "1a-5936a96ef8426"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/plain
apache run successfully!
## 显示成功,说明http服务已开启
(2) 搭建apt源
参考资料:
How to create a local APT repository?: 这是stackflow中的问题,里面的讨论很详细,由apt本地源拓展到局域网,以及认证问题。
## 准备好工具
$ sudo apt-get install dpkg-dev
## 准备好apt库的位置,因为使用apache2做为http服务,为了简单起见,直接使用其默认的路径
$ cd /var/www/html
$ ls
index.html
## index.html是apache的主页面,这个路径就是apache的默认主路径
## 在这个路径下设置离线库
$ mkdir -p debs/amd64 && cd debs/amd64
## 通过外网下载需要的离线包,同时保证依赖的库也能一起下载下来
$ apt-cache depends <packagename> -i --recurse | awk '/^[a-z]/ {print $0}' | xargs apt-get download
## 当下载完成后需要扫描生成包的信息文件
$ cd .. ## -> debs
$ dpkg-scanpackages amd64 /dev/null | gzip -9c > amd64/Packages.gz
(3) 添加apt源
当apt server搭建好之后,需要认局域网内的其它主机能够使用这个源,因为本文主要服务于openstack基于docker的搭建,因此让所有其它的container都使用这个apt源
## 进入另外一个新的container中,首先确定其能连接到apt server的http服务,
## 这一步参考[(1)安装http server]的验证操作
$ cd /etc/apt/
$ mv sources.list sources.list.backup
$ echo "deb http://172.17.0.2/debs amd64/" > sources.list
## 更新及下载
## 注意,由于这里为了简便没有建权的步骤,
## 关于建权的部分,可以参考[(2) 搭建apt源]的资料
$ sudo apt-get --allow-unauthenticated update
Ign:1 http://172.17.0.2/debs amd64/ InRelease
......
Fetched 49.8 kB in 1s (30.8 kB/s)
Reading package lists... Done
$ sudo apt-get --allow-unauthenticated install <packagename>
(4) 验证apt源 --> 实例
按照上面两步可以在局域网内搭建好一个apt源,现在以安装ping为例来验证这个局域网内的apt源是否正常工作