溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kubernetes(k8s)基礎(chǔ)介紹

發(fā)布時(shí)間:2020-08-22 11:47:12 來(lái)源:腳本之家 閱讀:256 作者:Stavros Korokithakis 欄目:服務(wù)器

之前我一直想學(xué)習(xí)Kubernetes,因?yàn)樗?tīng)起來(lái)很有意思(如果你是希臘人,你會(huì)覺(jué)得這個(gè)名字很有問(wèn)題),但我從來(lái)沒(méi)有機(jī)會(huì),因?yàn)槲覜](méi)有任何東西需要運(yùn)行在集群中。而最近,我的工作中開(kāi)始逐步涉及Kubernetes相關(guān)的事情,所以這次我抓住機(jī)會(huì),開(kāi)始查資料,但后來(lái)我發(fā)現(xiàn)目前所有的資料(包括官方教程)都過(guò)于冗長(zhǎng),結(jié)構(gòu)也不合理,這讓我一開(kāi)始有點(diǎn)沮喪。

經(jīng)過(guò)幾天的研究,我開(kāi)始逐步理解Kubernetes的核心理念,并且把他部署到了生產(chǎn)環(huán)境中。因?yàn)槲业暮?jiǎn)歷現(xiàn)在說(shuō)自己是個(gè)“Kubernetes專家”,一個(gè)想法立刻誕生了:為什么不把我對(duì)這個(gè)系統(tǒng)的寬泛理解以及我已經(jīng)耗費(fèi)了幾個(gè)小時(shí)的研究所收集的知識(shí)讓更多人看到?雖然我無(wú)法說(shuō)服自己不應(yīng)該再寫另一篇漫無(wú)目的的文章,但是我很快就明白了:
這就是那篇文章。

我在現(xiàn)有文章中遇到的主要問(wèn)題是,在深入研究具體細(xì)節(jié)之前,我找不到的任何內(nèi)容總結(jié)了這些組件是什么以及它們?nèi)绾谓M合起來(lái)的高級(jí)概述。 而這種高屋建瓴的呈現(xiàn)方式是我學(xué)習(xí)最好的方式。我是以這種方式來(lái)寫的,希望它也適合你。如果你知道任何描述了Kubernetes如何工作,而且讓人容易理解的專家級(jí)的文章/教程,請(qǐng)不要告訴我,因?yàn)槟阍谖倚枰愕臅r(shí)候你在哪里,現(xiàn)在我寫了我的文章而你卻沒(méi)有及早把它拿出來(lái)。

另外請(qǐng)記住,我實(shí)際上只學(xué)習(xí)了Kubernetes一個(gè)星期左右,所以學(xué)得不會(huì)非常深入,有些可能是不準(zhǔn)確的,希望沒(méi)有什么錯(cuò)誤,這里的信息應(yīng)該足夠讓你達(dá)到運(yùn)行簡(jiǎn)單集群的程度。

話雖如此,最后我發(fā)現(xiàn)Kubernetes中的概念還是非常簡(jiǎn)單的,雖然我確信有很多東西我還不知道。但是,我知道的事情就足以建立一個(gè)集群并讓我們的應(yīng)用在其上運(yùn)行,而且我很確定它們足以讓大多數(shù)人知道如何開(kāi)始。

基本概念

我們需要做的第一件事是詳細(xì)介紹Kubernetes的各個(gè)部分:

  • 控制平面(Control plane):顧名思義,這是控制其他一切的部分,這也是我一無(wú)所知的部分,因?yàn)槲覀冎皇窍騺嗰R遜付費(fèi),讓亞馬遜幫我們處理這部分。我的理解是,這是最好的決定,除非你是谷歌,否則你應(yīng)該付費(fèi)給一些公司,讓他們?yōu)槟愎芾怼?/li>
  • 節(jié)點(diǎn)(Nodes):節(jié)點(diǎn)本質(zhì)上就是一臺(tái)服務(wù)器,就像您付費(fèi)的物理機(jī)worker一樣。 這是所有代碼部署的地方,將裸服務(wù)器變成節(jié)點(diǎn)的方法是在其上安裝Docker,kubelet,kube-proxy和其他一些東西。本文假設(shè)您的群集中已有一些worker。
  • 容器集(Pod):Pod是容器集合。 這是您的代碼所在的位置,通常每個(gè)容器都有一個(gè)Pod,盡管您可能希望將一些密切相關(guān)的服務(wù)放在同一個(gè)Pod中。 Pod在單個(gè)節(jié)點(diǎn)上運(yùn)行(但是一個(gè)節(jié)點(diǎn)可以運(yùn)行許多Pod),這意味著Pod中的所有容器將具有相同的IP地址,并且它們可以通過(guò)連接到localhost上的彼此端口來(lái)相互通信。Pod在部署后無(wú)法更新,只能刪除或替換它們。
  • 部署(Deployments): Deployment是您將Pod實(shí)際部署到群集的方式。 您可以在沒(méi)有Deployment的情況下運(yùn)行Pod,但如果沒(méi)有Deployment,則無(wú)法輕松指定所需的副本數(shù)量,在失敗時(shí)自動(dòng)重新部署Pod,回滾到早期狀態(tài)等。Deployment使代碼生命周期管理變得更容易,并且您可以使用它來(lái)使Docker鏡像在Kubernetes上運(yùn)行。
  • 服務(wù)(Service):服務(wù)允許您從一個(gè)Pod打開(kāi)端口到其他Pod,并指定一個(gè)Pod的DNS名稱,以便能夠查找并連接到群集中的其他Pod。
  • 入口(Ingress):Ingresses是你如何告訴你的Ingress控制器(通常是像Traefik這樣的web server)向外界暴露什么,以及在哪個(gè)路徑或主機(jī)名上。 入口將映射到將實(shí)際應(yīng)答該請(qǐng)求的Pod。本教程也假設(shè)您已經(jīng)配置了入口,雖然設(shè)置Traefik來(lái)做到這一點(diǎn)不應(yīng)該非常困難(在用他們的教程時(shí)請(qǐng)使用Deployment方法)。

