国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
深入淺出Docker(六):像谷歌一樣部署你的應(yīng)用

【編者按】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。

1.概述

谷歌發(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)好者參考研究。

1.1 Kubernetes是什么

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è)需要。

1.2 Kubernetes技術(shù)術(shù)語(yǔ)概覽

第一,在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是如何做到這些特性的。

  • Replication Controller 是Master上的資源控制器,確保創(chuàng)建、銷毀Pods的請(qǐng)求能隨時(shí)被Minions節(jié)點(diǎn)運(yùn)行。這樣可以保證集群中的Pod可以永遠(yuǎn)提供服務(wù),而當(dāng)Pod運(yùn)行失敗后可以立即開啟新Pod實(shí)例,保證Pod實(shí)例服務(wù)的可用性可以保證。
  • Service 提供統(tǒng)一的名稱和地址,提供針對(duì)一組Pods的負(fù)載均衡。這個(gè)Service其實(shí)就是微服務(wù)的實(shí)現(xiàn),它在我們創(chuàng)建的Pods的基礎(chǔ)之上提供一層抽象。比如我們的Service是一個(gè)Job服務(wù),前端應(yīng)用可以直接發(fā)布任務(wù)到指定的Servcie IP就可以了,用戶對(duì)于這個(gè)Job服務(wù)有多少個(gè)實(shí)例提供服務(wù)不需要關(guān)心。
  • Label 是一個(gè)強(qiáng)制的鍵值對(duì),保存在分布式存儲(chǔ)服務(wù)etcd上,讓Replication Controller能用它去實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)。
  • Kubelet 是在每個(gè)Minion上管理容器的守護(hù)進(jìn)程,它是實(shí)際管理Docker主機(jī)來(lái)啟動(dòng)容器的管理程序。
  • Master API Server 提供RESTful K8s API接口來(lái)校驗(yàn)和配置Pod、Service和Replication Controller,它是統(tǒng)一管理集群系統(tǒng)的入口。

1.3 與Docker工具鏈的關(guān)系

Docker近期推出的三大套件:Compose、Swarm、Machine都提供了一些Kubernetes的功能,我們需要了解他們之間的區(qū)別,讓我們能更好的利用Kubernetes做好基礎(chǔ)。

  • Docker Machine是比較底層的入口,比Kubernetes的實(shí)現(xiàn)更底層一些。Machine提供了基礎(chǔ)設(shè)施IaaS的能力,方便管理混合云狀況下的Docker主機(jī)。類似Google Compute Engine。
  • Docker Swarm完全基于Docker API之上定義的Cluster API。方向上是Docker API提供單機(jī)范圍內(nèi)的API,由Swarm提供Cluster級(jí)別的API。Google的Kubernetes團(tuán)隊(duì)在早期Swarm實(shí)現(xiàn)討論上提供了自己的意見
  • Docker Compose還是單機(jī)版的開發(fā)套件,對(duì)于開發(fā)者來(lái)說(shuō),可以使用它把當(dāng)前的代碼構(gòu)建出指定的Docker Image,然后運(yùn)行在單機(jī)上。Kubernetes就是為了解決部署到容器集群的難度而定義的標(biāo)準(zhǔn)實(shí)現(xiàn)。當(dāng)前Compose正在實(shí)現(xiàn)基于Swarm和Machine實(shí)現(xiàn)集群編排的能力,這種能力就是Kubernetes的直接競(jìng)爭(zhēng)對(duì)手。

2.使用實(shí)戰(zhàn)

我們可以參照官方提供的各類平臺(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.30  	          	NotReady192.168.100.31  	          	Ready192.168.100.32  	          	Ready

好了,系統(tǒng)成功了。我在部署的過(guò)程中發(fā)現(xiàn),并不是每次都能順利完成安裝。比如端口被占用,關(guān)鍵服務(wù)沒(méi)起來(lái)等情況。那么我把這些情況總結(jié)一下,方便大家排除故障:

  • master節(jié)點(diǎn),主要的服務(wù)是kube-apiserver、kube-controller-manager、kube-scheduler,如下截圖顯示需要保證能運(yùn)行:

    如果沒(méi)有看到運(yùn)行的進(jìn)程,應(yīng)該去看一下運(yùn)行日志,在Ubuntu的安裝實(shí)例中,日志統(tǒng)一放在/var/log/upstart/目錄下。

  • slave節(jié)點(diǎn),主要的服務(wù)是kube-proxy、kubelet兩個(gè)服務(wù),如下截圖顯示需要保證能運(yùn)行:

  • 網(wǎng)絡(luò)相關(guān)的組件,主要是etcd服務(wù),還有SDN的組件服務(wù)類如Flannel。這一塊出問(wèn)題的情況很少,我遇到大多數(shù)問(wèn)題都是集中在網(wǎng)絡(luò)拓?fù)渖希ㄟ^(guò)學(xué)習(xí)理解這種網(wǎng)絡(luò)就可以基本解決問(wèn)題。
  • Kubernetes項(xiàng)目還不是生產(chǎn)級(jí)別的工程,沒(méi)有在實(shí)際的場(chǎng)景中經(jīng)過(guò)生產(chǎn)級(jí)別的驗(yàn)證。我們正好通過(guò)官方提供的example目錄中的例子理解我們的場(chǎng)景中到底需要什么功能,然后反饋到社區(qū),讓Kubernetes越來(lái)越成熟。

3.總結(jié)

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)中

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
容器集群管理平臺(tái)的比較
Docker學(xué)習(xí)筆記 — k8s部署&nbs
Kubernetes系統(tǒng)架構(gòu)簡(jiǎn)介
kubernetes(k8s)以及涉及組件簡(jiǎn)單介紹
Docker集群管理工具-Kubernetes部署記錄
Kubernetes 運(yùn)維學(xué)習(xí)筆記
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服