Docker Swarm作為Docker集群原生的容器編排解決方案,是Docker生態系統中的關鍵組件之一。本書涵蓋了Swarm中的發現、調度、高可用、安全和平臺伸縮性等重要主題,能幫助你了解Swarm如何組建包含4700個節點的集群,并掌握Swarm的使用與管理,以及如何使用實現大規模應用的可伸縮。
本地測試環境→大型分布式基礎設施→Swarm內部運作|SwarmKit新特性→大規模部署自動化→公有私有云配置運營Swarm集群→大型生產級應用|大規模容器部署→卷|調度|Libnetwork、安全|平臺伸縮性→與Docker生態無縫整合→無需重構容器應用便可適配其他平臺。具體內容包括:
�6�1 創建并管理任意大小的Swarm Mode集群
�6�1 深入了解迄今為止創建的至大的Swarm集群的幕后,即Swarm 2k和Swarm 3k,分別有2300和4700個節點
�6�1 理解發現機制和Raft
�6�1 在Swarm上部署容器化應用
�6�1 管理AWS、Azure和DigitalOcean上的Swarm集群
�6�1 在Swarm中整合Flocker卷
�6�1 在Openstack Magnum上創建并管理Swarm
歡迎來到《Swarm容器編排與Docker原生集群》一書!這是一本關于容器和分布式系統的書。本書將介紹如何使用原生的Docker工具建模微服務、生成任務、擴大應用程序的規模,以及將容器推送到Docker集群里!一句話來說,本書將討論Docker的編排。 隨著最近Swarm Mode的崛起,以及Docker Engine啟用了Swarm功能,編排Docker的最佳方式其實還是Docker! 聽上去不錯,但是“編排Docker”是什么意思呢?什么是編排?更確切的說法是,什么是管弦樂隊? 管弦樂隊指的是音樂家的全體,它由指揮家指揮,指揮家負責控制節奏、旋律,塑造出音樂的整體。弦樂隊、管樂隊、打擊樂隊、鍵盤樂隊以及其他樂隊都會遵循指揮家的指揮,共同演奏出驚人的交響樂曲,比如貝多芬的《第九交響樂》。 類似地,在容器編排系統里,音樂家是任務,指揮家則是領導者服務(Swarm primitives)。任務并不演奏旋律,或者并不僅僅做這些:更為抽象地說,它們執行一些計算型工作,比如,運行Web服務器。而指揮家——Swarm,則負責它們的預配,它們的可用性,它們的鏈接,它們的擴展。這也就是大家所說的“Docker編排”。
本書講述如何預配這樣的Docker“管弦樂隊”,如何保證服務的可用性,如何連接任務,以及如何擴展平臺,從而演奏出屬于應用程序的動人交響樂。 本書范圍
第1章“歡迎來到Docker Swarm”會介紹Swarm,并且解釋用戶為什么需要集群解決方案來管理容器。這一章介紹Swarm的特性,介紹其架構的高層級描述。這一章還設計了一些示例,講述Swarm和Fleet、Kubernetes、Mesos的不同之處。之后也會介紹Docker工具的安裝以及兩種Swarm的預配方式:本地的Swarm Standalone和遠程在DigitalOcean上的Swarm Mode集群。
第2章“探索發現服務”是描述性語言最多、最抽象的一章。這一章介紹發現機制和共識算法是什么,以及它們為什么對于分布式系統來說至關重要。本章會詳細介紹Swarm Mode包含的共識機制Raft及其實現Etcd。還會介紹第1章“歡迎來到Docker Swarm”里所使用的發現機制的局限性,并且使用Consul擴展上一章的本地示例,之后重新將其部署。
第3章“遇見Docker Swarm Mode”介紹全新的Docker kit,它能夠幫助用戶創建任何規模的任務集群。本章會介紹Docker Swarm Mode的基礎——SwarmKit,介紹它在Docker 1.12+版本里是如何工作的,討論其架構、理念,它和“舊”Swarm的不同之處在哪里,以及它是如何通過抽象出服務和任務來組織工作負載的。
第 4 章“創建生產級別Swarm”介紹并且討論了社區驅動的項目——Swarm2k和Swarm3k,我們實驗了2300和4800個節點的Swarm集群,可以運行成千上萬個容器。最后總結了可用計劃,預配多大規模的集群,以及實驗中的經驗教訓。
第5章“管理Swarm集群”主要探討基礎架構。這一章展示如何增加或者降低Swarm的規模,如何promote以及demote節點,以及如何更新集群和節點的屬性。這一章還會介紹Shipyard和Portainer.io,其可以作為Swarm的圖形UI。
第6章“Swarm上真實應用的部署”介紹了將真實應用程序放到Swarm上,并且討論了Compose、Docker Stacks和Docker Application Bundles。這一章展示了典型的部署工作流如何在集群里過濾并且調度容器,將其作為服務啟動,將容器作為任務處理。這一章從定義一個使用Nginx的Web服務開始,然后部署一個使用MySQL的WordPress,最終介紹一個更為實際的應用:Apache Spark。
第7章“平臺的向上伸縮”將在前幾章的基礎上開始新的話題討論。這一章將介紹Flocker,給Swarm上運行的Spark增加存儲能力,并且會展示如何安裝,以及如何和Swarm一起大規模、自動地使用它。這一章將完善之前的Spark示例,運行一些真實的大數據job,并且為該基礎架構搭建基礎的監控系統。
第8章“Swarm附加特性的探索”討論了一些對于Swarm來說很重要的高級話題,包括Libnetwork和libkv。
第9章“Swarm集群和Docker軟件供應鏈的安全加固”關注Swarm集群的安全方面,會介紹平臺的參數、證書、防火墻等概念,并且會介紹Notary。
第10章“Swarm和云”介紹了在云供應商那里運行Swarm的最為流行的幾種方案。將在AWS和Azure上安裝Swarm,然后介紹Docker Datacenter,最后會轉向OpenStack,介紹在Magnum上如何安裝以及管理Swarm,Magnum是OpenStack提供的容器即服務方案。
第11章“Swarm的未來展望”展望了Docker編排的趨勢,比如軟件定義的基礎架構、Infrakit、unikernel以及Caas。偉大的征途尚未結束! 閱讀本書的要求 本書假定讀者有在命令行里使用Docker的經驗:本書通篇會持續地拉取鏡像、運行容器、定義服務、暴露端口以及創建網絡。 另外,讀者最好對網絡協議有一些基本了解,并且熟悉公有云和私有云的概念,比如虛擬機和tenant網絡。 要實踐本書的示例,讀者需要Docker及其工具。
第1章“歡迎來到Docker Swarm”介紹了它們的安裝方式。 另外,要想完全學習到示例里的知識,讀者還需要能夠訪問一種公有云(比如AWS,Azure或者DigitalOcean)或者私有云(比如OpenStack)來初始化出虛擬機。 目標讀者 本書寫給Docker的用戶——開發人員和系統管理員,那些想要利用現有的Swarm和Swarmkit的功能,借助容器大幅擴展應用程序的人們。 約定的格式 本書使用了一系列文本格式來區分不同類型的信息。這里列出了這些格式的示例,并且解釋了其含義。 文本里的代碼、數據庫表名、文件夾名、文件名、文件擴展、路徑名、URL、用戶輸入,以及Twitter處理器格式如下:“當執行docker swarm init時,只需復制和粘貼所輸出的行”。 代碼如下所示: digitalocean: image: “docker-1.12-rc4” region: nyc3 ssh_key_fingerprint: “your SSH ID” ssh_user: root 命令行輸入或輸入如下所示: # Set $GOPATH here go get https://github.com/chanwit/belt 新的術語以及重要單詞會加重表示。屏幕上可以看到的文本,比如菜單或者對話框,顯示為這樣的樣式:“UI有預期選項,包括啟動容器的一系列模板,比如MySQL或者私有Registry,但是撰寫本書時還不支持Swarm服務”。
Fabrizio Soppelsa是一家OpenStack公司——Mirantis的高級工程師。從Docker 0.3版本開始,他就是Docker的積極使用者和倡導者,他用三個國家的語言發表了Docker工具相關的多篇文章。他也是一些項目,特別是Machine項目的實際貢獻者。他目前生活在俄羅斯的莫斯科,他和他的蜘蛛Mosha是那里Docker見面會的組織者。
我要感謝ClusterHQ的工作人員對Flocker的幫助,特別感謝Ryan Wallner。也要感謝Yandex團隊和Denis Kutin提供了免費的OpenStack實驗室,讓我能夠很容易地使用。感謝Mirantis創建了(我認為是)極好的OpenStack發行版本。感謝Docker團隊和Docker社區帶給我的所有快樂。
Chanwit Kaewkasi是泰國蘇蘭拉里理工大學計算機學院的助理教授。Chanwit從0.1版本就開始參與Docker Swarm項目的貢獻,他協同設計并且實現了策略過濾器、ZooKeeper發現,以及其他特性。他目前是Docker Swarm的維護者以及Docker Captain(社區給Docker專家的稱號)。
我還要感謝我的妻子——Pitchaya,感謝她的鼓勵以及對我的工作,包括這本書的大力支持。
要送給Docker Engineering團隊特別的感謝,感謝他們開發出的偉大的軟件。感謝蘇蘭拉里理工大學為我提供了很棒的工作場所。感謝我的父母對我的支持。最后還要感謝Fabrizio邀請我合作撰寫本書。
審閱者介紹
Baohua Yang是IBM的資深研究員。他的興趣包括云計算、Fintech、分布式系統和分析的核心領域。他對那些新興技術特別感興趣,比如,SDN/NFV、容器、大數據、區塊鏈和認知計算。
作為首席架構師,他領導企業產品的架構設計和系統實現,并且幫助解決了行業解決方案的關鍵技術難題。
作為開源社區的貢獻者,他向數個項目提交代碼、方案和演講,包括OpenStack、Hyperledger、OpenvSwitch、Docker、OpenDaylight和Kubernetes,并且領導了一些項目,包括easyOVS、Hyperledger Fabric-SDK-py和 Cello。他現在是中國Hyperledger技術工作組的主席。
他在前列的互聯網會議和期刊(包括IEEE INFOCOM,IEEE Trans on Computers)上發表了十多篇文章,并且參與撰寫了一些技術書籍和專利。他現在是數個學術會議和期刊的TPC成員。
他的主頁:https://yeasy.github.com。
譯者介紹
崔婧雯,具有近10年軟件測試開發經驗。現就職于IBM,高級軟件工程師,負責IBM WebSphere業務流程管理軟件的系統測試和自動化CI測試平臺的開發工作。曾就職于VMware從事桌面虛擬化產品的質量保證工作。對Dokcer,虛擬化,業務流程管理等技術有濃厚的興趣。譯有《Mesos 大數據資源調度與大規模容器運行 佳實踐》《持續輕量級Java EE開發:編寫可測試的代碼》《用Mesos框架構建分布式應用》等技術著作。
第1章 歡迎來到Docker Swarm1
集群工具和容器管理器3
Swarm的目標3
為什么使用Swarm4
真實的示例5
-- 寵物模型vs牛群模型5
Swarm特性6
類似項目7
-- Kubernetes7
-- CoreOS Fleet8
-- Apache Mesos9
-- Kubernetes vs Fleet vs Mesos10
-- Swarm vs所有10
Swarm v1架構10
-- 術語12
開始使用Swarm13
-- Mac系統上的Docker14
-- Windows系統上的Docker16
-- 使用Linux18
-- 檢查Docker Machine是否可用——所有系統19
以前的Swarm19
-- Boot2Docker21
-- 使用Docker Machine創建4個集群節點21
-- 配置Docker主機24
-- 啟動Docker Swarm25
-- 測試Swarm集群29
-- 如今的Swarm31
本章小結35
第2章 探索發現服務36
發現服務37
Token38
-- 使用token重新架構第1章示例38
-- Token的限制43
Raft43
-- Raft理論43
-- 實際的Raft45
Etcd47
-- 使用Etcd重新架構第1章示例47
ZooKeeper50
Consul50
-- 使用Consul重新架構第1章示例50
實現去中心化的發現服務52
本章小結52
第3章 遇見Docker Swarm Mode53
SwarmKit53
-- 版本和支持54
-- SwarmKit架構54
-- SwarmKit的核心:swarmd56
-- SwarmKit的控制器:swarmctl57
-- 使用Ansible預配SwarmKit集群58
-- 在SwarmKit上創建服務62
Swarm Mode63
-- Swarm v1 vs Swarm Mode vs SwarmKit64
-- 深入了解Swarm Mode部署65
本章小結72
第4章 創建生產級別Swarm73
工具73
Swarm2k的HA拓撲74
-- 管理器配置75
-- Raft恢復場景75
-- Raft文件76
-- 運行任務76
-- 管理器拓撲76
使用belt預配基礎架構79
使用Docker Machine保護管理器安全81
理解Swarm內部機制83
-- 加入worker84
-- 升級管理器85
監控Swarm2k87
-- InfluxDB時間序列數據庫87
Swarm3k90
-- Swarm3k的搭建和工作負載90
-- 大規模Swarm的性能92
總結Swarm2k和Swarm3k的經驗教訓95
本章小結96
第5章 管理Swarm集群97
Docker Swarm standalone97
Docker Swarm Mode98
-- 手動添加節點99
-- 管理器99
-- Worker數量100
-- 添加腳本化節點100
-- belt102
-- 使用Ansible103
集群管理105
-- 操作節點106
降級和升級107
-- 標記節點108
-- 移除節點110
Swarm健康111
備份集群配置111
災難恢復112
Swarm的圖形化界面112
-- Shipyard112
-- Portainer114
本章小結115
第6章 Swarm上真實應用的部署116
微服務116
部署一個復制的Nginx117
-- 一個極簡的Swarm118
-- Docker Service120
overlay網絡124
集成的負載均衡124
服務的連接:用WordPress例子展示124
-- Swarm的調度策略127
-- 現在,WordPress127
Docker Compose和Swarm Mode130
Docker stacks介紹130
-- 分布式應用包131
-- Docker deploy132
另外一個應用:Apache Spark133
-- 為什么要在Docker上運行Spark134
-- 沒有Swarm的Spark單機134
-- 在Swarm上的Spark單機137
-- 在Swarm上啟動Spark138
本章小結140
第7章 平臺的向上伸縮141
再次登場的Spark例子142
Docker插件142
實驗室環境143
-- 一個獨一無二的秘鑰143
-- Docker Machine144
-- 安全組145
-- 網絡配置146
-- 存儲配置和架構146
安裝Flocker148
-- 生成Flocker證書149
-- 安裝軟件151
-- 安裝控制節點153
-- 安裝集群節點153
-- 測試一切是否正常154
安裝并配置Swarm156
-- 為Spark添加一個卷157
再次部署Spark157
-- 測試Spark159
-- 使用Flocker存儲161
伸縮Spark164
監控Swarm托管的應用165
-- Prometheus165
-- 安裝一個監控系統166
-- 在Grafana中導入Prometheus167
本章小結169
第8章 Swarm附加特性的探索171
Libnetwork171
-- Networking插件172
-- 容器網絡模型173
加密和路由矩陣174
MacVLAN174
-- overlay網絡175
網絡控制面板177
Libkv179
-- 如何使用libkv180
本章小結181
第9章 Swarm集群和Docker軟件供應鏈的安全加固182
軟件供應鏈182
Swarm集群的安全加固183
安全加固Swarm:最佳實踐184
-- 證書頒發機構185
-- 證書和相互TLS185
-- 集群加入令牌185
-- 在Docker Machine中添加TLS186
Docker Notary187
Docker Secret介紹190
本章小結192
第10章 Swarm和云193
Docker for AWS和Docker for Azure193
-- Docker for AWS194
-- Docker for Azure198
Docker Datacenter201
OpenStack上的Swarm202
-- OpenStack Nova204
-- 當下現實:OpenStack友好的方式205
-- OpenStack Heat205
-- OpenStack Magnum206
本章小結215
第11章 Swarm的未來展望216
Provisioning的挑戰216
軟件定義基礎設施216
-- Infrakit217
-- TUF—— The Update Framework219
Docker Stacks和Compose220
Caas ——容器即服務220
Unikernel220
為Docker做貢獻222
-- Github222
-- 提交issue222
-- 代碼223
-- belt和其他項目223
本章小結223