您好,登錄后才能下訂單哦!
之前我一直想學(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è)部分:
所有這些都可以使用命令行的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)驚嘆它的美麗。
正如您所看到的,它非常簡(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里重新定義它。
您會(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。
這會(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)用程序。
這一節(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)鏈接
免責(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)容。