寫在最前面
這是一個 OpenStack 教程,有下面兩個特點:
? 系統講解 OpenStack。從架構到各個組件;從整體到細節逐一討論。
? 重實踐并兼顧理論。主要從實際操作的角度帶著大家學習 OpenStack。
為啥要寫這個,簡單回答是:
因為 OpenStack 學習難度大,但如果掌握了,價值會很大。先做一個自我介紹吧。本人網名CloudMan,在 IT 這個行當已經摸爬滾打了十多年,2005年之前是搞上層應用開發的,那時候 Java 比較火,所以 J2EE 相關的技術搞得比較多。后來入職一家大型IT公司,公司的產品從中間件到操作系統,從服務器到存儲,從虛擬化到云計算都有涉及。本人所在的部門是專門做 IT 基礎設施實施服務的,項目涉及服務器、存儲、網絡、虛擬化、云各個方面,而且這個部門的重要任務是為公司在IT市場最新和最熱門的領域開疆擴土。比如前幾年的虛擬化,這兩年的云計算和大數據。可以說部門的這個定位非常符合我的技術偏好。我對新技術長期保持著濃厚的興趣和學習熱情,所以在這個部門一待就是十幾年,而且一直搞技術,雖然現在的頭銜是架構師,平時還是一直堅持實際動手操作,否則會沒有安全感。好,現在回到OpenStack這個主題。
本人是在2013年開始接觸 OpenStack,雖然具備比較扎實的技術功底,在經過一段時間的學習后,還是感覺 OpenStack 這個東西上手不太容易,個人認為有以下幾個原因:
1. OpenStack 涉及的知識領域極廣可以說涵蓋了IT基礎設施的所有范圍,計算、存儲、網絡、虛擬化、高可用、安全、災備無所不包,即便是像我這種每天都在這個領域工作的人也感覺壓力頗大。
2. OpenStack 是一個平臺,不是一個具體的實施方案OpenStack的各個組件都采用Driver的架構,支持各種具體的實現技術。比如 OpenStack 的存儲服務Cinder只定義了上層抽象API,具體的實現交給下面的各種Driver,比如基于LVM的iSCSI Driver,EMC、IBM等商業存儲產品的Driver,或者是開源的分布式存儲軟件,比如Ceph、GlusterFS的Driver。正是因為這種架構上的靈活性,使得初學者在學習OpenStack的時候不會像學習其他具體軟件產品那樣容易上手。
3. OpenStack 本身是一個分布式系統大多數搞 IT 的對分布式計算都不會太熟悉,直接沖進來會被 OpenStack 繁多的組件以及它們之間的交互方式搞得云里霧里。雖然 OpenStack 學習曲線比較陡峭,掌握起來難度較大,但 OpenStack 目前已經是 IaaS 云的事實標準,而且前途一片光明,對于我們搞 IT 的如果能啃下這個骨頭,必定能大大提升自身的競爭力。
寫給誰看
這套教程的目標讀者包括:
1. OpenStack初學者我學習OpenStack也是經歷了一個艱辛曲折的過程,其主要原因在于沒有找到一個系統講解OpenStack的教程,大部分資料都比較分散,對于初學者無法有機地串起來。也正是因為這個原因,讓我萌發了編寫這樣一套教程的想法,能夠讓初學者少走彎路,系統地學習、掌握和實踐 OpenStack。
2. OpenStack 實施工程師之前說了,我在公司的職位是架構師,但骨子里我更把自己定位成一位能到一線攻城拔寨的實施工程師。所以這個教程也是針對 OpenStack 的實施人員,讓他們能夠通過學習真正掌握部署OpenStack 的知識、技能以及故障排查技巧。3. 我自己寫這個教程同時也是對自己這幾年學習和實踐 OpenStack 的一個總結。我覺得:對于知識,只有把它寫出來并能夠讓其他人理解才能真正說明自己掌握了這項知識。
包含哪些內容
本書兩大塊內容。
1. 預備知識。因為面向初學者,首先會有虛擬化和云計算的預備知識,會介紹 KVM、IaaS 等技術。
2. OpenStack核心。這是主要內容,包含OpenStack的架構和各個核心組件。將會通過大量的案例、操作步驟、截圖、日志來幫助大家理解 OpenStack 各組件是如何工作的。其目標是讓各位可以根據客戶的需求進行配置和調整。
怎樣的編寫方式
在當下這個共享經濟時代,我覺得應該用互聯網的方式來分享知識和心得。這個教程會通過我的微信公眾號(cloudman6)每周一、周三、周五定期發布。用公眾號我覺得有兩個好處:(1)可以隨時隨地查看和瀏覽已推送的內容。(2)可以通過公眾號跟我互動,提出問題和建議 。
為啥叫《每天5分鐘玩轉 OpenStack》
為了降低學習的難度并且考慮到移動端碎片化閱讀的特點,每次推送的內容大家只需要花5分鐘就能看完(注意,這里說的是看完,有時候要完全理解可能需要更多時間哈),每次的內容只包含1~3個知識點,這也是我把教程命名為《每天5分鐘玩轉 OpenStack》的原因。雖然是碎片化推送,但整個教程是系統、連貫和完整的,只是化整為零了。好了,今天這5分鐘算是開了個頭,下面我們正式開始玩轉 OpenStack。
編 者
2016年10月
CloudMan,云計算技術專家,就職于國際知名 IT 企業,負責OpenStack相關項目的規劃和實施。十多年一直專注 IT 前沿技術的鉆研與實踐,目前重點研究OpenStack、容器技術棧、DevOps等技術領域。
第一篇 預備知識
第 1 章 虛擬化 2
1.1
1型虛擬化 2
1.2
2型虛擬化 2
1.3
KVM 3
1.3.1
基本概念 3
1.3.2
KVM實操 4
1.4
KVM 虛擬化原理 11
1.4.1
CPU 虛擬化 11
1.4.2
內存虛擬化 12
1.4.3
存儲虛擬化 13
1.5 網絡虛擬化 19
1.5.1
Linux Bridge 19
1.5.2
VLAN 28
1.5.3
Linux Bridge VLAN = 虛擬交換機 35
第 2 章 云 計 算 36
2.1 基本概念 36
2.2 云計算和
OpenStack 38
第二篇 OpenStack 核心
第 3 章 OpenStack 架構 41
3.1
Conceptual Architecture 41
3.2
Logical Architecture 42
第 4 章 搭建實驗環境 45
4.1 部署拓撲 45
4.2 物理資源需求 46
4.3 網絡規劃 47
4.4 部署 DevStack
47
第 5 章 Identity ServiceKeystone 55
5.1 概念 55
5.1.1
User 55
5.1.2
Credentials 57
5.1.3
Authentication 57
5.1.4
Token 57
5.1.5
Project 58
5.1.6
Service 59
5.1.7
Endpoint 60
5.1.8
Role 60
5.2 通過例子學習 62
5.2.1
第1步
登錄 62
5.2.2
第2步
顯示操作界面 62
5.2.3
第3步
顯示image列表 63
5.2.4
Troubleshoot 64
第 6 章 Image ServiceGlance 65
6.1 理解 Image 65
6.2 理解 Image
Service 66
6.3
Glance 架構 66
6.4
Glance 操作 69
6.4.1
創建 image 70
6.4.2
刪除 image 72
6.5 如何使用
OpenStack CLI 74
6.6 如何
Troubleshooting 77
第 7 章 Compute ServiceNova 79
7.1
Nova架構 80
7.1.1
架構概覽 80
7.1.2
物理部署方案 82
7.1.3
從虛機創建流程看 nova-* 子服務如何協同工作 84
7.1.4
OpenStack 通用設計思路 85
7.2
Nova 組件詳解 88
7.2.1
nova-api 88
7.2.2
nova-scheduler 90
7.2.3
nova-compute 97
7.2.4
nova-conductor 104
7.3 通過場景學習 Nova
105
7.3.1
看懂 OpenStack 日志 105
7.3.2
Launch 108
7.3.3
Shut Off 108
7.3.4
Start 112
7.3.5
Soft/Hard Reboot 114
7.3.6
Lock/Unlock 114
7.3.7
Terminate 115
7.3.8
Pause/Resume 116
7.3.9
Suspend/Resume 118
7.3.10
Rescue/Unrescue 119
7.3.11
Snapshot 122
7.3.12
Rebuild 125
7.3.13
Shelve 128
7.3.14
Unshelve 130
7.3.15
Migrate 133
7.3.16
Resize 139
7.3.17
Live Migrate 144
7.3.18
Evacuate 150
7.3.19
Instance 操作總結 154
7.4 小節 156
第 8 章 Block Storage Service Cinder 157
8.1 理解 Block
Storage 157
8.2 理解 Block
Storage Service 157
8.2.1
Cinder 架構 158
8.2.2
物理部署方案 159
8.2.3
從volume創建流程看cinder-*子服務如何協同工作 160
8.2.4
Cinder 的設計思想 161
8.2.5
Cinder組件詳解 163
8.2.6
通過場景學習 Cinder 170
8.3 小節 220
第 9 章 Networking Service Neutron 221
9.1
Neutron 概述 221
9.1.1
Neutron 功能 221
9.1.2
Neutron 網絡基本概念 222
9.2
Neutron 架構 224
9.2.1
物理部署方案 227
9.2.2
Neutron Server 228
9.2.3
Neutron 如何支持各種 network provider 229
9.2.4
ML2 Core Plugin 231
9.2.5
Service Plugin / Agent 234
9.2.6
小結 235
9.3 為Neutron 準備物理基礎設施 237
9.3.1
1控制節點 1 計算節點的部署方案 237
9.3.2
配置多個網卡區分不同類型的網絡數據 238
9.3.3
網絡拓撲 239
9.3.4
安裝和配置節點 240
9.4
Linux Bridge 實現 Neutron 網絡 244
9.4.1
配置 linux-bridge mechanism driver 244
9.4.2
初始網絡狀態 245
9.4.3
了解Linux Bridge 環境中的各種網絡設備 247
9.4.4
local network 248
9.4.5
flat network 262
9.4.6
DHCP 服務 270
9.4.7
vlan network 274
9.4.8
Routing 285
9.4.9
vxlan network 307
9.4.10
Securet Group 321
9.4.11
Firewall as a Service 328
9.4.12
Load Balancing as a Service 337
9.5
Open vSwitch 實現 Neutron 網絡 358
9.5.1
網絡拓撲 358
9.5.2
配置 openvswitch mechanism driver 359
9.5.3
初始網絡狀態 360
9.5.4
了解 Open vSwitch 環境中的各種網絡設備 362
9.5.5
local network 362
9.5.6 flat network 377
9.5.7
vlan network 386
9.5.8
Routing 399
9.5.9
vxlan network 411
9.6 總結 421
寫在最后 422