Docker Kubernetes 項(xiàng)目_第1頁(yè)
Docker Kubernetes 項(xiàng)目_第2頁(yè)
Docker Kubernetes 項(xiàng)目_第3頁(yè)
Docker Kubernetes 項(xiàng)目_第4頁(yè)
Docker Kubernetes 項(xiàng)目_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Docker Kubernetes項(xiàng)目項(xiàng)目簡(jiǎn)介Kubernetes 是 Google 團(tuán)隊(duì)發(fā)起的開(kāi)源項(xiàng)目,它的目標(biāo)是管理跨多個(gè)主機(jī)的容器,提供基本的部署,維護(hù)以及運(yùn)用伸縮,主要實(shí)現(xiàn)語(yǔ)言為Go語(yǔ)言。Kubernetes是: 易學(xué):輕量級(jí),簡(jiǎn)單,容易理解 便攜:支持公有云,私有云,混合云,以及多種云平臺(tái) 可拓展:模塊化,可插拔,支持鉤子,可任意組合 自修復(fù):自動(dòng)重調(diào)度,自動(dòng)重啟,自動(dòng)復(fù)制Kubernetes構(gòu)建于Google數(shù)十年經(jīng)驗(yàn),一大半來(lái)源于Google生產(chǎn)環(huán)境規(guī)模的經(jīng)驗(yàn)。結(jié)合了社區(qū)最佳的想法和實(shí)踐。在分布式系統(tǒng)中,部署,調(diào)度,伸縮一直是最為重要的也最為基礎(chǔ)的功能。Kubernets就是希望

2、解決這一序列問(wèn)題的。Kubernets 目前在 0.7.2 版本。Kubernetes 能夠運(yùn)行在任何地方!雖然Kubernets最初是為GCE定制的,但是在后續(xù)版本中陸續(xù)增加了其他云平臺(tái)的支持,以及本地?cái)?shù)據(jù)中心的支持??焖偕鲜帜壳?,Kubenetes 支持在多種環(huán)境下的安裝,包括本地主機(jī)(Fedora)、云服務(wù)(Google GAE、AWS 等)。然而最快速體驗(yàn) Kubernetes 的方式顯然是本地通過(guò) Docker 的方式來(lái)啟動(dòng)相關(guān)進(jìn)程。下圖展示了在單節(jié)點(diǎn)使用 Docker 快速部署一套 Kubernetes 的拓?fù)?。Kubernetes 依賴(lài) Etcd 服務(wù)來(lái)維護(hù)所有主節(jié)點(diǎn)的狀態(tài)。啟動(dòng)

3、 Etcd 服務(wù)。docker run -net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd -addr=:4001 -bind-addr=:4001 -data-dir=/var/etcd/data啟動(dòng)主節(jié)點(diǎn)啟動(dòng) kubelet。docker run -net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube kub

4、elet -api_servers=http:/localhost:8080 -v=2 -address= -enable_server -hostname_override= -config=/etc/kubernetes/manifests啟動(dòng)服務(wù)代理docker run -d -net=host -privileged gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube proxy -master=:8080 -v=2測(cè)試狀態(tài)在本地訪問(wèn) 8080 端口,應(yīng)該獲取到類(lèi)似如下

5、的結(jié)果:$ curl :8080 paths: /api, /api/v1beta1, /api/v1beta2, /api/v1beta3, /healthz, /healthz/ping, /logs/, /metrics, /static/, /swagger-ui/, /swaggerapi/, /validate, /version 查看服務(wù)所有服務(wù)啟動(dòng)后過(guò)一會(huì),查看本地實(shí)際運(yùn)行的 Docker 容器,應(yīng)該有如下幾個(gè)。CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESee054db2516c gcr.io/go

6、ogle_containers/hyperkube:v0.17.0 /hyperkube schedule 2 days ago Up 1 days k8s_scheduler.509f29c9_k8s-master-_default_9941e5170b4365bd4aa91f122ba0c061_e97037f53b0f28de07a2 gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube apiserve 2 days ago Up 1 days k8s_apiserver.245e44fa_k8s-master-1

