Linux中ctrl+z 、ctrl+c、 ctrl+d區別
827
2025-04-02
k8s是kubernetes的簡稱,它是一個開源的容器管理系統,?用于系統自動化部署,擴展和管理。最初由谷歌設計,現在有Cloud Native Computing Foundation維護。目標是打造一個自動化部署,擴展和跨主機集群的應用程序容器操作平臺。它可以與包含Docker在內的很多容器工具協同工作。
許多云服務系統提供基于k8s的平臺,或者以基礎設施即服務的理念把k8s部署為平臺提供的服務。許多提供商也提供他們自己品牌的k8s系統。
1??????k8s的對象
Kubernetes定義了一組構件,它們共同提供了基于CPU、內存或自定義指標來部署、維護和擴展應用程序的機制。
Kubernetes是松散耦合和可擴展的,以滿足不同的工作負載。這種可擴展性很大程度上是由Kubernetes API提供的,內部組件以及在Kubernetes上運行的擴展和容器都會使用該API。
該平臺通過將資源定義為Objects來對計算和存儲資源進行控制,然后可以將其作為Objects進行管理。
關鍵的對象有:
1.1????Pods
一個pod是對容器化組件進行分組的更高層次的抽象。一個pod由一個或多個容器組成,這些容器在主機上共存,并且可以共享資源。
Kubernetes中的基本調度單元是一個pod。
Kubernetes中的每個pod在集群中都被分配了一個唯一的Pod IP地址,這使得應用程序可以在沒有沖突風險的情況下使用端口。
在pod中,所有容器都可以在localhost上相互引用,但一個pod中的容器沒有辦法直接尋址另一個pod中的另一個容器?。
在此時,它必須使用Pod IP地址。?不過,應用程序開發人員永遠不應該使用Pod IP地址來引用/調用另一個pod中的功能,因為Pod IP地址是短暫的,他們所引用的特定pod可能會在重新啟動時被分配到另一個Pod IP地址。
正確的方式是他們應該使用對服務的引用,該服務在特定的Pod IP地址上擁有對目標pod的引用。
一個pod可以定義一個卷,如本地磁盤目錄或網絡磁盤,并將其暴露給pod中的容器。
pod可以通過Kubernetes API手動管理,也可以將其管理委托給控制器。?這種卷也是配置圖(通過容器可見的文件系統提供對配置的訪問)和秘密(通過在僅對授權容器可見的文件系統上提供這些憑證,提供對安全訪問遠程資源所需的憑證的訪問)等Kubernetes特性的基礎。
1.2????復制集
復制集的目的是維持一組穩定的復制Pod在任何給定時間運行。因此,它經常被用來保證指定數量的相同Pod的可用性。
復制集也可以說是一種分組機制,它讓Kubernetes可以維護給定pod所聲明的實例數量。
復制集的定義使用了一個選擇器,其評估的結果將識別所有與之相關聯的pod。
1.3????Services
Kubernetes服務是一組共同工作的pod,比如多層應用的一個層級。構成服務的一組pod由標簽選擇器定義,Kubernetes提供了兩種服務發現模式,使用環境變量或使用Kubernetes DNS,服務發現為服務分配一個穩定的IP地址和DNS名,并以循環的方式在匹配選擇器的pod之間負載平衡該IP地址的網絡連接的流量(即使故障導致pod從一臺機器移動到另一臺機器),默認情況下,一個服務暴露在集群內部(例如后端?pods?可能會被歸為一個服務,來自前端?pods?的請求在它們之間進行負載均衡),但服務也可以暴露在集群之外(例如,客戶機可以接觸到前端?pods)。
簡化的視圖顯示了服務如何與Kubernetes集群中的Pod網絡交互。
1.4????卷
Kubernetes容器中的文件系統默認提供短暫的存儲。這意味著重新啟動pod會抹去這種容器上的任何數據,因此,這種形式的存儲在除了瑣碎的應用之外的任何應用中都是相當有限的。Kubernetes?卷提供了持久性存儲,它存在于pod本身的生命周期內。這種存儲也可以作為pod內容器的共享磁盤空間。卷被掛載在容器內的特定掛載點,這些掛載點由pod配置定義,不能掛載到其他卷上,也不能鏈接到其他卷。
同一卷可以被不同的容器掛載在文件系統樹的不同點。
1.5????命名空間
Kubernetes提供了一種將其管理的資源分割成非重疊的集合,稱為命名空間。?它們旨在用于有許多用戶的環境中,這些用戶分布在多個團隊,或項目中,甚至分離的環境,如開發、測試和生產。
1.6????配置圖和秘密
一個常見的應用挑戰是決定在哪里存儲和管理配置信息,其中一些可能包含敏感數據。配置數據可以是任何細粒度的東西,如單個屬性,也可以是粗粒度的信息,如整個配置文件或JSON / XML文檔。
Kubernetes提供了兩種密切相關的機制來處理這一需求。"配置圖?"和?"秘密",這兩個機制都允許在不需要構建應用的情況下進行配置更改。
來自配置圖和秘密的數據將被提供給這些對象通過部署綁定到的每一個應用實例。只有當一個節點上的pod需要時,秘密和/或配置圖才會被發送到該節點。
Kubernetes會將其保存在該節點的內存中。一旦依賴于秘密或配置圖的pod被刪除,所有綁定的秘密和配置圖的內存副本也會被刪除。這些數據通過兩種方式之一被pod訪問:
a)作為環境變量(當pod啟動時,Kubernetes將創建環境變量),或者
b)在容器文件系統上可用,只有在pod內可見。
數據本身存儲在主機上,主機是一臺高度安全的機器,任何人都不應該有登錄權限。秘密和配置圖最大的區別是秘密中的數據內容是base64編碼的。(在新的k8s版本中,秘密是加密存儲在etcd中的)
1.7????狀態集
解決無狀態應用的伸縮問題非常容易:只要增加更多的運行中的pod即可。這一點Kubernetes做得非常好。
有狀態的工作負載要難得多,因為如果一個pod被重新啟動,狀態需要被保存,如果應用被放大或縮小,那么狀態可能需要被重新分配。數據庫是有狀態工作負載的一個例子。當在高可用性模式下運行時,許多數據庫都帶有一個主實例和一個輔助實例的概念。
在這種情況下,實例的排序概念很重要。
其他的應用程序,如Kafka,在它們的經紀人之間分配數據,所以一個經紀人和另一個經紀人是不一樣的。在這種情況下,實例唯一性的概念很重要。狀態集是由Kubernetes提供的控制器,它在pod的實例中強制執行唯一性和排序的屬性,可以用來運行有狀態的應用程序。
1.8????Daemon集
通常情況下,運行pod的位置是由Kubernetes?調度器中實現的算法決定的。但對于某些用例來說,可能需要在集群中的每一個節點上運行一個?pod。這對于像日志收集,和存儲服務這樣的用例是很有用的。做這種pod調度的能力是由名為Daemon集的功能實現的。
2??????管理K8S對象
Kubernetes提供了一些機制,允許人們管理、選擇或操作其對象。
2.1????標簽和選擇器
Kubernetes使客戶端(用戶或內部組件)能夠將稱為?"標簽"的密鑰附加到系統中的任何API對象上,如pods和節點。
相應地,"標簽選擇器"是針對標簽的查詢,這些查詢可以解析到匹配的對象。?當定義一個服務時,人們可以定義標簽選擇器,這些標簽選擇器將被服務路由器/負載平衡器用來選擇流量將被路由到的pod實例。
因此,只需改變pod的標簽或改變服務上的標簽選擇器,就可以用來控制哪些pod獲得流量,哪些不獲得流量,這可以用來支持各種部署模式,如藍綠部署或A-B測試。這種動態控制服務如何利用實現資源的能力,在基礎設施中提供了一種松散的耦合。
例如,如果一個應用的pods有系統層的標簽(值如前端、后端)和release_track(值如canary、生產),那么對所有后端和canary節點的操作可以使用標簽選擇器,例如:
tier=后端,release_track=canary。
2.2????字段選擇器
就像標簽一樣,字段選擇器也可以讓人選擇Kubernetes資源。與標簽不同的是,選擇是基于被選擇的資源固有的屬性值,而不是用戶定義的分類。metadata.name和metadata.namespace是所有Kubernetes對象上都會出現的字段選擇器。可以使用的其他選擇器取決于對象/資源類型。
2.3????復制控制器和部署
復制集聲明需要的pod實例數量,復制控制器管理系統,使運行的健康pod數量與復制集中聲明的pod數量相匹配(通過評估其選擇器確定)。
部署是復制集的更高級別的管理機制。復制控制器管理副本集的規模,而部署將管理副本集的情況--是否需要推出更新,或回滾等。當部署規模擴大或縮小時,會導致復制集的聲明發生變化--這種聲明狀態的變化由復制控制器管理。
2.4????集群API
Kubernetes的基礎設計原則允許人們以編程方式創建、配置和管理Kubernetes集群。這個功能是通過一個名為Cluster API的API來暴露的。API中體現的一個關鍵概念是,Kubernetes集群本身就是一個資源/對象,可以像其他Kubernetes資源一樣進行管理。同樣,組成集群的機器也被視為Kubernetes資源。API有兩塊--核心API,和提供者實現。提供者實現由云提供商的特定功能組成,讓Kubernetes以一種與云提供商的服務和資源良好集成的方式提供集群API。
3??????架構
Kubernetes遵循主/副本架構。Kubernetes的組件可以分為管理單個節點的組件和作為控制平面一部分的組件。
3.1????Kubernetes控制平面
Kubernetes主控機是集群的主要控制單元,管理集群的工作負載,并指導整個系統的通信。Kubernetes控制平面由各種組件組成,每個組件都有自己的進程,既可以在單個主節點上運行,也可以在支持高可用性集群的多個主節點上運行,Kubernetes控制平面的各種組件如下:
l??etcd:etcd是CoreOS開發的一個持久的、輕量級的、分布式的、鍵值數據存儲,它可靠地存儲集群的配置數據,可以表示集群在任何給定時間點的整體狀態。
就像Apache ZooKeeper一樣,etcd是一個在網絡分區的情況下偏重一致性而非可用性的系統。這種一致性對于正確調度和操作服務至關重要。Kubernetes API服務器使用etcd的watch API來監控集群,并推出關鍵的配置更改,或者簡單地將集群狀態的任何分歧恢復到部署者聲明的狀態。舉個例子,如果部署者指定某個pod的三個實例需要運行,這個事實就會存儲在etcd中。如果發現只有兩個實例在運行,那么這個delta將通過與etcd數據的比較被檢測出來,Kubernetes將利用這一點來調度該pod的額外實例的創建。
l??API服務器:API服務器是一個關鍵組件,它通過HTTP使用JSON為Kubernetes API提供服務,為Kubernetes提供內部和外部接口。
l??調度器:調度器是一個可插入的組件,它根據資源的可用性選擇在哪個節點上運行未排定的pod(由調度器管理的基本實體)。調度器跟蹤每個節點上的資源使用情況,以確保工作負載的調度不會超過可用資源。為此,調度器必須知道資源需求、資源可用性以及其他用戶提供的約束條件和策略指令,如服務質量、親和/反親和要求、數據定位等。從本質上講,調度器的作用是將資源?"供給?"與工作負載?"需求?"相匹配。
l??控制器管理器:控制器是一個調和循環,推動實際集群狀態向所需的集群狀態發展,與API服務器通信,以創建、更新和刪除其管理的資源(pods、服務端點等)。控制器管理器是一個管理一組核心Kubernetes控制器的進程。
一種控制器是復制控制器,它通過在集群中運行指定數量的pod副本來處理復制和擴展。它還處理在底層節點發生故障時創建替換的pod。
其他控制器作為核心Kubernetes系統一部分包括Daemon集控制器,用于在每臺機器(或一些機器子集)上精確地運行一個pod,以及Job控制器,用于運行完成的pod,例如作為批處理作業的一部分。?控制器管理的pod集由標簽選擇器決定,標簽選擇器是控制器定義的一部分。
3.2????Kubernetes節點
Node,又稱Worker或Minion,是部署容器(工作負載)的機器。集群中的每個節點都必須運行一個容器運行時,如Docker,以及下面提到的組件,用于與這些容器的網絡配置的主要的通信。
l??Kubelet:Kubelet負責每個節點的運行狀態,確保節點上的所有容器都是健康的。它負責按照控制平面的指示啟動、停止和維護組織成豆莢的應用容器。
l??Kubelet監控一個pod的狀態,如果不在所需狀態,pod會重新部署到同一個節點。節點狀態每隔幾秒就會通過心跳消息傳遞給主站。一旦primary檢測到節點故障,復制控制器就會觀察到這種狀態變化,并在其他健康節點上啟動吊艙?。
l??Kube-proxy:?Kube-proxy是一個網絡代理和負載均衡器的實現,它支持服務抽象和其他網絡操作,它負責根據傳入請求的IP和端口號將流量路由到合適的容器。
l??容器運行時:容器居于pod內部。容器是微服務的最低層,它容納了正在運行的應用程序、庫以及它們的依賴關系。容器可以通過外部IP地址向外部暴露。Kubernetes從第一個版本開始就支持Docker容器,2016年7月增加了rkt容器引擎。
3.3????附加組件
附加組件的操作就像在集群內運行的其他應用一樣:它們通過pods和服務來實現,唯一不同的是它們實現了Kubernetes集群的功能。pods可以由Deployments、復制控制器等管理。附加組件有很多,而且這個列表還在不斷增加。其中比較重要的有:
l??DNS:所有的Kubernetes集群都應該有集群DNS;這是一個強制功能。除了環境中的其他DNS服務器外,集群DNS是一個DNS服務器,它為Kubernetes服務提供DNS記錄。Kubernetes啟動的容器會自動將此DNS服務器納入其DNS搜索中。
l??Web UI:這是Kubernetes集群的一個通用的、基于Web的UI。它允許用戶管理和排除在集群中運行的應用程序以及集群本身的故障。
l??容器資源監控:提供可靠的應用運行時,并能夠根據工作負載進行擴展或縮減,意味著能夠持續有效地監控工作負載性能。容器資源監控通過在中央數據庫中記錄有關容器的指標來提供這種能力,并提供一個UI來瀏覽這些數據。cAdvisor是一個從屬節點上的組件,它提供了有限的度量監控能力。也有完整的度量管道,如Prometheus,可以滿足大多數監控需求。
l??集群級日志記錄:日志應該有獨立于節點、pod或容器的獨立存儲和生命周期。否則,節點或吊艙的故障會導致事件數據的丟失。這種能力稱為集群級日志記錄,這種機制負責將容器日志保存到一個帶有搜索/瀏覽界面的中央日志存儲中。Kubernetes不提供日志數據的本地存儲,但人們可以將許多現有的日志解決方案集成到Kubernetes集群中。
3.4????微服務
Kubernetes通常被用作托管基于微服務的實現的方式,因為它及其相關的工具生態系統提供了解決任何微服務架構所需的所有關鍵問題功能。
3.4.1????Kubernetes持久存儲
容器是作為一種使軟件可移植的方式出現的。容器包含了運行服務所需的所有包。提供的文件系統使得容器具有極強的可移植性,并且在開發中易于使用。一個容器可以從開發到測試或生產,不需要或需要相對較少的配置更改。
歷史上,Kubernetes只適合無狀態服務。但是,很多應用都有數據庫,需要持久化,這就導致了Kubernetes的持久化存儲的產生。為容器實現持久化存儲是Kubernetes管理員、DevOps和云工程師的首要挑戰之一。容器可能是短暫的,但其越來越多的數據卻不是,所以需要在容器終止或硬件故障時確保數據的持久生存。
當使用Kubernetes或容器化應用部署容器時,公司經常意識到他們需要持久性存儲。他們需要為容器使用的數據庫、根鏡像和其他數據提供快速可靠的存儲。目前,用于Kubernetes的持久性存儲由幾個存儲提供商提供如MayaData(OpenEBS--一個CNCF項目)、Portworx、Linstor、StorPool Storage]、StorageOS、NetApp、Rancher(Longhorn--另一個CNCF項目)和VMware。Rook是另一個流行的項目,主要用于連接Kubernetes和CEPH。
4??????參考
https://kubernetes.io/
https://en.wikipedia.org/wiki/Kubernetes
Kubernetes API
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。