為什么說(shuō)Kubernetes是新的應(yīng)用服務(wù)器?

2021-03-18    分類: 網(wǎng)站建設(shè)

在容器流行起來(lái)之前,應(yīng)用服務(wù)器提供了一些非功能性需求(NFR,non-functional requirement),比如安全性、隔離性、容錯(cuò)、配置管理等等。打個(gè)比方,應(yīng)用服務(wù)器和應(yīng)用之間的關(guān)系就像 CD 播放器和 CD 之間的關(guān)系一樣。

作為開發(fā)人員,你應(yīng)該遵循預(yù)定義的標(biāo)準(zhǔn)并按照特定的格式分發(fā)應(yīng)用,而應(yīng)用服務(wù)器會(huì)“執(zhí)行”你的應(yīng)用并帶來(lái)一些額外的功能,這些功能因服務(wù)器“品牌”的差異而有所不同。

與 CD 播放器的類比方式相似,隨著容器的流行,容器鏡像成為了新的 CD 格式。實(shí)際上,容器鏡像僅僅是用來(lái)分發(fā)容器的格式。

容器的真正收益在你需要為應(yīng)用添加企業(yè)級(jí)功能時(shí)才體現(xiàn)出來(lái)。為容器化的應(yīng)用提供這些功能的好方式就是使用 Kubernetes 作為它們的平臺(tái)。另外,Kubernetes 平臺(tái)還為其他項(xiàng)目提供了很棒的基礎(chǔ)實(shí)施,這些項(xiàng)目包括 Red Hat OpenShift、Istio 以及 Apache OpenWhisk,基于這些基礎(chǔ)設(shè)施能夠更容易的構(gòu)建和部署健壯的生產(chǎn)級(jí)質(zhì)量的應(yīng)用。

接下來(lái),我們探討九個(gè)這樣的功能:

Kubernetes

1. 服務(wù)發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)指的是確定如何連接服務(wù)的過(guò)程。要獲得容器以及云原生應(yīng)用的很多收益,我們需要將配置從容器鏡像中移除出去,這樣的話,我們就能把相同的容器鏡像應(yīng)用到所有的環(huán)境中。將配置提取到應(yīng)用外部是 12 要素應(yīng)用的核心原則之一。服務(wù)發(fā)現(xiàn)是從運(yùn)行時(shí)環(huán)境中獲取配置信息的方式之一,這樣能夠避免將其硬編碼到應(yīng)用之中。Kubernetes 自帶了服務(wù)發(fā)現(xiàn)。Kubernetes 還提供了 ConfigMaps 和 [Secrets] (https://kubernetes.io/docs/concepts/configuration/secret/) 用來(lái)將配置從應(yīng)用容器中移除。在運(yùn)行時(shí)環(huán)境中,如果要連接數(shù)據(jù)庫(kù)這樣的服務(wù),我們會(huì)存儲(chǔ)憑證信息,Secrets 解決了一些這方面所面臨的挑戰(zhàn)。借助 Kubernetes,我們無(wú)需使用外部的服務(wù)器或框架。

2. 基本調(diào)用

容器中的應(yīng)用可以通過(guò) Ingress 進(jìn)行訪問(wèn),也就是從外部世界路由到你所暴露的服務(wù)。OpenShift 提供了基于 HAProxy 的 route objects,它具有各項(xiàng)功能和負(fù)載均衡策略。你可以使用路由功能進(jìn)行輪流部署。這可以作為一些非常復(fù)雜的 CI/CD 策略的基礎(chǔ)。參見(jiàn)下文的“6. 構(gòu)建和部署管道”。

如果你想運(yùn)行一次性的任務(wù),比如一個(gè)批處理或者只是使用集群來(lái)計(jì)算一個(gè)結(jié)果(比如計(jì)算 Pi 的位數(shù)),那該怎么辦呢?針對(duì)這種場(chǎng)景,Kubernetes 提供了 job objects。同時(shí)還有一個(gè) cron job,能夠管理基于時(shí)間的任務(wù)。

3. 彈性

在 Kubernetes 中,彈性(elasticity)是通過(guò) ReplicaSets(它過(guò)去被稱為 Replication Controllers)解決的。與面向 Kubernetes 的大多數(shù)配置類似,ReplicaSet 是一種協(xié)調(diào)所需狀態(tài)的方式:你告訴 Kubernetes,系統(tǒng)應(yīng)該處于各種狀態(tài),Kubernetes 就能知道如何達(dá)到該狀態(tài)。在任意時(shí)間,ReplicaSet 都能控制副本的數(shù)量或應(yīng)用程序精確的實(shí)例數(shù)量。

但是,如果你所構(gòu)建的服務(wù)受歡迎程度超出了預(yù)先的規(guī)劃,計(jì)算資源耗盡了該怎么辦呢?你可以借助 Kubernetes Horizontal Pod Autoscaler,它會(huì)基于觀測(cè)到的 CPU 利用率(或所支持的自定義指標(biāo),以及應(yīng)用提供的指標(biāo))擴(kuò)展 pod 的數(shù)量。

4. 日志

因?yàn)?Kubernetes 集群能夠運(yùn)行容器化應(yīng)用的多個(gè)副本,所以將這些日志聚合起來(lái),以便于在同一個(gè)地方進(jìn)行查看就變得非常重要了。同時(shí),為了利用自動(dòng)擴(kuò)展(以及其他云原生應(yīng)用的功能)所帶來(lái)的收益,容器應(yīng)該是不可變的。所以,我們應(yīng)該將日志存儲(chǔ)在容器之外,這樣它們才能跨運(yùn)行時(shí)持久化。OpenShift 允許我們部署 EFK 技術(shù)棧來(lái)聚合來(lái)自主機(jī)和應(yīng)用的日志,即便這些日志來(lái)自多個(gè)容器甚至已刪除的 pod 均是可以的。