7、_default_9941e5170b4365bd4aa91f122ba0c061_6ab5c23d2eaa44ecdd8e gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube controll 2 days ago Up 1 days k8s_controller-manager.33f83d43_k8s-master-_default_9941e5170b4365bd4aa91f122ba0c061_1a60106f30aa7163cbef gcr.io/google_containers/hyper

8、kube:v0.17.0 /hyperkube proxy - 2 days ago Up 1 days jolly_davincia2f282976d91 gcr.io/google_containers/pause:0.8.0 /pause 2 days ago Up 2 days k8s_POD.e4cc795_k8s-master-_default_9941e5170b4365bd4aa91f122ba0c061_e8085b1fc060c52acc36 gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube kub

9、elet 2 days ago Up 1 days serene_nobelcc3cd263c581 gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd 2 days ago Up 1 days happy_turing這些服務(wù)大概分為三類(lèi):主節(jié)點(diǎn)服務(wù)、工作節(jié)點(diǎn)服務(wù)和其它服務(wù)。主節(jié)點(diǎn)服務(wù) apiserver 是整個(gè)系統(tǒng)的對(duì)外接口,提供 RESTful 方式供客戶(hù)端和其它組件調(diào)用; scheduler 負(fù)責(zé)對(duì)資源進(jìn)行調(diào)度,分配某個(gè) pod 到某個(gè)節(jié)點(diǎn)上; controller-manager 負(fù)責(zé)管理控制器,包括 endpoint-co

10、ntroller(刷新服務(wù)和 pod 的關(guān)聯(lián)信息)和 replication-controller(維護(hù)某個(gè) pod 的復(fù)制為配置的數(shù)值)。工作節(jié)點(diǎn)服務(wù) kubelet 是工作節(jié)點(diǎn)執(zhí)行操作的 agent,負(fù)責(zé)具體的容器生命周期管理,根據(jù)從數(shù)據(jù)庫(kù)中獲取的信息來(lái)管理容器,并上報(bào) pod 運(yùn)行狀態(tài)等; proxy 為 pod 上的服務(wù)提供訪問(wèn)的代理。其它服務(wù) etcd 是所有狀態(tài)的存儲(chǔ)數(shù)據(jù)庫(kù); gcr.io/google_containers/pause:0.8.0是 Kubernetes 啟動(dòng)后自動(dòng) pull 下來(lái)的測(cè)試鏡像?;靖拍?節(jié)點(diǎn)(Node):一個(gè)節(jié)點(diǎn)是一個(gè)運(yùn)行 Kubernetes 中

11、的主機(jī)。 容器組(Pod):一個(gè) Pod 對(duì)應(yīng)于由若干容器組成的一個(gè)容器組,同個(gè)組內(nèi)的容器共享一個(gè)存儲(chǔ)卷(volume)。 容器組生命周期(pos-states):包含所有容器狀態(tài)集合,包括容器組狀態(tài)類(lèi)型,容器組生命周期,事件,重啟策略,以及replication controllers。 Replication Controllers(replication-controllers):主要負(fù)責(zé)指定數(shù)量的pod在同一時(shí)間一起運(yùn)行。 服務(wù)(services):一個(gè)Kubernetes服務(wù)是容器組邏輯的高級(jí)抽象,同時(shí)也對(duì)外提供訪問(wèn)容器組的策略。 卷(volumes):一個(gè)卷就是一個(gè)目錄,容器對(duì)其有

12、訪問(wèn)權(quán)限。 標(biāo)簽(labels):標(biāo)簽是用來(lái)連接一組對(duì)象的,比如容器組。標(biāo)簽可以被用來(lái)組織和選擇子對(duì)象。 接口權(quán)限(accessing_the_api):端口,ip地址和代理的防火墻規(guī)則。 web 界面(ux):用戶(hù)可以通過(guò) web 界面操作Kubernetes。 命令行操作(cli):kubecfg命令。節(jié)點(diǎn)在 Kubernetes 中,節(jié)點(diǎn)是實(shí)際工作的點(diǎn),以前叫做 Minion。節(jié)點(diǎn)可以是虛擬機(jī)或者物理機(jī)器,依賴(lài)于一個(gè)集群環(huán)境。每個(gè)節(jié)點(diǎn)都有一些必要的服務(wù)以運(yùn)行容器組,并且它們都可以通過(guò)主節(jié)點(diǎn)來(lái)管理。必要服務(wù)包括 Docker,kubelet 和代理服務(wù)。容器狀態(tài)容器狀態(tài)用來(lái)描述節(jié)點(diǎn)的當(dāng)前狀

