【編者按】Docker是PaaS供應(yīng)商dotCloud開源的一個(gè)基于LXC 的高級(jí)容器引擎,源代碼托管在 GitHub 上, 基于Go語(yǔ)言開發(fā)并遵從Apache 2.0協(xié)議開源。Docker提供了一種在安全、可重復(fù)的環(huán)境中自動(dòng)部署軟件的方式,它的出現(xiàn)拉開了基于云計(jì)算平臺(tái)發(fā)布產(chǎn)品方式的變革序幕。為了更好的促進(jìn)Docker在國(guó)內(nèi)的發(fā)展以及傳播,我們決定開設(shè)《深入淺出Docker》專欄,邀請(qǐng)Docker相關(guān)的布道師、開發(fā)人員、技術(shù)專家來(lái)講述Docker的各方面內(nèi)容,讓讀者對(duì)Docker有更深入的了解,并且能夠積極投入到新技術(shù)的討論和實(shí)踐中。另外,歡迎加入InfoQ Docker技術(shù)交流群交流Docker的最佳實(shí)踐,QQ群號(hào):124378115。
谷歌發(fā)起的開源項(xiàng)目從來(lái)都是廣受技術(shù)圈的關(guān)注和討論,本文將介紹的就是最新的容器編排管理系統(tǒng) Kubernetes。Kubernetes開源項(xiàng)目版本更新頻繁,對(duì)于初次使用者來(lái)說(shuō)其定義大量的技術(shù)術(shù)語(yǔ)并且隨時(shí)會(huì)有新術(shù)語(yǔ)出現(xiàn)。在這種不穩(wěn)定的技術(shù)框架之下,對(duì)使用者來(lái)說(shuō)確實(shí)帶來(lái)了一定的技術(shù)門檻。為了掌握Kubernetes的核心技術(shù)概念,本文嘗試通過(guò)深入閱讀官方文檔資料并整理出核心的使用實(shí)踐思路,以飧國(guó)內(nèi)Kubernetes技術(shù)愛(ài)好者參考研究。
Kubernetes是一個(gè)容器集群的編排管理系統(tǒng)。這里對(duì)于“編排”的理解應(yīng)該基于如何在跨Docker主機(jī)的場(chǎng)景之下統(tǒng)一管理容器集群的方法。當(dāng)前的Docker技術(shù)主要提供單機(jī)版的容器管理實(shí)踐,很多第三方廠商通過(guò)自己以往的網(wǎng)絡(luò)經(jīng)驗(yàn)推出自己的容器編排工具,Google推出的Kubernetes技術(shù)是在這個(gè)背景下創(chuàng)立的開源項(xiàng)目。這個(gè)項(xiàng)目嘗試要解決的問(wèn)題就是簡(jiǎn)化開發(fā)和運(yùn)維容器集群的工作,讓開發(fā)和運(yùn)維能把這個(gè)系統(tǒng)當(dāng)一臺(tái)電腦看待。這個(gè)思想在沒(méi)有Docker容器技術(shù)之前,早已在分布式系統(tǒng)中得到大量應(yīng)用,類如Hadoop、Mesos、Yarn。由于虛擬化技術(shù)的限制,對(duì)于更大實(shí)例規(guī)模仍然有很大的局限性。Docker技術(shù)出現(xiàn)后,本來(lái)已經(jīng)很復(fù)雜的分布式系統(tǒng)開始嘗試向更大規(guī)模的集群規(guī)模實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)標(biāo)準(zhǔn)的誘惑力讓更多的廠商參與進(jìn)來(lái)并嘗試在原有Mesos、Yarn類集群調(diào)度系統(tǒng)中開始應(yīng)用Docker技術(shù)。那么Kubernetes和Mesos類相比較,它的優(yōu)勢(shì)是沒(méi)有資源調(diào)度算法,只關(guān)注容器的管理。而Mesos、Yarn之類調(diào)度系統(tǒng)本身有完善的調(diào)度系統(tǒng)經(jīng)驗(yàn),如何把Docker編排的架構(gòu)加入到原有系統(tǒng)中,需要一些標(biāo)準(zhǔn)設(shè)計(jì)參考實(shí)現(xiàn),這個(gè)時(shí)候Kubernetes的出現(xiàn)正好彌補(bǔ)了這個(gè)需要。
第一,在Kubernetes的集群環(huán)境里Pods是最小的可部署單元,它表示同屬于一個(gè)應(yīng)用的容器群的邏輯集合。
第二,Master節(jié)點(diǎn)提供了集群統(tǒng)一視圖的中心控制點(diǎn)。我們可以用一個(gè)Master節(jié)點(diǎn)來(lái)控制多個(gè)Minion節(jié)點(diǎn)。
第三,Minion是一個(gè)工作節(jié)點(diǎn),它將運(yùn)行Master節(jié)點(diǎn)交付的任務(wù)。Minions能運(yùn)行一個(gè)或多個(gè)Pods。它提供了在容器環(huán)境下一個(gè)應(yīng)用級(jí)別的虛擬機(jī)。
通過(guò)以下概念圖,我們可以更加清晰的看到Kubernetes的技術(shù)全貌。
讓我們?cè)偕钊胍稽c(diǎn),講一講Kubernetes是如何做到這些特性的。
Docker近期推出的三大套件:Compose、Swarm、Machine都提供了一些Kubernetes的功能,我們需要了解他們之間的區(qū)別,讓我們能更好的利用Kubernetes做好基礎(chǔ)。
我們可以參照官方提供的各類平臺(tái)安裝腳本來(lái)部署Kubernetes集群系統(tǒng),本文采用Ubuntu系統(tǒng)作為基礎(chǔ)系統(tǒng)用來(lái)安裝Kubernetes集群。官方提供的腳本按照以下幾步安裝即可安裝成功:
首先,把Kubernetes的源碼下載到每一臺(tái)集群機(jī)器上,自行構(gòu)建最新版的套件。
$ cd cluster/ubuntu-cluster$ sudo ./build.sh$ sudo cp ./binaries/* /opt/bin #復(fù)制到/opt/bin目錄,主要是為了方便部署腳本調(diào)用。
然后,配置Kubernetes集群組件,假設(shè)我們的機(jī)器清單如下:
IP Address | Role |
192.168.100.30 | master |
192.168.100.31 | minion |
192.168.100.32 | minion |
只需要到cluster/ubuntu-cluster目錄下執(zhí)行一遍configue.sh就可以完成配置。
比如在master節(jié)點(diǎn)(192.168.100.30)上:
$ sudo ./configure.shWelcome to use this script to configure k8s setupPlease enter all your cluster node ips, MASTER node comes firstAnd separated with blank space like "": 192.168.100.30 192.168.100.31 192.168.100.32This machine acts as both MASTER and MINION: 1 only MASTER: 2 only MINION: 3Please choose a role > 2IP address of this machine > 192.168.100.30Configure Success
當(dāng)你看到信息“Configure Success” 時(shí)代表這臺(tái)機(jī)器的配置算完成了。
當(dāng)然,在官方的Ubuntu例子中,它使用Flannel創(chuàng)建了一套覆蓋網(wǎng)絡(luò)(Overlay Network),通過(guò)這個(gè)網(wǎng)絡(luò)實(shí)現(xiàn)了跨主機(jī)的容器互聯(lián)互通。大家可以通過(guò)圖1flannel網(wǎng)絡(luò)截圖知道flannel0和docker0被分在同一網(wǎng)段,Docker內(nèi)部容器ip和docker0網(wǎng)關(guān)之間是有NAT的,通過(guò)flannel+etcd提供自定義的udp數(shù)據(jù)包,實(shí)現(xiàn)跨主機(jī)的容器之間的互聯(lián),通過(guò)這個(gè)例子可以幫我們深入的理解跨主機(jī)容器互聯(lián)SDN的主要實(shí)現(xiàn)思路。
圖1 flannel網(wǎng)絡(luò)截圖
在部署完Kubernetes系統(tǒng)后我們可以通過(guò)內(nèi)置的命令來(lái)驗(yàn)證服務(wù)是否正常。比如運(yùn)行
$ kubectl get minionsNAME LABELS STATUS192.168.100.30NotReady192.168.100.31 Ready192.168.100.32 Ready
好了,系統(tǒng)成功了。我在部署的過(guò)程中發(fā)現(xiàn),并不是每次都能順利完成安裝。比如端口被占用,關(guān)鍵服務(wù)沒(méi)起來(lái)等情況。那么我把這些情況總結(jié)一下,方便大家排除故障:
如果沒(méi)有看到運(yùn)行的進(jìn)程,應(yīng)該去看一下運(yùn)行日志,在Ubuntu的安裝實(shí)例中,日志統(tǒng)一放在/var/log/upstart/目錄下。
Kubernetes在2014年9月發(fā)布第一個(gè)版本之后,版本迭代都是按周實(shí)施的。官方還不建議用戶在生產(chǎn)環(huán)境中使用這套系統(tǒng)。但是它的設(shè)計(jì)思想以及簡(jiǎn)潔的架構(gòu)設(shè)計(jì)足以讓我們借鑒到很多工程上的寶貴經(jīng)驗(yàn)。在借鑒的成功案例中,紅帽的Openshift最新版本V3中就成功應(yīng)用了Kubernetes實(shí)現(xiàn)技術(shù)。所以,Kubernetes項(xiàng)目是一個(gè)值得大家借鑒學(xué)習(xí)的優(yōu)秀開源項(xiàng)目,通過(guò)理解它的設(shè)計(jì)思想,可以很快應(yīng)用到本地的容器編排集群系統(tǒng)實(shí)現(xiàn)中
聯(lián)系客服