EFK 技術(shù)棧的組成如下所示:

  • Elasticsearch(ES),存儲(chǔ)日志內(nèi)容的對(duì)象存儲(chǔ);
  • Fluentd,從節(jié)點(diǎn)收集日志并將其發(fā)送至 Elasticsearch
  • Kibana,針對(duì) Elasticsearch 的 Web UI。

5. 監(jiān)控

盡管日志和監(jiān)控看上去解決的是相同的問(wèn)題,但是它們之間是不同的。監(jiān)控是觀察、檢查、通常還有告警以及記錄,而日志則只有記錄。

Prometheus 是一個(gè)開源的監(jiān)控系統(tǒng),它包含了時(shí)序數(shù)據(jù)庫(kù)。它可以用來(lái)存儲(chǔ)和查詢指標(biāo)、告警,并使用可視化的方式查看系統(tǒng)內(nèi)部的運(yùn)行狀況。Prometheus 可能是監(jiān)控 Kubernetes 集群方面最流行的可選方案。

6. 構(gòu)建和部署管道

對(duì)于你的應(yīng)用來(lái)說(shuō),CI/CD(持續(xù)集成 / 持續(xù)交付)并不是“必備”的要求。但是,CI/CD 通常被認(rèn)為是成功軟件開發(fā)和 DevOps 實(shí)踐的支柱。如果沒(méi)有經(jīng)過(guò) CI/CD 管道的話,軟件不應(yīng)該發(fā)布到生產(chǎn)環(huán)境中。Jez Humble 和 David Farley 合著的《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》中是這樣描述 CD 的:“持續(xù)交付能夠?qū)⒏鞣N類型的變更發(fā)布到生產(chǎn)環(huán)境中,包括新特性、配置變化、缺陷修正以及體驗(yàn)性的功能,或者說(shuō)以可持續(xù)的方式將這些變更安全且快速地交到用戶的手里”。

7. 適應(yīng)性

Kubernetes 為集群本身提供了適應(yīng)性(resilience)方案,它還提供了 PersistentVolumes 來(lái)支持卷(volume)的副本,從而幫助應(yīng)用實(shí)現(xiàn)適應(yīng)性。Kubernetes 的 ReplicationControllers/ 部署能夠確保指定數(shù)量的 pod 副本在整個(gè)集群中始終正常運(yùn)行,它會(huì)自動(dòng)處理任何可能出現(xiàn)的節(jié)點(diǎn)故障。

結(jié)合適應(yīng)性,容錯(cuò)能夠作為一種有效的方式來(lái)處理用戶對(duì)于可靠性和可用性的關(guān)切。運(yùn)行在 Kubernetes 上的應(yīng)用還可以通過(guò) Istio 的重試規(guī)則、斷路器和池彈射(pool ejection,即移除掉出現(xiàn)故障的容器——譯注)來(lái)實(shí)現(xiàn)容錯(cuò)。

8. 認(rèn)證

在 Kubernetes 中,認(rèn)證可以通過(guò) Istio 的 mutual TLS 認(rèn)證來(lái)實(shí)現(xiàn),它致力于增強(qiáng)微服務(wù)及其通信的安全性,而無(wú)需服務(wù)代碼的變更。它會(huì)負(fù)責(zé):

為每個(gè)服務(wù)提供一個(gè)代表其角色的強(qiáng)標(biāo)識(shí)(identity),從而允許它能夠跨集群和云進(jìn)行互操作;

保護(hù)服務(wù)與服務(wù)之間的通信,以及終端用戶與服務(wù)之間的通信;

提供 key 管理系統(tǒng),自動(dòng)化 key 和證書生成、分發(fā)、輪換和撤銷。

另外,值得一提的是,我們還可以在 Kubernetes/OpenShift 集群中運(yùn)行 Keycloak 以提供認(rèn)證和授權(quán)。Keycloak 是 Red Hat Single Sign-on 的上游產(chǎn)品。

9. 跟蹤

基于 Istio 的應(yīng)用可以配置為使用 Zipkin 或 Jaeger 收集跟蹤的 span。不管使用什么語(yǔ)言、框架或平臺(tái)來(lái)構(gòu)建應(yīng)用,Istio 都能支持分布式跟蹤。

文章標(biāo)題:為什么說(shuō)Kubernetes是新的應(yīng)用服務(wù)器?
轉(zhuǎn)載注明:http://www.bm7419.com/news14/105414.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)