1、关闭宿主机firewalld
systemctl disable firewalld
systemctl stop firewalld

2、配置selinux为disable,否则创建的实例网络不通
临时关闭:
[root@kf-kolla kolla]# getenforce
Enforcing
[root@kf-kolla kolla]# setenforce 0
[root@kf-kolla kolla]#getenforce
Permissive

永久关闭:
[root@kf-kolla kolla]# vim /etc/selinux/config
SELINUX=enforcing 改为 SELINUX=disabled
重启服务,执行reboot命令
查看配置后的状态
[root@kf-kolla kolla]# getenforce
Disabled

3、更新安装包
[root@kf-kolla kolla]#yum upgrade
[root@kf-kolla kolla]#yum install epel-release
[root@kf-kolla kolla]#yum install python-devel libffi-devel gcc openssl-devel git python-pip libselinux-python
[root@kf-kolla kolla]#pip install -U pip
[root@kf-kolla kolla]#yum install ansible -y
备注:Ansible >=2.4,我环境上安装的是ansible 2.6.3

4、安装docker 1.12.6版本
1)先增加docker yum源
tee /etc/yum.repos.d/docker.repo << 'EOF'
[dockerrepo]
name=Docker Repository
baseurl=http://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=http://yum.dockerproject.org/gpg
EOF

2)安装docker
yum install docker-engine-1.12.6 docker-engine-selinux-1.12.6 -y
查看docker版本
[root@kf-kolla kolla]# docker --version
Docker version 1.12.6, build 78d1802

3)修改dockerMountFlags等于shard
[root@kolla ~]#mkdir -p /etc/systemd/system/docker.service.d
[root@kolla ~]#tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared #配置Docker共享挂载
EOF

4)增加一个阿里云的镜像加速服务.这样镜像下载会更快一些
配置 Docker 加速器
把mirror 的配置添加到 Docker daemon的启动参数中
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hn3vy3ry.mirror.aliyuncs.com"]
}
EOF

5)启动docker服务
[root@kf-kolla kolla]#systemctl daemon-reload&&systemctl enable docker &&systemctl start docker

5、在kolla4.0.1以后,如果未设置IP路由转发功能转发,否则在编译时会有明确告警提示
永久的修改
vi /etc/sysctl.conf
把net.ipv4.ip_forward = 0
改成net.ipv4.ip_forward = 1
如果此文件中没有这个选项则将其添加上就行。
然后执行命令:
[root@kf-kolla kolla]#sysctl -p

如果临时修改可以使用echo “1”>/proc/sys/net/ipv4/ip_forword

6、下载kolla Ocata版本
1)[root@kf-kolla kolla]#git clone https://github.com/openstack/kolla.git
[root@kf-kolla kolla]#cd kolla/
查看分支
[root@kf-kolla kolla]# git branch -a
* (detached from origin/stable/ocata)
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/stable/newton
remotes/origin/stable/ocata
切换分支到ocata
[root@kf-kolla kolla]# git checkout remotes/origin/stable/ocata

2)安装python依赖包
[root@kf-kolla kolla]# pip install -r requirements.txt -r test-requirements.txt
在安装依赖包的过程中,有些已有的依赖包因为版本太低,不符合要求,导致报错,此时,对该依赖包进行升级以后,重复执行如上命令即可
在实际部署过程中,遇到的升级依赖包问题
通过如下方式强制重新安装
pip install -I PyYAML==3.12
pip install -I ipaddress==1.0.17
pip install -I pyparsing==2.1.9
pip install -I pyinotify==0.9.6
pip install -I pyOpenSSL==17.1.0
pip install -I six==1.10.0
pip install -I dnspython==1.15
pip install -I ipaddress==1.0.17
pip install -I requests==2.18.0
pip install -I netaddr==0.7.19
pip install -I requests==2.14.2
备注:
在升级pyOpenSSL包时,有时会遇到升级失败的问题,此时进行如下操作
先卸载已经安装pyOpenSSL软件包,yum erase pyOpenSSL,该命令会同时把相关的依赖也卸载了
pip install -I pyOpenSSL==17.1.0

3)安装kolla
[root@kf-kolla kolla]# pip install tox
[root@kf-kolla kolla]# tox -e genconfig
复制kolla-build.conf到 /etc/kolla
[root@kolla kolla]# cp -rv etc/kolla /etc/
[root@kf-kolla kolla]# ls etc/kolla/
kolla-build.conf
进入到kolla目录下执行如下命令
[root@kf-kolla kolla]#pip install .

7、制作镜像
1)在/etc/kolla/kolla-build.conf文件中定制需要制作的镜像集合
[root@kf-kolla kolla]# cat /etc/kolla/kolla-build.conf
[DEFAULT]
base = centos
profile = kael
push = false
install_type = source

[profiles]
kael=chrony,cron,kolla-toolbox,fluentd,glance,haproxy,horizon,keepalived,keystone,mariadb,memcached,neutron,nova,openvswitch,rabbitmq

2)对于业务上不需要的repo源进行去掉
由于在制作镜像的过程中会调用/usr/share/kolla/docker/下的Dockerfile.j2文件,所以对base目录下的Dockerfile.j2进行修改
#### BEGIN REPO ENABLEMENT
{% set base_yum_repo_files = [
'elasticsearch.repo',
'grafana.repo',#
'influxdb.repo',
'kibana.yum.repo',
'MariaDB.repo',
'td.repo',
'zookeeper.repo'
] %}

去掉不需要的repo文件
#### BEGIN REPO ENABLEMENT
{% set base_yum_repo_files = [
'elasticsearch.repo',
'MariaDB.repo',
'td.repo',
] %}