13、態(tài)?,F(xiàn)在,其中包含三個(gè)信息:主機(jī)IP主機(jī)IP需要云平臺(tái)來(lái)查詢(xún),Kubernetes把它作為狀態(tài)的一部分來(lái)保存。如果Kubernetes沒(méi)有運(yùn)行在云平臺(tái)上,節(jié)點(diǎn)ID就是必需的。IP地址可以變化,并且可以包含多種類(lèi)型的IP地址,如公共IP,私有IP,動(dòng)態(tài)IP,ipv6等等。節(jié)點(diǎn)周期通常來(lái)說(shuō)節(jié)點(diǎn)有Pending,Running,Terminated三個(gè)周期,如果Kubernetes發(fā)現(xiàn)了一個(gè)節(jié)點(diǎn)并且其可用,那么Kubernetes就把它標(biāo)記為Pending。然后在某個(gè)時(shí)刻,Kubernetes將會(huì)標(biāo)記其為Running。節(jié)點(diǎn)的結(jié)束周期稱(chēng)為T(mén)erminated。一個(gè)已經(jīng)terminated的節(jié)點(diǎn)不會(huì)接

14、受和調(diào)度任何請(qǐng)求,并且已經(jīng)在其上運(yùn)行的容器組也會(huì)刪除。節(jié)點(diǎn)狀態(tài)節(jié)點(diǎn)的狀態(tài)主要是用來(lái)描述處于Running的節(jié)點(diǎn)。當(dāng)前可用的有NodeReachable和NodeReady。以后可能會(huì)增加其他狀態(tài)。NodeReachable表示集群可達(dá)。NodeReady表示kubelet返回 StatusOk并且HTTP狀態(tài)檢查健康。節(jié)點(diǎn)管理節(jié)點(diǎn)并非Kubernetes創(chuàng)建,而是由云平臺(tái)創(chuàng)建,或者就是物理機(jī)器、虛擬機(jī)。在Kubernetes中,節(jié)點(diǎn)僅僅是一條記錄,節(jié)點(diǎn)創(chuàng)建之后,Kubernetes會(huì)檢查其是否可用。在Kubernetes中,節(jié)點(diǎn)用如下結(jié)構(gòu)保存: id: , kind: Mini

15、on, apiVersion: v1beta1, resources: capacity: cpu: 1000, memory: 1073741824 , , labels: name: my-first-k8s-node, ,Kubernetes校驗(yàn)節(jié)點(diǎn)可用依賴(lài)于id。在當(dāng)前的版本中,有兩個(gè)接口可以用來(lái)管理節(jié)點(diǎn):節(jié)點(diǎn)控制和Kube管理。節(jié)點(diǎn)控制在Kubernetes主節(jié)點(diǎn)中,節(jié)點(diǎn)控制器是用來(lái)管理節(jié)點(diǎn)的組件。主要包含: 集群范圍內(nèi)節(jié)點(diǎn)同步 單節(jié)點(diǎn)生命周期管理節(jié)點(diǎn)控制有一個(gè)同步輪尋,主要監(jiān)聽(tīng)所有云平臺(tái)的虛擬實(shí)例,會(huì)根據(jù)節(jié)點(diǎn)狀態(tài)創(chuàng)建和刪除??梢酝ㄟ^(guò)-node_sync_period標(biāo)志來(lái)控制該輪尋

