不僅是安裝,Kolla 讓 OpenStack 運維變簡單

使用 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,鏡像的文件格式是 qcow2tcp

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 系統也不須要不少內存,咱們就建立一個迷你的規格,

  • 1 vCPU
  • 512 MB 內存
  • 1 GB 存儲

知足測試便可。

新建網絡

Kolla 部署環境時,已經默認配置了 VxLAN 類型的隧道網絡,咱們直接建立租戶網絡便可。

建立租戶網絡

還記得咱們安裝系統時的第 2 塊網卡麼,那是專門給 Neutron 的外部網絡準備的,本次實驗咱們暫時還用不到。

新建實例

而後開始新建實例,若是不出意外會遇到以下錯誤:

虛機建立錯誤

建立失敗~~ 接下來讓咱們去後臺檢查並解決。

這裏有可能會遇到另外一個問題,錯誤日誌會顯示消息超時,錯誤緣由是 nova-scheduler 服務在系統重啓後有必定概率會啓動失敗,請參考下面的指導,重啓服務便可。

檢查服務狀態

在日常部署的環境裏,OpenStack 的各個服務安裝後會在系統裏註冊爲後臺服務,咱們查看服務的命令是和操做系統相關,例如:

$ systemctl status openstack-nova-api

使用了 kolla 部署的環境,全部的服務都是在 docker 容器中啓動的,咱們直接查看容器的狀態就能夠了:

$ sudo docker ps

docker ps

能夠看到每一個服務都對應到一個容器。好比 nova 有幾個子服務,nova-apinova-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

nova-compute 日誌

從錯誤提示能夠看到,是由於 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 的大體處理流程是這樣的:

  1. 把這個目錄掛載到容器的 /var/lib/kolla/config_files 目錄
  2. 在容器的啓動腳本中加了處理配置的腳本:kolla_set_configs
  3. 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站看視頻

若是看完本文對你有幫助,請 關注點贊分享 來一波。

謝謝!

相關文章
相關標籤/搜索