OpenStack 涉及的知識領域極廣
可以說涵蓋了IT基礎設施的所有範圍。計算、存儲、網絡、虛擬化、高可用、安全、備。。。。。。無所不包。
OpenStack 是一個平臺,不是一個具體的實施方案
OpenStack的各個組件都採用Driver的架構,支持各種具體的實現技術。比如 OpenStack 的存儲服務Cinder只定義了上層抽象API,具體的實現交給下面的各種Driver,比如基於LVM的iSCSI Driver,EMC、IBM等商業存儲產品的Driver,或者是開源的分佈式存儲軟件,比如Ceph、GlusterFS的Driver。
正是因爲這種架構上的靈活性,使得初學者在學習OpenStack的時候不會像學習其他具體軟件產品那樣容易上手。
OpenStack 本身是一個分佈式系統
大多數搞 IT 的對分佈式計算都不會太熟悉。直接衝進來會被 OpenStack 繁多的組件以及他們之間的交互方式搞得雲裏霧裏。
雖然 OpenStack 學習曲線比較陡峭,掌握起來難道較大,但 OpenStack 目前已經是 IaaS 雲的事實標準,而且前途一片光明,對於我們搞 IT 的如果能啃下這個骨頭,必定能大大提升自身的競爭力。
寫給誰看
這套教程的目標讀者包括:
OpenStack初學者
學習 OpenStack 也是經歷了一個艱辛曲折的過程。其主要原因在於沒有找到一個系統教授OpenStack的教程,特別是針對初學者。大部分資料都比較分散,對於初學者無法有機地串起來。也正是因爲這個原因,編寫這樣一套教程的想法,能夠讓初學者能夠少走彎路,系統地學習、掌握和實踐 OpenStack。
OpenStack 實施工程師
把自己定位成一個能到一線攻城拔寨的實施工程師。所以這個教程也是針對 OpenStack 的實施人員,讓他們能夠通過學習真正掌握部署OpenStack 的知識、技能以及故障排查技巧。
包含哪些內容?
如下圖,兩大塊:
預備知識
因爲面向初學者,首先會有虛擬化和雲計算的“預備知識”,會介紹 KVM,IaaS 等技術。
OpenStack核心
這是主要內容,包含OpenStack的架構和和各個核心組件。將會通過大量的案例、操作步驟、截圖、日誌來幫助大家理解 OpenStack 各組件是如何工作的。
其目標是讓各位可以根據客戶的需求進行配置和調整。
爲啥叫《玩轉 OpenStack》?
每次的內容只包3-6個知識點,這也是我把教程命名爲《玩轉 OpenStack》的原因。雖然是碎片化推送,但整個教程是系統、連貫和完整的,只是化整爲零了。
虛擬化
OpenStack是雲操作系統,要學習OpenStack,首先需要掌握一些虛擬化和雲計算的相關知識。
虛擬化
虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一臺物理的服務器上可以跑多臺虛擬機,虛擬機共享
物理機的 CPU、內存、IO 硬件資源,但邏輯上虛擬機之間是相互隔離的。
物理機我們一般稱爲宿主機(Host),宿主機上面的虛擬機稱爲客戶機(Guest)。
那麼 Host 是如何將自己的硬件資源虛擬化,並提供給 Guest 使用的呢?
這個主要是通過一個叫做 Hypervisor 的程序實現的。
根據 Hypervisor 的實現方式和所處的位置,虛擬化又分爲兩種:
1型虛擬化和2型虛擬化
1型虛擬化
Hypervisor 直接安裝在物理機上,多個虛擬機在 Hypervisor 上運行。Hypervisor 實現方式一般是一個
特殊定製的 Linux 系統。Xen 和 VMWare 的 ESXi 都屬於這個類型。
2型虛擬化
物理機上首先安裝常規的操作系統,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作爲 OS 上的
一個程序模塊運行,並對管理虛擬機進行管理。KVM、VirtualBox 和 VMWare Workstation 都屬於這個
類型。
理論上講:
1型虛擬化一般對硬件虛擬化功能進行了特別優化,性能上比2型要高;
2型虛擬化因爲基於普通的操作系統,會比較靈活,比如支持虛擬機嵌套。嵌套意味着可以在KVM虛擬機
中再運行KVM。
KVM
下面重點介紹KVM這種2型虛擬化技術。
基本概念
在 x86 平臺上最熱門運用最廣泛的虛擬化方案莫過於 KVM 了。OpenStack 對 KVM 支持得也最好,我
們的教程也理所當然選擇 KVM 作爲 實驗環境的 Hypervisor。
KVM 全稱是 Kernel-Based Virtual Machine。也就是說 KVM 是基於 Linux 內核實現的。
KVM有一個內核模塊叫 kvm.ko,只用於管理虛擬 CPU 和內存。
那 IO 的虛擬化,比如存儲和網絡設備由誰實現呢?
這個就交給 Linux 內核和Qemu來實現。
說白了,作爲一個 Hypervisor,KVM 本身只關注虛擬機調度和內存管理這兩個方面。IO 外設的任務交
給 Linux 內核和 Qemu。
Libvirt
大家在網上看 KVM 相關文章的時候肯定經常會看到 Libvirt 這個東西。Libvirt 是啥?
簡單說就是 KVM 的管理工具。
其實,Libvirt 除了能管理 KVM 這種 Hypervisor,還能管理 Xen,VirtualBox 等。
OpenStack 底層也使用 Libvirt,所以很有必要學習一下。
Libvirt 包含 3 個東西:後臺 daemon 程序 libvirtd、API 庫和命令行工具 virsh
1. libvirtd是服務程序,接收和處理 API 請求;
2. API 庫使得其他人可以開發基於 Libvirt 的高級工具,比如 virt-manager,這是個圖形化的 KVM 管理工具,後面我們也會介紹;
3. virsh 是我們經常要用的 KVM 命令行工具,後面會有使用的示例。
作爲 KVM 和 OpenStack 的實施人員,virsh 和 virt-manager 是一定要會用的。
準備 KVM 實驗環境
KVM 是 OpenStack 使用最廣泛的 Hypervisor,本節介紹如何搭建 KVM 實驗環境
安裝 KVM
上一節說了,KVM 是 2 型虛擬化,是運行在操作系統之上的,所以我們先要裝一個 Linux。Ubuntu、Redhat、CentOS 都可以,這裏我們以 Ubuntu14.04 爲例。
基本的 Ubuntu 操作系統裝好之後,安裝 KVM 需要的包
$ sudo apt-get install qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan
通過這些安裝包我們順便複習一下上一節介紹的 KVM 的相關知識。
1. qemu-kvm 和 qemu-system 是 KVM 和 QEMU 的核心包,提供 CPU,內存和 IO 虛擬化功能
2. libvirt-bin 就是 libvirt,用於管理 KVM 等 Hypervisor
3. virt-manager 是 KVM 圖形化管理工具
4. bridge-utils 和 vlan,主要是網絡虛擬化需要,KVM 網絡虛擬化的實現是基於 linux-bridge 和 VLAN,後面我們會討論。
Ubuntu 默認不安裝圖形界面,手工安裝一下
sudo apt-get install xinit
sudo apt-get install gdms
udo apt-get install kubuntu-desktop
apt 默認會到官網上去下載安裝包,速度很慢,我們可以使用國內的鏡像站點。
配置/etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
然後執行下面命令更新安裝包 index
# apt update
Redhat 和 CentOS 安裝相對簡單,安裝過程中選擇虛擬化和圖形組件就可以了。
小竅門:Ubuntu 默認是不允許 root 通過 ssh 直接登錄的,可以修改 /etc/ssh/sshd_config,設置
PermitRootLogin yes
然後重啓 ssh 服務即可
# service ssh restartssh stop/waitingssh start/running, process 27639
在虛擬機上做實驗
作爲 2型虛擬化的 KVM,是支持虛擬化嵌套,這使得我們可以在虛擬機中實驗 KVM。 比如我在 VMWare Workstation 中安裝了一個 Ubuntu14.04 的虛擬機,爲了能讓 KVM 能創建 嵌套的虛機,要把 CPU 的虛擬化功能打開。如下圖在 VMWare 中設置以下 CPU 的模式
Ubuntu 啓動後,用以下命令確認 CPU 支持虛擬化
# egrep -o '(vmx|svm)' /proc/cpuinfo# vmx
確認 Libvirtd 服務已經啓動
# service libvirt-bin statuslibvirt-bin start/running, process 1478
啓動第一個 KVM 虛機
本節演示如何使用 virt-manager 啓動 KVM 虛機。
首先通過命令 virt-manager 啓動圖形界面
# virt-manager
點上面的圖標創建虛機
給虛機命名爲 kvm1,這裏選擇從哪裏啓動虛機。如果是安裝新的 OS,可以選擇第一項。如果已經有安裝好的鏡像文件,
選最後一項(如上圖)
接下來需要告訴 virt-manager 鏡像的位置。
點擊 “Browser”
在我的系統中存放了一個 cirros-0.3.3-x86_64-disk.img 鏡像文件 。cirros 是一個很小的 linux 鏡像,非常適合測試用。大家可以到 http://download.cirros-cloud.net/ 下載,然後放到 /var/lib/libvirt/p_w_picpaths/ 目錄下,這是 KVM 默認查找鏡像文件的地方。
爲虛擬機分配 CPU 和內存
點擊 “Forward”, 再確認一下信息,就可以啓動虛機了。
virt-manager 會打開虛機 kvm1 的控制檯窗口,可以看到啓動情況
virt-manager 可以對虛機進行各種管理操作,界面直觀友好,很容易上手。 同時我們也可以用命令 virsh 管理虛機,比如查看宿主機上的虛機
root@ubuntu:~# virsh list
Id Name State
--------------------------------
8 kvm1 running
至此,第一個虛機已經跑起來了,採用的都是默認設置,後面我們會逐步討論有關虛