16、。如果一個(gè)實(shí)例已經(jīng)創(chuàng)建,節(jié)點(diǎn)控制將會(huì)為其創(chuàng)建一個(gè)結(jié)構(gòu)。同樣的,如果一個(gè)節(jié)點(diǎn)被刪除,節(jié)點(diǎn)控制也會(huì)刪除該結(jié)構(gòu)。在Kubernetes啟動(dòng)時(shí)可用通過(guò)-machines標(biāo)記來(lái)顯示指定節(jié)點(diǎn)。同樣可以使用kubectl來(lái)一條一條的添加節(jié)點(diǎn),兩者是相同的。通過(guò)設(shè)置-sync_nodes=false標(biāo)記來(lái)禁止集群之間的節(jié)點(diǎn)同步,你也可以使用api/kubectl 命令行來(lái)增刪節(jié)點(diǎn)。容器組在Kubernetes中,使用的最小單位是容器組,容器組是創(chuàng)建,調(diào)度,管理的最小單位。 一個(gè)容器組使用相同的Dokcer容器并共享卷(掛載點(diǎn))。一個(gè)容器組是一個(gè)特定運(yùn)用的打包集合,包含一個(gè)或多個(gè)容器。和運(yùn)行的容器類(lèi)似,一個(gè)容器

17、組被認(rèn)為只有很短的運(yùn)行周期。容器組被調(diào)度到一組節(jié)點(diǎn)運(yùn)行,知道容器的生命周期結(jié)束或者其被刪除。如果節(jié)點(diǎn)死掉,運(yùn)行在其上的容器組將會(huì)被刪除而不是重新調(diào)度。(也許在將來(lái)的版本中會(huì)添加容器組的移動(dòng))。容器組設(shè)計(jì)的初衷資源共享和通信容器組主要是為了數(shù)據(jù)共享和它們之間的通信。在一個(gè)容器組中,容器都使用相同的網(wǎng)絡(luò)地址和端口,可以通過(guò)本地網(wǎng)絡(luò)來(lái)相互通信。每個(gè)容器組都有獨(dú)立的ip,可用通過(guò)網(wǎng)絡(luò)來(lái)和其他物理主機(jī)或者容器通信。容器組有一組存儲(chǔ)卷(掛載點(diǎn)),主要是為了讓容器在重啟之后可以不丟失數(shù)據(jù)。容器組管理容器組是一個(gè)運(yùn)用管理和部署的高層次抽象,同時(shí)也是一組容器的接口。容器組是部署、水平放縮的最小單位。容器組的使用

18、容器組可以通過(guò)組合來(lái)構(gòu)建復(fù)雜的運(yùn)用,其本來(lái)的意義包含: 內(nèi)容管理,文件和數(shù)據(jù)加載以及本地緩存管理等。 日志和檢查點(diǎn)備份,壓縮,快照等。 監(jiān)聽(tīng)數(shù)據(jù)變化,跟蹤日志,日志和監(jiān)控代理,消息發(fā)布等。 代理,網(wǎng)橋 控制器,管理,配置以及更新替代方案為什么不在一個(gè)單一的容器里運(yùn)行多個(gè)程序? 1.透明化。為了使容器組中的容器保持一致的基礎(chǔ)設(shè)施和服務(wù),比如進(jìn)程管理和資源監(jiān)控。這樣設(shè)計(jì)是為了用戶(hù)的便利性。 2.解偶軟件之間的依賴(lài)。每個(gè)容器都可能重新構(gòu)建和發(fā)布,Kubernetes必須支持熱發(fā)布和熱更新(將來(lái))。 3.方便使用。用戶(hù)不必運(yùn)行獨(dú)立的程序管理,也不用擔(dān)心每個(gè)運(yùn)用程序的退出狀態(tài)。 4.高效??紤]到基礎(chǔ)設(shè)施

19、有更多的職責(zé),容器必須要輕量化。容器組的生命狀態(tài)包括若干狀態(tài)值:pending、running、succeeded、failed。pending容器組已經(jīng)被節(jié)點(diǎn)接受,但有一個(gè)或多個(gè)容器還沒(méi)有運(yùn)行起來(lái)。這將包含某些節(jié)點(diǎn)正在下載鏡像的時(shí)間,這種情形會(huì)依賴(lài)于網(wǎng)絡(luò)情況。running容器組已經(jīng)被調(diào)度到節(jié)點(diǎn),并且所有的容器都已經(jīng)啟動(dòng)。至少有一個(gè)容器處于運(yùn)行狀態(tài)(或者處于重啟狀態(tài))。succeeded所有的容器都正常退出。failed容器組中所有容器都意外中斷了。容器組生命周期通常來(lái)說(shuō),如果容器組被創(chuàng)建了就不會(huì)自動(dòng)銷(xiāo)毀,除非被某種行為出發(fā),而觸發(fā)此種情況可能是人為,或者復(fù)制控制器所為。唯一例外的是容器組由