对相应的key也进行注释
{% set base_yum_repo_keys = [
'http://yum.mariadb.org/RPM-GPG-KEY-MariaDB',
'/etc/pki/rpm-gpg/RPM-GPG-KEY-Percona ',
'https://packages.elastic.co/GPG-KEY-elasticsearch',
'https://repos.influxdata.com/influxdb.key',
'https://packagecloud.io/gpg.key',
'https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana',
'https://packages.treasuredata.com/GPG-KEY-td-agent'
] %}
修改完以后
{{ macros.install_packages(base_yum_url_packages | customizable("yum_url_packages")) }}
{% set base_yum_repo_keys = [
'http://yum.mariadb.org/RPM-GPG-KEY-MariaDB',
'/etc/pki/rpm-gpg/RPM-GPG-KEY-Percona ',
'https://packages.elastic.co/GPG-KEY-elasticsearch',

'https://packagecloud.io/gpg.key',

'https://packages.treasuredata.com/GPG-KEY-td-agent'
] %}

注释掉下列内容
#RUN yum-config-manager --enable rhel-7-server-rpms \
# && yum-config-manager --enable rhel-7-server-openstack-7.0-rpms
#R
UN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

3)执行kolla-build命令
kolla-build --profile kael -t source
经过一段时间以后,会buil出镜像
[root@kf-kolla ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kolla/centos-source-nova-spicehtml5proxy 4.0.6 023ad6cd2bae 17 hours ago 1.082 GB
kolla/centos-source-nova-compute 4.0.6 13cc9f973761 18 hours ago 1.284 GB
kolla/centos-source-nova-api 4.0.6 feea4c11917e 18 hours ago 1.092 GB
kolla/centos-source-nova-placement-api 4.0.6 5a3f4393d1be 18 hours ago 1.092 GB
kolla/centos-source-nova-ssh 4.0.6 8c44c1b6ee45 18 hours ago 1.06 GB

8、遇到的一些坑
1)安装完docker以后,一定要确认docker所创建的容器能够连接外网,最好在容器内ping www.baidu.com试下,否则无法进行后续镜像制作
典型的错误如下
kolla.image.build.base:Cannot open: http://repo.percona.com/release/7/RPMS/x86_64/percona-release-0.1-4.noarch.rpm.
2)docker版本与kolla ocata版本不兼容的问题
安装的kolla版本是4.0.6-dev3,dokcer版本是17.06.0-ce,虽然kolla可以成功安装,也没有报各种异常,但是在执行kollla-build的时候报如下错误
self._dc = docker.Client(version='auto', **docker_kwargs)
AttributeError: 'module' object has no attribute "client"

这是由于docker的版本太高,与kolla版本不兼容的原因
3)先安装高版本docker,再替换成低版本docker时,可能有高版本文件残留,导致重启docker服务失败,比如一开始安装的是docker17.06.0-ce,后来由于不兼容的问题docker版本又换成了docker 1.12.6版本,这样在重启docker服务的时候,docker服务一直重启失败。原因是docker17.06.0-ce默认使用的是overlay存储驱动,而1.12.6默认使用的是devicemapper存储驱动,由于overlay存储文件的残留,导致docker进程一直失败,处理方式把overlay文件删除即可,或者删除已有的docker,重新安装

删除docker安装包
$ yum -y remove docker-engine.x86_64
删除镜像/容器等
$ rm -rf /var/lib/docker

4)kolla ocata版本制作的镜像,在部署的时候,一定要使用ocata版本的kolla-ansible代码,否则,在部署的时候,由于不兼容,导致kolla-ansible拉取镜像失败

5)镜像制作出来以后,在推送镜像的时候,带base类的镜像是不需要推送的

6)碰到的奇怪问题,部署的docker版本是1.12.6,kolla的版本是ocata 4.0.6,两者都顺利安装,但是在执行kolla-build命令的时候,报如下错误

self._dc = docker.Client(version='auto', **docker_kwargs)
AttributeError: 'module' object has no attribute "client"

这是由于以前安装高版本docker版本,docker-python包依赖包多导致的,处理方式,先卸载docker-py

[root@kf-kolla kolla]# pip uninstall docker-py

再重新安装kolla代码,解决了

我的环境好的情况下docker包的信息

[root@kf-kolla ~]# pip list |grep docker
docker 3.5.0
docker-compose 1.22.0
docker-py 1.10.6
docker-pycreds 0.3.0
dockerpty 0.4.1

补充知识点:
镜像结构大体分为四层:
base
openstack-base
<service>-base
<service>
1)base
所有的Kolla项目基本上使用了同一个base镜像作为基础,所有的dockerfile模板在kolla/docker中,base镜像中主要定义了镜像中一些基础的内容,如:
命令行提示符格式
指定软件包源
安装基础的软件
所以如果需要定制以上内容就可以去更改base的Dockerfile模板了。

2)openstack-base
如果是Openstack的服务,都会以openstack_base作为基础镜像,当然openstack-base也是在base基础上构建的,内容比较少,
主要是安装了openstack比较通用的基础组件以及软件包,比如oslo*和*client等内容。

3)<service>-base
在openstack-base基础上就会构建各个服务组件的镜像了,以nova为例,nova本身有多个服务,如api、conductor、compute等,类似这样的服务,
Kolla中又以openstack-base为基础做了一个<service>-base镜像,nova为例也就是nova-base镜像作为其他几个服务的基础镜像,主要处理几个服务通用的内容,安装通用的软件等。

4)<service>
最后是服务镜像本身,以<service>-base为基础镜像,进行服务的部署,配置等,并设定启动入口,以及服务必要的依赖

05-11 21:43