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为基础镜像,进行服务的部署,配置等,并设定启动入口,以及服务必要的依赖

Kolla Ocata版本安装及镜像制作流程的更多相关文章

  1. Docker学习以及镜像制作流程

    一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  2. Docker详细介绍安装与镜像制作和拉取

    一.Docker是什么? 产生背景: 开发和运维之间因为环境不同和导致的矛盾(不同的操作系统.软件环境.应用配置等)DevOps 代码.系统.环境.配置等封装成镜像Image--->运维: 集群 ...

  3. 初涉定制linux系统之——自动化安装Centos系统镜像制作

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本 ...

  4. Kolla O版本部署

    Kolla O版部署和之前的版本还是有些区别的,环境还是all-in-one 基本准备: 关闭Selina和firewalld [root@kolla ~]# cat /etc/redhat-rele ...

  5. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  6. Docker系列-(2) 镜像制作与发布

    上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...

  7. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  8. c#自动更新+安装程序的制作 (转)

    c#自动更新+安装程序的制作 (转)  http://blog.csdn.net/myhuli120/article/details/6927588 一.自动更新的实现 让客户端实现自动更新,通常做法 ...

  9. openstack私有云布署实践【16.3 Windows Server2008 R2 只有C盘分区镜像制作】

    之所以要只有C盘分区镜像,是因为在创建VM或者调整云主机的硬盘大小时,它能自动扩容.无需人工介入   参考http://www.iyunv.com/thread-45149-1-1.html的灵感   ...

随机推荐

  1. tkinter模块中常用的参数

    以下内容来自于:http://www.cnblogs.com/aland-1415/p/6849193.html(个别内容掺入了自己的重新整理) cnf={}与**kw: cnf={}这是一个默认参数 ...

  2. cocos2dx 中 string 转json

    string jsonData = warriors.toStyledString().c_str(); Json::Value parseData; Json::Reader reader; rea ...

  3. 如何让DIV可编辑、可拖动

    1.可编辑: <div id="move" contentEditable="true">可编辑</div> 设置contentEdit ...

  4. jmeter 多压力机并发测试过程

    要实现多台压力机并发,就必须有多台服务器上安装了jmeter程序包,首先把一台服务器作为主压力机,测试脚本放到这台机器上,主压力机与从压力机在同一局域网中,服务器之间可以ping通 第一步:在linu ...

  5. 【Educational Codeforces Round 38】D. Buy a Ticket 堆优化Dijkstra

    题意 给定一张无向图,对每个点$i\in S$求$\min_{j\in S} {2\times d(i,j)+a_j}$ 考虑多源多汇最短路会超时,换个角度考虑每个$j$,如果$j=i$,那么答案为$ ...

  6. 【构建二叉树】02根据中序和后序序列构造二叉树【Construct Binary Tree from Inorder and Postorder Traversal】

    我们都知道,已知中序和后序的序列是可以唯一确定一个二叉树的. 初始化时候二叉树为:================== 中序遍历序列,           ======O=========== 后序遍 ...

  7. Debian for ARM

    /************************************************************************* * Debian for ARM * 说明: * ...

  8. QT之在QML中使用C++类和对象

    QML其实是对ECMAScript的扩展,融合了Qt object系统,它是一种新的解释性语言,QML引擎虽然由Qt C++实现,但QML对象的运行环境说到底和C++对象的上下文环境是不通的,是平行的 ...

  9. [CJOJ2425][SYZOI Round1]滑稽的树

    cjoj sol 子树转化成dfs序上的区间. 所以就变成了:区间Kth,区间内[a,b]范围内的数有多少个,单点修改 裸的树套树啊. code #include<cstdio> #inc ...

  10. tarjian求lca

    看了好多dalao的博客,就总结一下啦ovo tarjian算法很是神奇,它的作用是求lca.它是一种离线算法. 在线是指输入一个询问输出一个结果. 离线是将询问一次性输入,一起处理. tarjan它 ...