20、 succeeded狀態(tài)成功退出,或者在一定時(shí)間內(nèi)重試多次依然失敗。如果某個(gè)節(jié)點(diǎn)死掉或者不能連接,那么節(jié)點(diǎn)控制器將會(huì)標(biāo)記其上的容器組的狀態(tài)為failed。舉例如下。 容器組狀態(tài)running,有 1 容器,容器正常退出o 記錄完成事件o 如果重啟策略為: 始終:重啟容器,容器組保持running 失敗時(shí):容器組變?yōu)閟ucceeded 從不:容器組變?yōu)閟ucceeded 容器組狀態(tài)running,有1容器,容器異常退出o 記錄失敗事件o 如果重啟策略為: 始終:重啟容器,容器組保持running 失敗時(shí):重啟容器,容器組保持running 從不:容器組變?yōu)閒ailed 容器組狀態(tài)running,

21、有2容器,有1容器異常退出o 記錄失敗事件o 如果重啟策略為: 始終:重啟容器,容器組保持running 失敗時(shí):重啟容器,容器組保持running 從不:容器組保持running 當(dāng)有2容器退出 記錄失敗事件 如果重啟策略為: 始終:重啟容器,容器組保持running 失敗時(shí):重啟容器,容器組保持running 從不:容器組變?yōu)閒ailed 容器組狀態(tài)running,容器內(nèi)存不足o 標(biāo)記容器錯(cuò)誤中斷o 記錄內(nèi)存不足事件o 如果重啟策略為: 始終:重啟容器,容器組保持running 失敗時(shí):重啟容器,容器組保持running 從不:記錄錯(cuò)誤事件,容器組變?yōu)閒ailed 容器組狀態(tài)running

22、,一塊磁盤(pán)死掉o 殺死所有容器o 記錄事件o 容器組變?yōu)閒ailedo 如果容器組運(yùn)行在一個(gè)控制器下,容器組將會(huì)在其他地方重新創(chuàng)建 容器組狀態(tài)running,對(duì)應(yīng)的節(jié)點(diǎn)段溢出o 節(jié)點(diǎn)控制器等到超時(shí)o 節(jié)點(diǎn)控制器標(biāo)記容器組failedo 如果容器組運(yùn)行在一個(gè)控制器下,容器組將會(huì)在其他地方重新創(chuàng)建Replication Controllers服務(wù)卷標(biāo)簽接口權(quán)限web界面命令行操作kubectl 使用kubectl是 Kubernetes 自帶的客戶(hù)端,可以用它來(lái)直接操作 Kubernetes。使用格式有兩種:kubectl flagskubectl commandgetDisplay one or

23、 many resourcesdescribeShow details of a specific resourcecreateCreate a resource by filename or stdinupdateUpdate a resource by filename or stdin.deleteDelete a resource by filename, stdin, resource and ID, or by resources and label spaceSUPERCEDED: Set and view the current Kubernetes

24、namespacelogPrint the logs for a container in a pod.rolling-updatePerform a rolling update of the given ReplicationController.resizeSet a new size for a Replication Controller.execExecute a command in a container.port-forwardForward one or more local ports to a xyRun a proxy to the Kubernetes

25、 API serverrun-containerRun a particular image on the cluster.stopGracefully shut down a resource by id or filename.exposeTake a replicated application and expose it as Kubernetes ServicelabelUpdate the labels on a resourceconfigconfig modifies kubeconfig filescluster-infoDisplay cluster infoapi-versionsPrint available API versions.versionPrint the client and server version information.helpHelp about any command基本架構(gòu)任何優(yōu)秀的項(xiàng)目都離不開(kāi)優(yōu)秀的架構(gòu)設(shè)計(jì)。本小節(jié)將介紹 Kubernetes 在架構(gòu)方面的設(shè)計(jì)考慮?;究紤]如果讓我們自己從頭設(shè)計(jì)一套容器管理平臺(tái),有如下幾個(gè)方面是很容易想到的: 分布式架構(gòu),保證擴(kuò)展性; 邏輯集中式的控制平面

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論