1. 程式人生 > >使用kolla-ansible搭建安裝OpenStack Tacker開發環境

使用kolla-ansible搭建安裝OpenStack Tacker開發環境

在ETSI NFV ISG的參考模型中,MANO包含三大元件:NFVO、VNFM和VIM。由於ETSI標準化程序遠落後於開源組織及裝置製造商各自的開發進度,雖然各大開源MANO,如OSM、ONAP、OpenBaton等,都以ETSI的模型作為參考,但在參考點的定義和實現上仍然各自為戰,實際上目前不能做到完全解耦,各廠商的MANO在某種程度上仍然是“軟煙囪”。縱然如此,各廠商對於VIM的選擇上,卻不約而同的選擇了OpenStack,OpenStack成為VIM的事實標準。從OpenStack Neutron專案拆分出來的Tacker專案也成為提供NFVO+VNFM解決方案的明星專案,OpenStack正全方位切入電信市場。
由於工作需要,我嘗試了多種OpenStack的安裝方式,比如前面文章講過的RDO,以及DevStack,還有本文要介紹的Kolla-ansible專案。RDO並非OpenStack的官方專案,且只支援Redhat系列OS,而用過DevStack的同學可能又為其安裝過程的煩雜易錯且不易維護而苦惱。容器和OpenStack的結合正是大勢所趨,不論生產環境還是開發環境,容器化部署帶來的優勢都是誘人的。Kolla-ansible在Pike版本中開始支援容器化的開發環境搭建,但目前僅包括heat等少數幾個專案,其它專案還不支援,本文在結合工作實際的基礎上,介紹使用Kolla-ansible來搭建Tacker開發環境。
主機環境是OSX,安裝的virtualbox,上面執行CentOS 7虛擬機器,4核、8G記憶體、30G硬碟。在網路選項上,增加2個介面,型別分別是NAT、Host-only和Bridged,NAT用於虛擬機器訪問外網,Host-only用於從OSX訪問虛擬機器。虛擬機器安裝好後,使用ip addr命令檢視各介面狀態,確保都已經up。如果安裝後主機名是bogon,使用 hostnamectl set-hostname xxx 命令來設定主機名。

先關掉防火牆和SELinux 

systemctl disable firewalld
vi /etc/sysconfig/selinux
SELINUX=disabled

重啟系統 

安裝epel源
yum install epel-release
安裝並升級pip
yum install python-pip
pip install -U pip
安裝依賴
yum install python-devel libffi-devel gcc openssl-devel libselinux-python
安裝ansible
pip install -U ansible
安裝docker
curl -sSL https://get.docker.io | bash
CentOS 7開始用Systemd取代之前的SysVinit作為初始化系統,Ubuntu系統用的是upstart,參考官網配置時注意區分。設定docker自啟動
systemctl enable docker
systemctl start docker
安裝docker python library
pip install -U docker
在實際多node部署時,時間同步很重要,但這裡是all-in-one環境,所以NTP不是必須的。配置時間同步服務
yum install ntp
systemctl enable ntpd.service
systemctl start ntpd.service
強制同步
ntpd -gq
設定時區
timedatectl set-timezone Asia/Shanghai
修改時區的命令實際上是建立了一個連結檔案
[[email protected] ~]# ll  /etc/localtime
lrwxrwxrwx. 1 root root 35 Dec  8 17:20 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
按照官網說法,docker需要設定MountFlags為shared,否則neutron-dhcp-agent會部署失敗
# Create the drop-in unit directory for docker.service
mkdir -p /etc/systemd/system/docker.service.d

