記錄下kolla-build鏡像時,遇到的一些問題,既為了方便自己以后問題的查找,也為了幫助別人避免踩這些坑。遇到的問題會持續更新在博客里面。
問題1:使用的kolla 版本是ocata版本,本地已經搭建好yum源,並且在以前制作鏡像的時候,一直是好的,今天再次編譯鏡像,一直報如下的錯誤
INFO:kolla.image.build.base:---> Package pciutils-libs.x86_64 0:3.5.1-3.el7 will be installed
INFO:kolla.image.build.base:---> Package perl-HTTP-Tiny.noarch 0:0.033-3.el7 will be installed
INFO:kolla.image.build.base:---> Package perl-parent.noarch 1:0.225-244.el7 will be installed
INFO:kolla.image.build.base:---> Package sysvinit-tools.x86_64 0:2.88-14.dsf.el7 will be installed
INFO:kolla.image.build.base:--> Finished Dependency Resolution
INFO:kolla.image.build.base:Error: Package: 7:device-mapper-event-1.02.146-4.el7.x86_64 (base)
INFO:kolla.image.build.base: Requires: device-mapper = 7:1.02.146-4.el7
INFO:kolla.image.build.base: Installed: 7:device-mapper-1.02.149-10.el7_6.2.x86_64 (@Updates)
INFO:kolla.image.build.base: device-mapper = 7:1.02.149-10.el7_6.2
INFO:kolla.image.build.base: Available: 7:device-mapper-1.02.146-4.el7.x86_64 (base)
INFO:kolla.image.build.base: device-mapper = 7:1.02.146-4.el7
INFO:kolla.image.build.base:
INFO:kolla.image.build.base: You could try using --skip-broken to work around the problem
INFO:kolla.image.build.base: You could try running: rpm -Va --nofiles --nodigest
原因分析:遇到這個問題的時候,一開始以為自己的yun源出現了問題,所以去本地yum源里面去查找是否有device-mapper-event-1.02.146-4.el7.x86_64這個rpm包,在base/update里面,檢查了一遍都存在這個包。后來懷疑是centos基礎鏡像有問題,就使用docker run -it centos啟動了一個容器,在容器里面使用rpm -qa |grep device命令查看的時候,發現系統里面安裝了device-mapper-1.02.149-10.el7_6.2.x86_64。kolla build編譯進行需要的是device-mapper-event-1.02.146-4.el7.x86_64這個rpm包,但是系統已經安裝了149的版本,造成了這種問題。處理方式時,幸虧以前搭建的kolla build服務器還在,把對應的centos基礎鏡像拷貝過來,導入到該環境里,啟動一個容器以后,再次檢查他的devcie相關包,發現確實是146的版本,所以以前的編譯沒有問題。
[root@localhost base]# docker run -it 75835a67d134 /bin/bash [root@730fd71696a2 /]# rpm -qa |grep device device-mapper-1.02.146-4.el7.x86_64 device-mapper-libs-1.02.146-4.el7.x86_64 [root@730fd71696a2 /]#
導入基礎centos鏡像以后,在編譯鏡像時,使用特定的私有倉庫中的基礎鏡像
kolla-build -b centos --base-tag 7 --base-image 172.19.146.34:5001/centos/centos --tag ocata --type source keystone
問題的根因是kolla-build -b centos --base-tag 7 --tag ocata --type source keystone命令行執行的時候,每次都去官網拉去一遍centos基礎鏡像,再進行下一步的操作。而官網的centos基礎鏡像幾乎每天都有新的rpm更新,導致與本地的yum源不匹配,造成異常
教訓:在kolla-build鏡像的時候,搭建自己的yum源,並且成功編譯出鏡像時,一定要把基礎鏡像保存一份,以后一直用這個基礎鏡像,否則一直拉取官網的最新鏡像,在編譯openstack鏡像時,會造成各種異常的情況,並且一直更新yum源也很費事
問題2:kolla-ansible -i ./all-in-one pull 編譯的鏡像時,一直提示如下的錯誤
TASK [common : include] ******************************************************************************************************************************* included: /usr/share/kolla-ansible/ansible/roles/common/tasks/bootstrap.yml for localhost TASK [common : Creating log volume] ***************************************************************************************************************** fatal: [localhost]: FAILED! => {"changed": true, "msg": "'Traceback (most recent call last):\\n
File \"/tmp/ansible_7mwoMR/ansible_module_kolla_docker.py\", line 802, in main\\n dw = DockerWorker(module)\\n
File \"/tmp/ansible_7mwoMR/ansible_module_kolla_docker.py\", line 221, in __init__\\n self.dc = get_docker_client()(**options)\\n
File \"/usr/lib/python2.7/site-packages/docker/client.py\", line 99, in __init__\\n self._version = self._retrieve_server_version()\\n
File \"/usr/lib/python2.7/site-packages/docker/client.py\", line 124, in _retrieve_server_version\\n
\\'Error while fetching server API version: {0}\\'.format(e)\\n
DockerException: Error while fetching server API version: Timeout value connect was Timeout(connect=60, read=60, total=None),
but it must be an int, float or None.\\n'"} to retry, use: --limit @/usr/share/kolla-ansible/ansible/site.retry PLAY RECAP ******************************************************************************************************************************************* localhost : ok=19 changed=8 unreachable=0 failed=1
原因分析:第一次拉取不管是官方鏡像還是自己源碼編譯的鏡像,都能成功的部署起來,但是執行命令kolla-ansible destroy --include-images --yes-i-really-really-mean-it把
部署的容器和緩存的鏡像去掉,重新部署的時候,一直報以前的錯誤。后來谷歌了一下,是requests版本太高的問題。方法是把requests的版本降到requests==2.17.3就可以了
過程如下:
[root@controller ~]# pip list |grep requests
requests 2.19.1
requestsexceptions 1.4.0
[root@controller ~]#
[root@controller ~]# pip uninstall requests
Uninstalling requests-2.19.1:
Would remove:
/usr/lib/python2.7/site-packages/requests-2.19.1.dist-info/*
/usr/lib/python2.7/site-packages/requests/*
Would not remove (might be manually added):
/usr/lib/python2.7/site-packages/requests/packages/__init__.py
/usr/lib/python2.7/site-packages/requests/packages/__init__.pyo
Proceed (y/n)? y
Successfully uninstalled requests-2.19.1
[root@controller ~]#
[root@controller ~]# pip install requests==2.17.3
備注:requests 2.18.xx 系列也有這個問題,為了保險起見,最好直接使用requests==2.17.3或者使用2.20.1
[root@localhost ~]# pip list |grep requests requests 2.20.1 requestsexceptions 1.4.0 [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# python Python 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import docker >>> c = docker.Client(base_url='unix://var/run/docker.sock', version='1.15', timeout=2.0) >>> l = c.containers(all=True) >>> quit() [root@localhost ~]#
問題3:kolla-ansible部署完以后,執行openstack 命令報如下錯誤
[root@controller ~]# source /etc/kolla/admin-openrc.sh [root@controller ~]# openstack service list Traceback (most recent call last): File "/usr/bin/openstack", line 7, in <module> from openstackclient.shell import main File "/usr/lib/python2.7/site-packages/openstackclient/shell.py", line 23, in <module> from osc_lib import shell File "/usr/lib/python2.7/site-packages/osc_lib/shell.py", line 33, in <module> from osc_lib.cli import client_config as cloud_config File "/usr/lib/python2.7/site-packages/osc_lib/cli/client_config.py", line 18, in <module> from openstack.config import exceptions as sdk_exceptions File "/usr/lib/python2.7/site-packages/openstack/__init__.py", line 17, in <module> import openstack.connection File "/usr/lib/python2.7/site-packages/openstack/connection.py", line 166, in <module> from openstack import cloud as _cloud File "/usr/lib/python2.7/site-packages/openstack/cloud/__init__.py", line 20, in <module> from openstack.cloud.openstackcloud import OpenStackCloud File "/usr/lib/python2.7/site-packages/openstack/cloud/openstackcloud.py", line 49, in <module> from openstack.cloud import _utils File "/usr/lib/python2.7/site-packages/openstack/cloud/_utils.py", line 28, in <module> from decorator import decorator ImportError: No module named decorator
原因是 decorator包為3.4.0版本太低,導致,升級完以后,就沒有問題了
[root@controller ~]# pip list |grep decorator decorator 3.4.0 [root@controller ~]# pip install -U decorator Looking in indexes: http://172.19.146.225:8081/ Collecting decorator Downloading http://172.19.146.225:8081/packages/decorator-4.3.0-py2.py3-none-any.whl Installing collected packages: decorator Found existing installation: decorator 3.4.0 Uninstalling decorator-3.4.0: Successfully uninstalled decorator-3.4.0 Successfully installed decorator-4.3.0
問題4:kolla-ansible部署完以后,執行openstack 命令報如下錯誤
Traceback (most recent call last): File "/usr/bin/openstack", line 7, in <module> from openstackclient.shell import main File "/usr/lib/python2.7/site-packages/openstackclient/shell.py", line 22, in <module> from osc_lib.api import auth File "/usr/lib/python2.7/site-packages/osc_lib/api/auth.py", line 22, in <module> from osc_lib.i18n import _ File "/usr/lib/python2.7/site-packages/osc_lib/i18n.py", line 16, in <module> import oslo_i18n File "/usr/lib/python2.7/site-packages/oslo_i18n/__init__.py", line 14, in <module> from ._gettextutils import * File "/usr/lib/python2.7/site-packages/oslo_i18n/_gettextutils.py", line 24, in <module> from babel import localedata ImportError: No module named babel
原因是babel包 為2.3.4版本太低導致,升級完包以后,就可以了
[root@controller ~]# pip unintall Babel
[root@controller ~]# pip install Babel Looking in indexes: http://172.19.146.50:8081/ Requirement already satisfied: Babel in /usr/lib/python2.7/site-packages (2.3.4) Requirement already satisfied: pytz in /usr/lib/python2.7/site-packages (from Babel) (2016.10) [root@controller ~]# pip install Babel==2.6.0 Looking in indexes: http://172.19.146.50:8081/ Collecting Babel==2.6.0
問題5:有時升級包時出現如下錯誤
[root@controller ~]# pip install -U wrapt Looking in indexes: http://172.19.146.225:8081/simple/ Collecting wrapt Downloading http://172.19.146.225:8081/packages/simple/wrapt/wrapt-1.10.11.tar.gz Installing collected packages: wrapt Found existing installation: wrapt 1.10.8 Cannot uninstall 'wrapt'. 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.
解決方法:
[root@controller ~]# pip install --ignore-installed -U wrapt
Looking in indexes: http://172.19.146.225:8081/simple/
Collecting wrapt
Downloading http://172.19.146.225:8081/packages/simple/wrapt/wrapt-1.10.11.tar.gz
Installing collected packages: wrapt
Running setup.py install for wrapt ... done
Successfully installed wrapt-1.10.11
[root@controller ~]#