馬老師云原生DevOps應(yīng)用平臺開發(fā)實戰(zhàn)
Docker容器:
docker大部分人都熟悉或者至少是聽過。Docker技術(shù)在很多技術(shù)資料和書籍上,往往會跟虛擬化技術(shù)做對比,它們的對比如下:
KVM等虛擬化技術(shù)是在操作系統(tǒng)級別上進行虛擬和隔離,每一個虛機都是獨立的OS。
而docker是在同一個操作系統(tǒng)中,實現(xiàn)了輕量級的虛擬化?!拜p量級的虛擬化”怎么理解呢?看起來docker容器是獨立的操作系統(tǒng),本質(zhì)上是同一個操作系統(tǒng)中的進程隔離。所以它是輕量級的;從而,docker比KVM更省資源、資源利用率更高。
Docker的設(shè)計理念很偉大、作用也很偉大。但是docker的偉大性遠不只是體現(xiàn)在“輕量的虛擬化”;docker的偉大性體現(xiàn)在:它實現(xiàn)了:同一個軟件發(fā)布,在不同的平臺上運行。
這個好處是不是很熟悉?這其實就是Java最初流行起來的原因。Python語言為了實現(xiàn)這一點,弄出了VirtualEnv,把依賴包都隨著程序發(fā)布,才解決了多平臺運行的問題。Docker的設(shè)計很優(yōu)雅,一個應(yīng)用都打包成一個image格式,image采用分層技術(shù)等等,這部分不是本文的重點,大家希望更深入了解的話,可以參考其他資料。
2. Kubernetes
docker鏡像運行起來是一個一個的程序,多個程序合起來做成一個大的分布式應(yīng)用怎么做呢?
答案很簡單,一樣的,程序之間互相調(diào)用就行。就好比傳統(tǒng)的分布式應(yīng)用,多弄幾臺服務(wù)器,一個服務(wù)器上裝一個程序,程序之間通過socket或其他協(xié)議通信。基于docker的分布式應(yīng)用也是如此,區(qū)別只是網(wǎng)絡(luò)虛擬化了、CPU和內(nèi)存資源也虛擬化了。
但是永遠不要低估分布式應(yīng)用的復(fù)雜性,舉兩個例子,想象我們搭建了一套分布式集群,運行了一套分布式應(yīng)用:
這個集群中的某個機器出故障了(斷電了、硬盤壞了等等),怎么去排查故障、怎么去修復(fù)?
這個集群中某一部分業(yè)務(wù)由于訪問量增加,需要擴充支撐能力,怎么擴充?
針對這兩個問題,我們很容易想到答案,那就是人過去檢查機器、修復(fù)或者重裝,負載過大了,就改應(yīng)用的架構(gòu),上面套上負載均衡性,采用可擴展的架構(gòu)。這些都是傳統(tǒng)的辦法,這些解決辦法不好的地方也很明顯,就是修復(fù)太慢,太費人力、成本高、對業(yè)務(wù)影響大,想象一個網(wǎng)站,等擴展架構(gòu)都弄好了,用戶也就都流失了。
Kubernetes是容器編排系統(tǒng),它首要的目的就是為了解決上面這個例子里的兩個問題:
分布式容器應(yīng)用的可靠性,在服務(wù)器或容器應(yīng)用出現(xiàn)問題的情況下,自動感知,自動將容器應(yīng)用在集群內(nèi)的其他機器里重新運行起來
分布式容器應(yīng)用的可擴展性,通過啟動相同的容器應(yīng)用,自動的提升應(yīng)用的負載支撐能力。
Google為了壓制AWS,把自己的容器運行平臺開源出來,成為了現(xiàn)在的Kubernetes,