小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 老鶴閑聊 2016-06-30

【編者按】Docker是PaaS供應(yīng)商dotCloud開源的一個基于LXC 的高級容器引擎,源代碼托管在 GitHub 上, 基于Go語言開發(fā)并遵從Apache 2.0協(xié)議開源。Docker提供了一種在安全、可重復的環(huán)境中自動部署軟件的方式,它的出現(xiàn)拉開了基于云計算平臺發(fā)布產(chǎn)品方式的變革序幕。為了更好的促進Docker在國內(nèi)的發(fā)展以及傳播,我們決定開設(shè)《深入淺出Docker》專欄,邀請Docker相關(guān)的布道師、開發(fā)人員、技術(shù)專家來講述Docker的各方面內(nèi)容,讓讀者對Docker有更深入的了解,并且能夠積極投入到新技術(shù)的討論和實踐中。另外,歡迎加入InfoQ Docker技術(shù)交流群交流Docker的最佳實踐,QQ群號:124378115。

1.概述

谷歌發(fā)起的開源項目從來都是廣受技術(shù)圈的關(guān)注和討論,本文將介紹的就是最新的容器編排管理系統(tǒng) Kubernetes。Kubernetes開源項目版本更新頻繁,對于初次使用者來說其定義大量的技術(shù)術(shù)語并且隨時會有新術(shù)語出現(xiàn)。在這種不穩(wěn)定的技術(shù)框架之下,對使用者來說確實帶來了一定的技術(shù)門檻。為了掌握Kubernetes的核心技術(shù)概念,本文嘗試通過深入閱讀官方文檔資料并整理出核心的使用實踐思路,以飧國內(nèi)Kubernetes技術(shù)愛好者參考研究。

1.1 Kubernetes是什么

Kubernetes是一個容器集群的編排管理系統(tǒng)。這里對于“編排”的理解應(yīng)該基于如何在跨Docker主機的場景之下統(tǒng)一管理容器集群的方法。當前的Docker技術(shù)主要提供單機版的容器管理實踐,很多第三方廠商通過自己以往的網(wǎng)絡(luò)經(jīng)驗推出自己的容器編排工具,Google推出的Kubernetes技術(shù)是在這個背景下創(chuàng)立的開源項目。這個項目嘗試要解決的問題就是簡化開發(fā)和運維容器集群的工作,讓開發(fā)和運維能把這個系統(tǒng)當一臺電腦看待。這個思想在沒有Docker容器技術(shù)之前,早已在分布式系統(tǒng)中得到大量應(yīng)用,類如Hadoop、Mesos、Yarn。由于虛擬化技術(shù)的限制,對于更大實例規(guī)模仍然有很大的局限性。Docker技術(shù)出現(xiàn)后,本來已經(jīng)很復雜的分布式系統(tǒng)開始嘗試向更大規(guī)模的集群規(guī)模實現(xiàn),這個實現(xiàn)標準的誘惑力讓更多的廠商參與進來并嘗試在原有Mesos、Yarn類集群調(diào)度系統(tǒng)中開始應(yīng)用Docker技術(shù)。那么Kubernetes和Mesos類相比較,它的優(yōu)勢是沒有資源調(diào)度算法,只關(guān)注容器的管理。而Mesos、Yarn之類調(diào)度系統(tǒng)本身有完善的調(diào)度系統(tǒng)經(jīng)驗,如何把Docker編排的架構(gòu)加入到原有系統(tǒng)中,需要一些標準設(shè)計參考實現(xiàn),這個時候Kubernetes的出現(xiàn)正好彌補了這個需要。

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

第一,在Kubernetes的集群環(huán)境里Pods是最小的可部署單元,它表示同屬于一個應(yīng)用的容器群的邏輯集合。

第二,Master節(jié)點提供了集群統(tǒng)一視圖的中心控制點。我們可以用一個Master節(jié)點來控制多個Minion節(jié)點。

第三,Minion是一個工作節(jié)點,它將運行Master節(jié)點交付的任務(wù)。Minions能運行一個或多個Pods。它提供了在容器環(huán)境下一個應(yīng)用級別的虛擬機。

通過以下概念圖,我們可以更加清晰的看到Kubernetes的技術(shù)全貌。

讓我們再深入一點,講一講Kubernetes是如何做到這些特性的。

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

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

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

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

2.使用實戰(zhàn)

我們可以參照官方提供的各類平臺安裝腳本來部署Kubernetes集群系統(tǒng),本文采用Ubuntu系統(tǒng)作為基礎(chǔ)系統(tǒng)用來安裝Kubernetes集群。官方提供的腳本按照以下幾步安裝即可安裝成功:

首先,把Kubernetes的源碼下載到每一臺集群機器上,自行構(gòu)建最新版的套件。

$ cd cluster/ubuntu-cluster
$ sudo ./build.sh
$ sudo cp ./binaries/* /opt/bin   #復制到/opt/bin目錄,主要是為了方便部署腳本調(diào)用。

然后,配置Kubernetes集群組件,假設(shè)我們的機器清單如下:

 

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é)點(192.168.100.30)上:

$ sudo ./configure.sh
Welcome to use this script to configure k8s setup

Please enter all your cluster node ips, MASTER node comes first
And separated with blank space like "  ":  192.168.100.30 192.168.100.31 192.168.100.32

This machine acts as
  both MASTER and MINION:  	1
  only MASTER:             	2
  only MINION:             	3
Please choose a role > 2

IP address of this machine >  192.168.100.30

Configure Success

當你看到信息“Configure Success” 時代表這臺機器的配置算完成了。

當然,在官方的Ubuntu例子中,它使用Flannel創(chuàng)建了一套覆蓋網(wǎng)絡(luò)(Overlay Network),通過這個網(wǎng)絡(luò)實現(xiàn)了跨主機的容器互聯(lián)互通。大家可以通過圖1flannel網(wǎng)絡(luò)截圖知道flannel0和docker0被分在同一網(wǎng)段,Docker內(nèi)部容器ip和docker0網(wǎng)關(guān)之間是有NAT的,通過flannel+etcd提供自定義的udp數(shù)據(jù)包,實現(xiàn)跨主機的容器之間的互聯(lián),通過這個例子可以幫我們深入的理解跨主機容器互聯(lián)SDN的主要實現(xiàn)思路。

圖1 flannel網(wǎng)絡(luò)截圖

在部署完Kubernetes系統(tǒng)后我們可以通過內(nèi)置的命令來驗證服務(wù)是否正常。比如運行

$ kubectl get minions
NAME            	LABELS          	STATUS
192.168.100.30  	          	NotReady
192.168.100.31  	          	Ready
192.168.100.32  	          	Ready

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

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

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

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

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

3.總結(jié)

Kubernetes在2014年9月發(fā)布第一個版本之后,版本迭代都是按周實施的。官方還不建議用戶在生產(chǎn)環(huán)境中使用這套系統(tǒng)。但是它的設(shè)計思想以及簡潔的架構(gòu)設(shè)計足以讓我們借鑒到很多工程上的寶貴經(jīng)驗。在借鑒的成功案例中,紅帽的Openshift最新版本V3中就成功應(yīng)用了Kubernetes實現(xiàn)技術(shù)。所以,Kubernetes項目是一個值得大家借鑒學習的優(yōu)秀開源項目,通過理解它的設(shè)計思想,可以很快應(yīng)用到本地的容器編排集群系統(tǒng)實現(xiàn)中

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多