使用 kolla 部署的 OpenStack 環境和傳統直接安裝的環境相比較,由於使用了全容器化部署,基本操做上有很大不一樣。對於初學者,操做變得更清晰和更簡單了,可是若是你已經有了必定的經驗,可能反而會不習慣。html
本篇文章就以「建立實例」這個最簡單的任務,帶你掌握最基本最經常使用的操做。docker
在上一篇文章中,咱們把環境搭建完成,登陸以後就結束了。今天的任務就是初步驗證環境的可用性,最直接的辦法莫過於建立一個虛擬機了。shell
這不是一個零基礎的 OpenStack 教程,如下內容假定讀者已有必定的基本操做經驗。json
首先,爲了可以啓動一個虛機,至少須要完成下面的準備工做:api
這些操做都將在 dashboard
上完成,不涉及後臺,因此和其它環境並無什麼不一樣。bash
首先下載一個專門用來測試的迷你 Linux 系統鏡像,CirrOS
,進入下載頁面 後選擇最新的 0.4.0
版本:網絡
針對不一樣的 CPU 架構和使用場景,有不一樣的鏡像格式:架構
點擊直接下載最新的 64 位版本 cirros-0.4.0-x86_64-disk.img,鏡像的文件格式是 qcow2
tcp
qcow2
是鏡像的格式,有時保存爲.img
後綴,可用file
命令查看。ide$ file cirros-0.4.0-x86_64-disk.img cirros-0.4.0-x86_64-disk.img: QEMU QCOW Image (v3), 46137344 bytes
由於咱們在 VirtualBox 虛機中部署的 All-In-One 環境,自己也沒有多少資源可用了,CirrOS
系統也不須要不少內存,咱們就建立一個迷你的規格,
知足測試便可。
Kolla 部署環境時,已經默認配置了 VxLAN
類型的隧道網絡,咱們直接建立租戶網絡便可。
還記得咱們安裝系統時的第 2 塊網卡麼,那是專門給
Neutron
的外部網絡準備的,本次實驗咱們暫時還用不到。
而後開始新建實例,若是不出意外會遇到以下錯誤:
建立失敗~~ 接下來讓咱們去後臺檢查並解決。
這裏有可能會遇到另外一個問題,錯誤日誌會顯示消息超時,錯誤緣由是
nova-scheduler
服務在系統重啓後有必定概率會啓動失敗,請參考下面的指導,重啓服務便可。
在日常部署的環境裏,OpenStack 的各個服務安裝後會在系統裏註冊爲後臺服務,咱們查看服務的命令是和操做系統相關,例如:
$ systemctl status openstack-nova-api
使用了 kolla 部署的環境,全部的服務都是在 docker 容器中啓動的,咱們直接查看容器的狀態就能夠了:
$ sudo docker ps
能夠看到每一個服務都對應到一個容器。好比 nova
有幾個子服務,nova-api
,nova-compute
等,都是獨立的容器。正如我前面說的,相對於覺得的環境,對新手來講,到底一套 OpenStack 系統有哪些服務在運行,可能還不那麼清楚,如今看上去一目瞭然。
注意,服務名是減號
-
鏈接,而容器的名字是用下劃線_
鏈接
大部分狀況下,容器內的服務出現問題,致使容器狀態異常的狀況下,它們都會自動重啓。固然,也可能會有啓動不了的狀況。這時候,使用 docker ps
命令只會顯示已經啓動的容器,不能表明你們都正常,必須加上 -a
選項,列出全部容器:
$ sudo docker ps -a
各個容器看上去沒什麼異常,咱們去檢查一下服務的日誌。
傳統的安裝方式中,每一個服務在 /var/log
目錄下有各自的日誌文件保存路徑,例如 /var/log/nova
如今每一個服務都是一個容器,咱們天然會想到登入到容器裏面,查看相應的日誌文件:
[kolla@control01 ~]$ sudo docker exec -it nova_compute bash (nova-compute)[nova@control01 /]$ cd /var/log/nova/ (nova-compute)[nova@control01 /var/log/nova]$ ls (nova-compute)[nova@control01 /var/log/nova]$ <-- 空的
居然是空的!不過不用着急。咱們不妨先思考下若是日誌文件真的保存在容器中會怎樣?
一個問題,或者說一個業務流程,每每會涉及到多個服務,也就是說,平常在排查問題時,須要查看多個日誌文件。因此能夠想見,像這樣每一個容器逐個進去查看文件,會很是地不方便。
另外,容器的特色之一,就是但願它是無狀態的,咱們可能隨時會從新建立一個容器,若是日誌只是簡單地存在容器裏,那麼每次重建容器,日誌內容也就丟失了。這裏你可能會想到,用 docker volume
不就解決問題了麼。
事實上,kolla
作的更好。它用了更專業日誌收集工具 Fluentd 來彙總全部服務產生的日誌。具體的技術細節咱們之後有空再深刻研究。
如今咱們只須要知道,全部的日誌文件在容器外面就能夠查看,它們集中存放在 /var/log/kolla/
目錄中。
這裏虛機建立失敗的問題,咱們能夠查看 nova-compute
日誌:
vi /var/log/kolla/nova/nova-compute.log
從錯誤提示能夠看到,是由於 kvm
的問題,咱們使用的是虛擬機,因此無法支持這個特性,必須修改一下,使用純軟件的(即 qemu
)虛擬化。
在虛擬機中建立虛機還能夠經過開啓 KVM 嵌套虛擬化的特性來實現,可是 VirtualBox 貌似不支持。
配置文件在容器中的位置和咱們日常環境中的並沒有不一樣:
[root@control01 ~]# docker exec -it nova_compute bash (nova-compute)[nova@control01 /]$ cd /etc/nova/ (nova-compute)[nova@control01 /etc/nova]$ ls api-paste.ini nova.conf policy.json release rootwrap.conf
咱們先按照常規方法修改,將下面的 kvm
修改成 qemu
後保存退出:
(nova-compute)[nova@control01 /]$ cd /etc/nova/ (nova-compute)[nova@control01 /etc/nova]$ vi nova.conf [libvirt] connection_uri = qemu+tcp://10.10.10.1/system virt_type = kvm
改完配置以後的問題是,如何重啓服務讓修改生效呢?
若是你對 docker
比較熟悉的話,應該知道容器裏面是沒有 systemd
的,服務都是在前臺運行。因此不能用下面的命令:
$ sudo systemctl restart openstack-nova-compute
那怎麼去重啓服務呢?
其實很是簡單,直接重啓容器就能夠了!
$ sudo docker restart nova_compute
不過,重啓完容器以後,若是你細心點再去看一看,會發現剛纔的修改消失了!
若是配置有問題,容器啓動可能會失敗,能夠刷幾回
docker ps
命令確保容器的狀態成功。
若是是對 docker
有所理解的話,其實上面直接在容器內修改配置的時候就應該有疑義。若是配置信息僅僅是保存在容器內的話,那容器重建怎麼辦?
因此這裏的問題和日誌文件是相似的,咱們首先想到的確定仍是 docker volume
來實現。不過如今的現象顯然也不太對勁:若是配置文件是存儲在 volume
中,修改成什麼會在容器重啓後失效呢?
實際上,kolla
確實使用 volume
掛載了配置文件,可是並無直接掛載到對應的位置,其中又添加了一次處理,咱們先來看宿主機上配置文件所在的位置:
[root@control01 ~]# cd /etc/kolla/nova-compute [root@control01 nova-compute]# ls config.json nova.conf
注意到其中的 config.json
在容器裏面是看不到的,而 nova.conf
和容器內的是一致的。
kolla 的大體處理流程是這樣的:
/var/lib/kolla/config_files
目錄kolla_set_configs
kolla_set_configs
根據 /var/lib/kolla/config_files/config.json
中的配置來處理配置文件如今看一下 config.json
中的內容,是否是很好理解了:
{ "command": "nova-compute", "config_files": [ { "source": "/var/lib/kolla/config_files/nova.conf", "dest": "/etc/nova/nova.conf", "owner": "nova", "perm": "0600" } ], }
在宿主機下更改 /etc/kolla/nova-compute/nova.conf
,並再次重啓容器,再次建立虛機。此次應該沒有問題了。
查服務:
docker ps -a
查日誌:
cd /var/log/kolla
改配置:
cd /etc/kolla/<service_name>
重啓服務:
docker restart <container_name>
只須要記住這幾個經常使用的操做命令就能夠了,相較於以前須要記憶每一個服務不一樣的名字,是否是方便了不少呢?
更詳細的操做過程能夠去 B站看視頻
若是看完本文對你有幫助,請 關注、點贊、 分享 來一波。
謝謝!