Kubernetes服務發現入門:如何高效管理服務?

愈發複雜的應用程序正在依靠微服務來保持可擴展性和提高效率。Kubernetes爲微服務提供了完美的環境,並可以讓其與Kubernetes的工具組件和功能兼容。當應用程序的每一個部分放置在一個容器中,整個系統就會更具可伸縮性。數據庫

微服務和容器的運做方式也適合當下的CI/CD工做流程,即無需關閉整個系統進行更新,由於能夠分別更新每一個微服務(容器)。可是,這會使容器或pod的生命週期縮短,其IP地址會發生變化。安全

在應用程序及其微服務的生命週期中,其中某些部分可能會出現錯誤,沒法運行,進而致使意外情況,IP地址也頗有可能發生變化。此時,服務網格能夠幫助應用程序從新路由、提高安全性。架構

動態IP分配

在咱們瞭解如何管理服務以及如何高效創建服務發現以前,咱們必須瞭解服務發現所面臨的首要挑戰:IP分配問題。具體而言,Kubernetes將IP地址動態分配給Pod和服務的方式。memcached

咱們當然能夠爲單個Pod和服務定義IP地址,但這樣作會限制Kubernetes環境的可伸縮性。在默認狀況下,環境在每次從新啓動集羣、pod或服務時,任意資源都會得到新的IP地址,所以咱們只能對服務使用惟一的名稱。微服務

爲了克服這一問題,你可使用兩種方法。其一,查看服務的環境變量。與Docker容許容器相互通訊的方式相似,Kubernetes容許你掃描注入到容器中的環境變量。工具

若是你有在多個端口上運行的服務,你能夠運行kubectl exec memcached-rm58b en命令,而後對服務名稱進行快速grep操做,以後將會顯示分配給該服務的可用IP地址和端口。不過,這並非管理服務發現的最有效方法。由於,這種方法中依賴的服務必須在 pod 啓動以前就存在,否則是不會出如今環境變量中的。ui

Kube-DNS救場

長遠來看,如下闡述的第二種方法一般被認爲效率更高,這得益於Kubernetes的插件Kube-DNS。咱們先來了解什麼是Kube-DNS。顧名思義,Kube-DNS是充當內部DNS解析器的附加組件。它是一個數據庫,其中包含用於查找的鍵值對。鍵是Kubernetes服務的名稱,值是服務所運行的IP地址。插件

Kube-DNS僅依賴命名空間,無需以其餘方式配置Pod和服務,甚至無需修改集羣、Pod和服務的配置文件便可進行基於DNS的服務發現。code

Kube-DNS同時也支持高級DNS查詢以及DNS策略。例如,你能夠對每一個Pod進行配置,將其配置爲遵循與其運行的節點不一樣的DNS屬性。這意味着你可使用私有DNS空間來自定義pod之間如何進行通訊。blog

這一方法還能更進一步,在每一個pod的基礎上配置DNS策略。你須要作的就是將節點DNS策略設置爲「None」,而後手動配置每一個Pod以知足你的特定需求。

Label和Selectors

正如前文所述,你可使用參數來進一步影響Pod之間和服務之間的通訊方式。Kubernetes服務發現支持對高級控件使用label和selector,特別是在管理複雜集羣時,label尤其方便。你能夠將label分配給組件和容器,以便於識別。

Kubernetes處理label和selector的方式使得這些參數更易於使用。本質上,它們時添加到元數據中的簡單鍵值參數。也就是說,它們實際上並不會影響系統或環境中的其餘部分,你能夠在複雜的環境中跨pod和服務(甚至跨節點)自由使用label和selector。

接下來,咱們要使用副本控制器。一樣,顧名思義,它是一個可使Kubernetes的系統具備高可用性和可伸縮性的工具。你可使用副本控制器來建立和管理pod副本而且維護高可用。同時,你也能夠輕鬆地一次性刪除pod及其副本。

Service Mesh和高度彈性伸縮系統

要完成設置,咱們須要使用與現有基礎架構和平臺相關的高級服務發現方法。AWS Cloud Map是一個十分有意思的例子。AWS環境中的應用程序資源能夠擁有惟一的名稱,而且那些資源會被Cloud Map自動映射。它們註冊完成後,服務會自動變爲可發現的,而且在啓動Pod或服務後當即進行註冊過程。

如今有一個新的方法,經過使用服務網格讓管理微服務的複雜陣列變得容易。服務網格標準化了服務和Pod的通訊方式。若是你要建立一個高可用的系統,那麼在環境中使用服務網格來維護Pod的可見性是一個完美的解決方案。

可是,若是你的環境在AWS上,則能夠以AWS App Mesh的形式利用其服務網格功能。它會自動處理全部事情,包括流量路由、流量均衡、調用以及使用API調用的circuit breaking。全部微服務都可以啓用API Mesh,以簡化管理。因爲此工具是Amazon生態的一部分,所以它會自動和Amazon EKS、IAM等其餘工具一塊兒使用。

Kubernetes服務發現使得容器平臺具備強大功能以及靈活性,服務網格等方法無疑經過標準化使Kubernetes服務發現更增強大。只要服務在運行,就可使正確的API調用在每一個Pod以前來回傳遞數據而不會中斷。

相關文章
相關標籤/搜索