所有這些都可以使用命令行的kubectl創(chuàng)建,或者更安全地通過(guò)YAML文件創(chuàng)建,該文件將包含您要部署的內(nèi)容的定義和詳細(xì)信息(然后執(zhí)行kubectl apply -f <yaml file>)。

概括地講,您把容器放入pods中,這些pods將由deployment創(chuàng)建和部署,其網(wǎng)絡(luò)將由service處理,并添加ingress以便外部世界可以訪問(wèn)您的服務(wù)器。

讓我們逐個(gè)介紹這些部分,看看它們的YAML配置是什么樣的。

The Pod

讓我們看一下將在容器中運(yùn)行Redis鏡像的pod的YAML配置。 請(qǐng)記住,Pod并不是持久性的,所以你幾乎不會(huì)直接使用它。 相反,您將使用deployment間接部署Pod,我們將在下面介紹。

以下配置示例僅供您進(jìn)行修改。 你只需要看看它,然后繼續(xù)閱讀,不要停下來(lái)驚嘆它的美麗。

Kubernetes(k8s)基礎(chǔ)介紹

正如您所看到的,它非常簡(jiǎn)單,您添加了一堆Kubernetes特定的東西,每個(gè)都只是復(fù)制粘貼,然后您聲明此配置是為Pod,給它一個(gè)名稱,指定在其中運(yùn)行的容器和他們監(jiān)聽(tīng)的端口,請(qǐng)刪除整個(gè)文件吧,你已經(jīng)準(zhǔn)備好了!

Kubernetes官方文檔中提供了更多關(guān)于Pod的信息。

The Deployment

以下是您實(shí)際運(yùn)行上述Pod的方式,即使用deployment。 請(qǐng)記住,您根本不需要關(guān)注上面的Pod配置,我們將在deployment里重新定義它。

Kubernetes(k8s)基礎(chǔ)介紹

您會(huì)注意到這主要是上面的Pod配置,但有一些額外的配置,如副本(replica)等。這些定義了deployment的名稱以及我們要部署的副本數(shù)量。 更改副本數(shù)量,將會(huì)部署更多template部分中指定的Pod。

Kubernetes官方文檔中提供了更多關(guān)于Deployments的信息。

The Service

現(xiàn)在我們已經(jīng)部署了一個(gè)Pod,我們需要將其端口暴露給集群的其余部分。 部署中的containerPort指令暴露了Docker端口,但實(shí)際上并不轉(zhuǎn)發(fā)主機(jī)上的端口,因此多個(gè)Pod(不是同一Pod中的容器)可以使用相同的端口而不會(huì)發(fā)生沖突。

要將上面的端口實(shí)際暴露給集群上運(yùn)行的其他Pod,我們需要為它創(chuàng)建一個(gè)Service。 這將創(chuàng)建轉(zhuǎn)發(fā)端口所需的規(guī)則,并為我們提供DNS條目,我們可以使用該條目來(lái)解析該P(yáng)od的IP。

Kubernetes(k8s)基礎(chǔ)介紹

這會(huì)將Redis端口暴露給集群中的其他Pod,可以通過(guò)my-service:6379連接它。

要部署你的應(yīng)用中更多部分,只需將另一個(gè)deployment和關(guān)聯(lián)的Service添加到群集即可。 您可以使用與上面的Redis完全相同的方式部署主應(yīng)用程序服務(wù)。

The Ingress

最后,我們可以使用Ingress將我們的服務(wù)暴露給互聯(lián)網(wǎng)。 這里是使用Traefik的一個(gè)例子,雖然您可能實(shí)際上并不想將Redis暴露給外面的世界,但同樣的方法適用于您自己的應(yīng)用程序。

Kubernetes(k8s)基礎(chǔ)介紹

這一節(jié)配置是告訴Traefik你希望所有名為redis.yourdomain.com的主機(jī)上的流量都轉(zhuǎn)發(fā)到我的服務(wù)端口6379。據(jù)我所知,這只是針對(duì)Traefik的配置。 在應(yīng)用配置后,Pod將通過(guò)redis.yourdomain.com上的Traefik暴露到互聯(lián)網(wǎng)。

我希望這篇文章對(duì)初學(xué)者有用。這篇文章很簡(jiǎn)短,因?yàn)镵ubernetes的基礎(chǔ)很短,但我們?cè)O(shè)法涵蓋了如何以最小的麻煩來(lái)運(yùn)行服務(wù)。

現(xiàn)在你應(yīng)該懂Kubernetes是什么了!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI