Kolla Ocata版本安裝及鏡像製做流程


一、關閉宿主機firewalld
systemctl disable firewalld
systemctl stop firewalldhtml

二、配置selinux爲disable,不然建立的實例網絡不通
臨時關閉:
[root@kf-kolla kolla]# getenforce
Enforcing
[root@kf-kolla kolla]# setenforce 0
[root@kf-kolla kolla]#getenforce
Permissivehtml5

永久關閉:
[root@kf-kolla kolla]# vim /etc/selinux/config
SELINUX=enforcing 改成 SELINUX=disabled
重啓服務,執行reboot命令
查看配置後的狀態
[root@kf-kolla kolla]# getenforce
Disabledpython

三、更新安裝包
[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.3linux

四、安裝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
EOFgit

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 78d1802github

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共享掛載
EOFdocker

4)增長一個阿里雲的鏡像加速服務.這樣鏡像下載會更快一些
配置 Docker 加速器
把mirror 的配置添加到 Docker daemon的啓動參數中
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hn3vy3ry.mirror.aliyuncs.com"]
}
EOFjson

5)啓動docker服務
[root@kf-kolla kolla]#systemctl daemon-reload&&systemctl enable docker &&systemctl start dockervim

五、在kolla4.0.1之後,若是未設置IP路由轉發功能轉發,不然在編譯時會有明確告警提示
永久的修改
vi /etc/sysctl.conf
把net.ipv4.ip_forward = 0
改爲net.ipv4.ip_forward = 1
若是此文件中沒有這個選項則將其添加上就行。
而後執行命令:
[root@kf-kolla kolla]#sysctl -pcentos

若是臨時修改可使用echo 「1」>/proc/sys/net/ipv4/ip_forword

六、下載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 .

七、製做鏡像
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

八、遇到的一些坑
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爲基礎鏡像,進行服務的部署,配置等,並設定啓動入口,以及服務必要的依賴

相關文章
相關標籤/搜索