# Create the drop-in unit file
tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared
EOF
使用pip安裝kolla-ansible
pip install kolla-ansible
複製配置檔案global.yml和password.yml到/etc/kolla/,global.yml是Kolla-ansible最主要的配置檔案,password.yml包含keystone和資料庫的全部密碼。
cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/
複製ansible的inventory檔案到當前目錄,inventory檔案告訴ansible要在哪些node上執行命令,這裡有all-in-one和multinode兩種
cp /usr/share/kolla-ansible/ansible/inventory/* .
使用下面的命令檢查當前主機是否支援硬體加速,由於是在virtualbox的虛機上安裝,所以這裡返回是0
egrep -c '(vmx|svm)' /proc/cpuinfo
在這種情況下要配置libvirt使用QEMU,而不能是KVM
mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type = qemu
cpu_mode = none
EOF

Kolla-ansible擁有快速搭建或重建整個OpenStack的能力,有人說十幾分鍾就可以搭建完成。但是這有一個重要的前提,即所有Kolla image都已經ready,否則在天朝直接從官網下載docker image很容易讓人怨從心中起,惡向膽邊生,安裝過程大多數錯誤都是由於pull image引起的,所以推薦使用本地docker registry。考慮到今後可能多次重建整個虛機,我將docker registry搭建在OSX上,而不在虛機中。步驟:1. 在OSX上從官網下載registry壓縮包
wget https://tarballs.openstack.org/kolla/images/centos-source-registry-pike.tar.gz
mkdir /Users/alexli/kolla_registry
sudo tar xzf centos-binary-registry-ocata.tar.gz -C /Users/alexli/kolla_registry
2. 在OSX上下載Kolla原始碼,並修改啟動指令碼
git clone https://github.com/openstack/kolla
vi tools/start-registry
#!/bin/bash

docker run -d \
    --name registry \
    --restart=always \
    -p 5000:5000 \
    -v /Users/alexli/kolla_registry:/var/lib/registry \
    registry:2
3.在OSX上啟動registry,這裡的前提是OSX上已經裝好了docker
cd kolla
tools/start-registry
檢視registry,192.168.56.1是OSX上的地址,也是虛機的閘道器地址
curl -X GET http://192.168.56.1:5000/v2/_catalog
檢視tag,這裡應該顯示的是5.0.1
curl -X GET http://192.168.56.1:5000/v2/lokolla/centos-source-mongodb/tags/list
{"name":"lokolla/centos-source-mongodb","tags":["5.0.1"]}
4.在虛機上配置docker允許連線不安全的registry
vi /etc/sysconfig/docker
INSECURE_REGISTRY="--insecure-registry 192.168.56.1:5000”
5.為避免拉映象時出現“server gave HTTP response to HTTPS client”的錯誤,修改虛機上的配置
vi /etc/docker/daemon.json
{
    "insecure-registries": ["192.168.56.1:5000"] 
}
6.最後統一重啟一下虛擬機器上的docker,讓配置生效
systemctl daemon-reload 
systemctl restart docker
不放心的話,可以手工pull一下image,看看有沒有問題
docker pull 192.168.56.1:5000/lokolla/centos-source-mongodb:5.0.1

下面關鍵的一步,修改global.yml配置檔案,只安裝tacker,其它無關的OpenStack元件不安裝
kolla_install_type: “source”                  #開發用環境,用source
openstack_release: ""                         # 留空,kolla會根據kolla-ansible版本自動填
kolla_internal_vip_address: “192.168.56.101”   
docker_registry: "192.168.56.1:5000"           #剛剛配置的私有registry
Docker_namespace: “lokolla”                    #官網下載的就是這個名字

enable_glance: "no"
enable_haproxy: "no"
enable_keystone: "yes"
enable_mariadb: "yes"
enable_memcached: "yes"
enable_neutron: "no"
enable_nova: "no"
enable_barbican: "yes"
enable_mistral: "yes"
enable_tacker: "yes"
enable_heat: "no"
enable_openvswitch: "no"
enable_horizon: "yes"
enable_horizon_tacker: "{{ enable_tacker | bool }}"

預檢查配置是否有問題
kolla-ansible prechecks -i ./all-in-one
生成密碼,如果覺得生成的密碼太複雜的話,可以手工改password.yml,改為容易記的密碼
kolla-genpw
執行ansible playbook部署OpenStack,這裡花的時間會稍微長點,大概十幾分鍾吧
kolla-ansible deploy -i ./all-in-one
如果一切順利,這是OpenStack所有服務應該已經啟動起來了,ansible結果:
PLAY RECAP ************************************************************************************************************************************
localhost                  : ok=267  changed=57   unreachable=0    failed=0
生成admin-openrc.sh,以後在命令列執行openstack命令之前要先source一下這個檔案,就是更新環境變數。
kolla-ansible post-deploy
安裝openstack命令列
pip install python-openstackclient

到這裡實際上整個ansible部署就已經完成了,下面我們在這個環境基礎上搭建Tacker開發環境。
現在Pike版本的已經支援開發模式,但是目前只支援heat、horizon等幾個專案,要想讓tacker也支援開發模式,其實也很簡單,對照一下heat的ansible配置,修改下面Tacker的3個role檔案。
1.增加變數定義及volume配置,/usr/share/kolla-ansible/ansible/roles/tacker/defaults/main.yml
tacker_services:
  tacker-server:
    container_name: "tacker_server"
    group: "tacker-server"
    enabled: true
    image: "{{ tacker_server_image_full }}"
    volumes:
      - "{{ node_config_directory }}/tacker-server/:{{ container_config_directory }}/:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "{{ kolla_dev_repos_directory ~ '/tacker/tacker:/var/lib/kolla/venv/lib/python2.7/site-packages/tacker' if tacker_dev_mode | bool else '' }}"
      - "kolla_logs:/var/log/kolla/“
…
####################
# Kolla
####################
tacker_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
tacker_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
tacker_dev_mode: "{{ kolla_dev_mode }}”
2.增加clone tacker程式碼的playbook,/usr/share/kolla-ansible/ansible/roles/tacker/tasks/clone.yml
---
- name: Cloning source repositories for development
  git:
    repo: "{{ tacker_git_repository }}"
    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
    update: "{{ tacker_dev_repos_pull }}”
3.將clone程式碼包含在deploy過程中,/usr/share/kolla-ansible/ansible/roles/tacker/tasks/deploy.yml
- include: clone.yml
  when:
    - tacker_dev_mode | bool
    - inventory_hostname in groups['tacker-server’]
4.在global.yml配置檔案最後增加如下配置項
tacker_dev_mode: true
5.停止並刪除tacker server container6.重新執行部署kolla的命令,kolla-ansible -i ./all-in-one deploy,可以看到多了兩個ansible的task
TASK [tacker : include] ***********************************************************************************************************************
included: /usr/share/kolla-ansible/ansible/roles/tacker/tasks/clone.yml for localhost

TASK [tacker : Cloning source repositories for development] ***********************************************************************************
changed: [localhost] 
再檢視/opt
[[email protected] tacker]# ll /opt/stack/
total 4
drwxr-xr-x 13 root root 4096 Dec 16 20:01 tacker
到這裡可以看出,kolla-ansible專案所說的開發環境就是講相關專案的程式碼克隆在host中,然後mount到docker裡,這樣修改host中的程式碼,docker中的程式碼也會改變,當然如果希望生效,還需要重啟docker。清理環境
docker stop $(docker ps -q)
kolla-ansible -i ./all-in-one destroy --yes-i-really-really-mean-it
reboot now
在使用kolla-ansible安裝過程中,遇到各種各樣的問題,簡單記錄一下。1.沒啟動Docker daemon導致錯誤
fatal: [localhost]: FAILED! => {"changed": true, "msg": "'Traceback (most recent call last):\\n  File \"/tmp/ansible_S7JoMg/ansible_module_kolla_docker.py\", line 795, in main\\n    dw = DockerWorker(module)\\n  File \"/tmp/ansible_S7JoMg/ansible_module_kolla_docker.py\", line 218, in __init__\\n    self.dc = get_docker_client()(**options)\\n  File \"/usr/lib/python2.7/site-packages/docker/api/client.py\", line 149, in __init__\\n    self._version = self._retrieve_server_version()\\n  File \"/usr/lib/python2.7/site-packages/docker/api/client.py\", line 176, in _retrieve_server_version\\n    \\'Error while fetching server API version: {0}\\'.format(e)\\nDockerException: Error while fetching server API version: (\\'Connection aborted.\\', error(2, \\'No such file or directory\\'))\\n’"}
2.kolla-ansible版本跟依賴的Jinja2版本不匹配,錯誤提示找不到“equalto” filter。單就這個問題,可以手工將“equalto”替換為“match”。3.keystone的playbook失敗
TASK [keystone : Creating admin project, user, role, service, and endpoint]
CRITICAL keystone [-] Unhandled error: ProgrammingError: (pymysql.err.ProgrammingError) (1146, u\"Table 'keystone.project' doesn't exist\”)
原因是上次keystone任務只執行了一半,mariadb中keystone資料庫建立了,但是沒有表。把keystone資料庫刪除後 重新跑就ok
4.在Horizon中啟動雲主機時,報“No valid host was found”錯誤。檢查nova的計算節點是否工作正常,檢視“主機聚合”中的狀態,通常因為nova scheduler找不到合適的主機5.清理環境時執行下面的命令報錯
docker exec kolla_toolbox openstack --os-interface internal --os-auth-url http://192.168.56.254:35357 --os-identity-api-version 3 --os-project-domain-name default --os-tenant-name admin --os-username admin --os-password xEZhAqFwlM8LPf55OH6a3lTaHa6QV0TYcQcB1lUe  --os-user-domain-name default compute service list
用ip addr看看是否舊環境的介面還被佔著,如果是,重啟host,再部署
6.docker pull image時報“invalid reference format”錯誤查遍網上資料說是要求路徑全部小寫,可是沒有大寫啊。後來終於發現還是由於粗心,pull的路徑寫的不對,對比一下:

錯誤的

docker pull http://192.168.56.1:5000/v2/lokolla/centos-source-mongodb

正確的

docker pull 192.168.56.1:5000/lokolla/centos-source-mongodb:5.0.1

7. cannot import name UnrewindableBodyError

解決辦法

pip uninstall urllib3 
pip install urllib3
8. Hostname has to resolve to IP address of api_interface
修改/etc/hosts,增加
192.168.56.101 localhost

9.  服務啟動失敗

TASK [*** : Running *** bootstrap container]
fatal: [localhost]: FAILED! => {"changed": true, "msg": "Container exited with non-zero return code”}
重新執行deploy,可能是docker pull超時了 

相關推薦

使用kolla-ansible搭建安裝OpenStack Tacker開發環境

在ETSI NFV ISG的參考模型中,MANO包含三大元件:NFVO、VNFM和VIM。由於ETSI標準化程序遠落後於開源組織及裝置製造商各自的開發進度,雖然各大開源MANO,如OSM、ONAP、Op

Vagrant 搭建跨平臺的 PHP 開發環境 (一)安裝 ubuntu 虛擬機器

Vagrant是一個軟體,可以自動化虛擬機器的安裝和配置流程,支援 VirtualBox 、VMware 、AWS 作為虛擬機器以 VirtualBox 為例,步驟如下: Windows 10 系統中 需要關閉 Hyper-v , 小米筆記本中 biso 中找不到 虛擬化配置,關閉 Hyper-v 就可以了

Vagrant 搭建跨平臺的 PHP 開發環境 (一)安裝 ubuntu 虛擬機

刪除 des 添加 ans com 操作系統 nsh list 找不到 Vagrant是一個軟件,可以自動化虛擬機的安裝和配置流程,支持 VirtualBox 、VMware 、AWS 作為虛擬機以 VirtualBox 為例,步驟如下: Windows 10 系統中 需要

IntelliJ IDEA安裝及jsp開發環境搭建

一、前言   現在.net國內市場不怎麼好,公司整個.net組技術轉型,就個人來說還是更喜歡.net,畢竟不是什麼公司都像微軟一樣財大氣粗開發出VS這樣的宇宙級IDE供開發者使用,雙擊sln即可開啟專案,一直想吐槽為嘛java專案只能import。昨天一路踩坑,花了一整

Android Studio 下載、安裝與配置(開發環境搭建)

下載jdk8並安裝. 下載並安裝AndroidStudio。因為anroid.com無法訪問,可以從https://developer.android.google.cn/studio/獲取。 安裝AndroidStudio後,會自動下載Android SDK及其他

Linux新手安裝Ubuntu 16.04之後,如何快速搭建一個舒服的開發環境

然後將下面的程式碼新增多你的~/.bash_檔案中:   export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}   export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+

詳細講解如何在windows下搭建react-native的開發環境(包括在裝置上安裝和執行react-native app )!

  我之前在增加完變數後,react-native命令不起作用了,後來重新安裝react-native解決了此問題. 開啟安裝好的android stdio,然後start一個專案,下一步下一步,然後找到這個按鈕,這個是啟動模擬器的鍵,如果沒有安裝模擬器的話,可以選一個手機型號來下載,找到對應你的電腦的

Ubuntu下安裝C/C++開發環境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C語言開發環境

(1)第一步安裝Eclipse,有兩種方法,使用軟體市場搜尋即可得到,安裝即可 第二種是使用終端安裝,命令如下: sudo su進入root模式 輸入密碼 然後 輸入:sudo apt-get install eclipse  開始安裝!  至此已經完全安裝eclipse

OpenStack horizon開發環境搭建

此文件是在本來安裝了計算節點的機器上實驗的。 cd /home/github 1.取得原始碼: 備份一份 mkdir /home/src pwd /home cp -r /github/horizon   /src cd /home/src/horizon 2.in

基於騰訊雲的Centos6.2系統搭建Apache+Mysql+PHP開發環境

fcm 拓展 php代碼 /var/ 安全 size onf tle php-mysql 搭建環境,我肯定需要先購買騰訊雲服務器的哦! 然後,我們打開SecureCRT 7.3,這是一款可以連接Linux系統的客戶端工具,使用的很方便快捷,要註意的是,若你是Linux系統的

Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux開發環境[2.2]

set clu cto 無法安裝 urn ems water 了解 源代碼管理 Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux開發環境[2.2] 2015-07 北

mac下安裝配置go開發環境

string hello pkg obi cin keyword art ces mac 1、官網下載安裝包(需FQ)   https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2、配置Go環境變量GOPA

利用Docker搭建java項目開發環境

測試 制作 需要 oot tomcat 啟動 分享 http 創建 一、需求 一臺 Ubuntu 16.0.4 LTS ,安裝了Docker服務,Rancher服務,也制作了Tomcat相關的image,接下來我們就來說一下如何快速的構建一個開發環境和測試環境 二、步驟

在windows下搭建React Native Android開發環境

ps1 doc cmd pro oot col exec 包管理工具 ocs 1.登錄 React Native 中文網http://reactnative.cn/docs/0.45/getting-started.html 2.登錄 Chocolatey 下載包管理工具h

【轉】Nodejs學習筆記(一)--- 簡介及安裝Node.js開發環境

ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料   1.深入淺出Node.j

sublime text 搭建anconda的python開發環境遇到問題

ret 問題 conda res nbsp builder too ons python開發 1、Anacondea.sublime-setting 設置 "python_interprete":"/***/python.exe" 2、並且設置Anacondea.sub

搭建安卓測試開發環境

adt1. JDK 32位 or 64位 java -version2. ADT 32位 or 64位 下載後,解壓到某個目錄,並配置環境變量:新建ANDROID_HOMED:\adt-bundle-windows-x86_64-20131030\sdkPath,編輯,在後面添加:%AND

C | C++ 環境搭建 1.Visual Studio 開發環境搭建

visual 環境搭建 studio C | C++ 是我們初級入門的計算機語言之一,現階段用vs環境搭建 第一步: 下載vs軟件,並安裝vs和其幫助軟件MSDN。 在微軟官網下載,或者其他資源。其軟件缺點非開源軟件目前在Win系統搭建。C |

安裝Android Studio開發環境

1-1 path pan style color img 組件 evel 3.3 下載安裝包 中文社區官網 http://android-studio.org/ 目前最新的是2.3.3版本 安裝Android Studio 雙擊安裝 等待安裝包自動解壓

windows7安裝tensorflow-gpu開發環境

www. software 清華大學 jetbrains 清華 數據分析師 數據分析 ftw 數據科學 1、安裝anaconda anaconda想必大家都不陌生,由於網站登不上去,我找到了清華大學的一個開源鏡像,下載地址為http://mirrors.tuna.tsin