k8s架構、工(gōng)作(zuò)流程、集群組件詳解
時間:2024/8/30 15:49:38 作(zuò)者:管理(lǐ)員
k8s概述
Kubernetes(簡稱K8s,是因為(wèi) k 和 s 之間有(yǒu)八個字符)是一個開源的容器編排平台,用(yòng)于管理(lǐ)雲平台中(zhōng)多(duō)個主機上的容器化應用(yòng)程序。它提供了一種機制,用(yòng)于自動化部署、擴展和管理(lǐ)容器化應用(yòng)程序的集群。Kubernetes的目标是讓部署容器化應用(yòng)程序變得簡單高效。它提供了應用(yòng)程序部署、規劃、更新(xīn)和維護的基本機制,同時具(jù)備強大的擴展性和可(kě)靠性。Kubernetes采用(yòng)主從設備模型(Master-Slave架構),其中(zhōng)Master節點負責核心的調度、管理(lǐ)和運維任務(wù),而Slave節點負責運行應用(yòng)程序的容器。通過Kubernetes,開發人員可(kě)以更輕松地管理(lǐ)和擴展他(tā)們的容器化應用(yòng)程序,從而提高應用(yòng)程序的可(kě)靠性和可(kě)伸縮性。

特性
主要特性:

自動化容器編排:彈性伸縮,Kubernetes可(kě)以自動化地管理(lǐ)和編排容器,根據定義的規則和策略來調度和部署應用(yòng)程序。

服務(wù)發現和負載均衡:Kubernetes提供了内置的服務(wù)發現機制,可(kě)以自動為(wèi)應用(yòng)程序創建穩定的網絡地址,并通過負載均衡将流量分(fēn)發到不同的容器實例。

自動擴展和彈性伸縮:Kubernetes可(kě)以根據負載情況自動調整容器的數量,實現應用(yòng)程序的彈性伸縮,确保始終具(jù)有(yǒu)所需的資源。

自我修複和健康檢查:Kubernetes具(jù)有(yǒu)自我修複機制,可(kě)以監測容器的健康狀态,并在出現故障或異常時自動進行恢複或重啓。

配置和存儲管理(lǐ):Kubernetes提供了集中(zhōng)化的配置管理(lǐ)工(gōng)具(jù),可(kě)以輕松管理(lǐ)應用(yòng)程序的配置信息。支持外部存儲系統的挂載,并對外部存儲資源進行編排。無論是本地存儲、公(gōng)有(yǒu)雲提供的存儲服務(wù)(如AWS)還是網絡存儲(如NFS、Glusterfs、Ceph),都可(kě)以作(zuò)為(wèi)集群資源使用(yòng),提高存儲的靈活性。

集中(zhōng)化配置管理(lǐ)和密鑰管理(lǐ):Kubernetes提供了集中(zhōng)化的配置管理(lǐ)工(gōng)具(jù),可(kě)以管理(lǐ)敏感數據和應用(yòng)程序配置,提高數據安(ān)全性。同時,它還支持密鑰管理(lǐ),用(yòng)于安(ān)全地存儲和使用(yòng)敏感信息。

滾動更新(xīn)和回滾:Kubernetes支持滾動更新(xīn),可(kě)以逐步替換舊版本的容器,确保應用(yòng)程序的平滑升級。如果出現問題,還可(kě)以回滾到之前的版本。

多(duō)租戶支持:Kubernetes支持多(duō)租戶的部署模式,可(kě)以将不同的應用(yòng)程序或團隊隔離開來,确保安(ān)全性和資源隔離。

可(kě)擴展性和插件機制:Kubernetes具(jù)有(yǒu)高度可(kě)擴展的架構,并提供了插件機制,可(kě)以根據需要添加自定義功能(néng)或集成其他(tā)工(gōng)具(jù)。

跨平台和多(duō)雲支持:Kubernetes可(kě)以在各種雲平台和基礎設施上運行,包括公(gōng)有(yǒu)雲、私有(yǒu)雲和混合雲環境。

聲明式配置和版本控制:Kubernetes采用(yòng)聲明式配置的方式,通過定義期望的狀态來管理(lǐ)應用(yòng)程序,同時支持版本控制和回滾。

任務(wù)批處理(lǐ)運行:Kubernetes支持一次性任務(wù)和定時任務(wù),适用(yòng)于批量數據處理(lǐ)和分(fēn)析的場景,滿足批處理(lǐ)需求。

作(zuò)用(yòng)(為(wèi)什麽使用(yòng))
傳統的後端部署方式:把程序包(包括可(kě)執行二進制文(wén)件、配置文(wén)件等)放到服務(wù)器上,接着運行啓動腳本把程序跑起來,同時啓動守護腳本定期檢查程序運行狀态、必要的話重新(xīn)拉起程序。

設想,如果服務(wù)的請求量較多(duō),已部署的服務(wù)響應不過來怎麽辦(bàn)?如果請求量、内存、CPU超過阈值做了告警,運維人員馬上再加幾台服務(wù)器,部署好服務(wù)之後,接入負載均衡來分(fēn)擔已有(yǒu)服務(wù)的壓力。

但是,從監控告警到部署服務(wù),中(zhōng)間需要人力介入!那麽,有(yǒu)沒有(yǒu)辦(bàn)法自動完成服務(wù)的部署、更新(xīn)、卸載和擴容、縮容呢(ne)?

k8s就是為(wèi)了解決這些問題設計的:

它提供了自動化的容器編排和管理(lǐ)功能(néng),使得部署、更新(xīn)、擴容和縮容等操作(zuò)更加簡單和高效。

通過使用(yòng)Kubernetes,可(kě)以将容器化的應用(yòng)程序打包成鏡像,并通過Kubernetes進行部署。Kubernetes會自動管理(lǐ)容器的運行狀态,監控容器的健康狀況,并在需要時進行自動恢複。當請求量增加時,Kubernetes可(kě)以根據負載情況自動擴展容器的數量,以滿足高負載需求。而當請求量減少時,Kubernetes也可(kě)以自動縮減容器的數量,以節省資源和成本。

此外,Kubernetes還提供了服務(wù)發現和負載均衡的功能(néng),使得容器化的應用(yòng)程序可(kě)以方便地進行服務(wù)間通信,并實現負載均衡,提高應用(yòng)程序的可(kě)用(yòng)性和性能(néng)。

總之,Kubernetes的目标是簡化容器化應用(yòng)程序的部署和管理(lǐ),提供自動化的運維能(néng)力,減少人工(gōng)介入,提高效率和可(kě)靠性。它是現代化應用(yòng)程序架構的重要組成部分(fēn),可(kě)以幫助更好地應對不斷增長(cháng)的業務(wù)需求和流量壓力。

Kubernetes(K8S)的目标是簡化和高效地部署容器化應用(yòng)程序。它解決了使用(yòng)裸跑Docker時的一些問題,包括:

單機使用(yòng)無法有(yǒu)效地進行集群管理(lǐ)。

随着容器數量增加,管理(lǐ)成本也随之上升。

缺乏有(yǒu)效的容災和自愈機制。

沒有(yǒu)預設的編排模闆,無法實現快速、大規模的容器調度。

缺乏統一的配置管理(lǐ)中(zhōng)心工(gōng)具(jù)。

缺乏容器生命周期的管理(lǐ)工(gōng)具(jù)。

缺乏圖形化的運維管理(lǐ)工(gōng)具(jù)。

Kubernetes是由Google開源的容器集群管理(lǐ)系統,它在Docker等容器技(jì )術的基礎上提供了一系列完整的功能(néng),包括應用(yòng)程序的部署運行、資源調度、服務(wù)發現和動态伸縮等。它提高了大規模容器集群管理(lǐ)的便捷性。其主要功能(néng)包括:

使用(yòng)Docker等容器技(jì )術對應用(yòng)程序進行打包、實例化和運行。

以集群的方式運行和管理(lǐ)分(fēn)布在多(duō)台機器上的容器。

解決了跨機器容器之間通信的問題。

Kubernetes的自我修複機制确保容器集群始終處于用(yòng)戶期望的狀态。
k8s架構


Kubernetes(簡稱K8s)是一個開源的容器編排平台,用(yòng)于自動化部署、擴展和管理(lǐ)容器化應用(yòng)程序。Kubernetes的架構由多(duō)個組件組成,每個組件負責不同的任務(wù),協同工(gōng)作(zuò)以實現高可(kě)用(yòng)性和彈性。

以下是Kubernetes的主要組件和其功能(néng):

API Server(API服務(wù)器):作(zuò)為(wèi)Kubernetes的網關,接收和處理(lǐ)所有(yǒu)的指令請求。它提供了一組RESTful API,用(yòng)于管理(lǐ)和操作(zuò)Kubernetes集群中(zhōng)的資源對象。

Scheduler(調度器):負責根據預定義的調度算法,将容器化應用(yòng)程序的資源請求調度到合适的節點上運行。調度器考慮節點的資源利用(yòng)率、健康狀态和親和性等因素來做出決策。

Controller Manager(控制器管理(lǐ)器):維護Kubernetes中(zhōng)的各種控制器,用(yòng)于管理(lǐ)和控制資源對象的生命周期。控制器可(kě)以監視資源對象的狀态變化,并根據預定義的規則執行相應的操作(zuò),如創建、删除、更新(xīn)和修改資源對象。

etcd:是Kubernetes的分(fēn)布式鍵值存儲系統,用(yòng)于存儲集群的配置數據和狀态信息。etcd提供高可(kě)用(yòng)性和一緻性,可(kě)以用(yòng)于服務(wù)注冊、發現和配置同步等功能(néng)。

Kubelet:運行在每個節點上的代理(lǐ)程序,負責管理(lǐ)節點上的容器和容器化應用(yòng)程序。Kubelet與API Server通信,接收指令并執行相應的操作(zuò),如創建、銷毀和監控容器。

Container Runtime(容器運行時):負責在節點上運行容器,如Docker、containerd等。容器運行時提供了容器的生命周期管理(lǐ)、資源隔離和安(ān)全性等功能(néng)。

kube-proxy:負責在集群中(zhōng)實現服務(wù)發現和負載均衡。它維護網絡規則,将服務(wù)請求轉發到正确的目标容器。

這些組件共同協作(zuò),實現了Kubernetes的核心功能(néng),包括容器編排、自動伸縮、服務(wù)發現、負載均衡和故障恢複等。通過這種架構,Kubernetes能(néng)夠提供高度可(kě)靠和可(kě)擴展的容器化應用(yòng)程序管理(lǐ)平台

k8s工(gōng)作(zuò)流程


運維人員向API Server發出創建Pod的請求,告訴它我想幹什麽,我的期望是什麽。

API Server響應請求,并通過一系列認證和授權過程,将請求存儲到etcd(分(fēn)布式鍵值存儲系統),并通知Controller Manager。

Controller Manager通過API Server讀取etcd中(zhōng)的請求,并按照預設的模闆去創建Pod。創建完成後,将Pod的數據寫入etcd。

Controller Manager通過API Server去找Scheduler,為(wèi)新(xīn)創建的Pod選擇最适合的Node節點。Scheduler會根據預算策略在所有(yǒu)Node節點中(zhōng)挑選最優的節點。

Scheduler選擇合适的Node節點後,将選擇結果返回給Controller Manager。

Controller Manager将選擇結果通過API Server寫入etcd,更新(xīn)Pod的狀态。

Kubelet(運行在每個節點上的代理(lǐ)程序)通過API Server獲取到更新(xīn)後的Pod狀态,并根據狀态執行相應的操作(zuò),如創建、銷毀和監控容器。

Container Runtime(容器運行時)在選定的Node節點上運行容器,如Docker、containerd等。容器運行時負責容器的生命周期管理(lǐ)、資源隔離和安(ān)全性等功能(néng)。

kube-proxy負責在集群中(zhōng)實現服務(wù)發現和負載均衡。它維護網絡規則,将服務(wù)請求轉發到正确的目标容器。

通過這個工(gōng)作(zuò)流程,Kubernetes實現了自動化的容器編排和管理(lǐ),确保應用(yòng)程序的高可(kě)用(yòng)性、彈性和可(kě)擴展性。各個組件之間的協作(zuò)和通信,使得Kubernetes能(néng)夠有(yǒu)效地管理(lǐ)容器化應用(yòng)程序,并提供強大的功能(néng)和服務(wù)。

k8s集群架構與組件
Kubernetes(K8S)是一個分(fēn)布式系統,它的集群架構由多(duō)個組件組成,每個組件負責不同的任務(wù)。Kubernetes(K8S)的架構采用(yòng)了主從設備模型(Master-Slave 架構)。在 K8S 中(zhōng),Master 節點負責集群的調度、管理(lǐ)和運維,而 Worker Node 節點則承載着實際的工(gōng)作(zuò)負載。

Master節點(控制平面):

kube-apiserver:提供Kubernetes API的前端接口,用(yòng)于與其他(tā)組件通信。

etcd:可(kě)靠的分(fēn)布式鍵值存儲,用(yòng)于存儲集群的配置數據和狀态信息。

kube-scheduler:負責根據資源需求和約束條件,将Pod調度到合适的工(gōng)作(zuò)節點上運行。

kube-controller-manager:包含多(duō)個控制器,負責監控和管理(lǐ)集群的各種資源和控制器。

cloud-controller-manager(可(kě)選):用(yòng)于與雲平台提供商(shāng)集成,管理(lǐ)雲資源。

工(gōng)作(zuò)節點(計算節點):

kubelet:與Master節點通信,負責管理(lǐ)并執行Pod的生命周期,包括創建、啓動、監控和銷毀Pod。

kube-proxy:負責為(wèi)Pod提供網絡代理(lǐ)和負載均衡功能(néng),實現Kubernetes服務(wù)的訪問和通信。

網絡插件:

Kubernetes使用(yòng)網絡插件來實現容器之間和容器與外部網絡的通信。不同的網絡插件可(kě)以提供不同的網絡解決方案,如Overlay網絡、主機網絡等。

存儲插件:

Kubernetes支持不同的存儲插件,用(yòng)于提供持久化存儲的功能(néng),如本地存儲、網絡存儲、雲存儲等。

DNS插件:

Kubernetes集群通常會配置一個DNS插件,用(yòng)于為(wèi)Pod提供域名(míng)解析服務(wù),使得Pod可(kě)以通過域名(míng)進行相互通信。

Dashboard(可(kě)選):

Kubernetes提供了一個Web界面,稱為(wèi)Dashboard,用(yòng)于可(kě)視化地管理(lǐ)和監控集群中(zhōng)的應用(yòng)程序和資源。

核心組件詳解
Master節點
Kube-apiserver
kube-apiserver是Kubernetes集群中(zhōng)的一個核心組件,它是Kubernetes API的前端接口,負責處理(lǐ)來自用(yòng)戶和其他(tā)組件的請求,并将其轉發到相應的組件進行處理(lǐ)。

API接口:kube-apiserver提供了一組RESTful API接口,用(yòng)于管理(lǐ)和操作(zuò)Kubernetes集群中(zhōng)的各種資源,如Pod、Service、Deployment等。通過這些API接口,用(yòng)戶和其他(tā)組件可(kě)以與集群進行交互。

認證和授權:kube-apiserver支持多(duō)種認證和授權機制,如基于Token的認證、基于證書的認證、OpenID Connect等。它可(kě)以驗證用(yòng)戶的身份,并根據配置的訪問控制策略對請求進行授權。

數據存儲:kube-apiserver使用(yòng)etcd作(zuò)為(wèi)後端存儲,将集群的配置數據和狀态信息持久化保存在etcd中(zhōng)。etcd是一個可(kě)靠的分(fēn)布式鍵值存儲系統,确保集群的元數據在節點故障或重啓後仍然可(kě)用(yòng)。

高可(kě)用(yòng)性:為(wèi)了提高kube-apiserver的可(kě)用(yòng)性,可(kě)以運行多(duō)個kube-apiserver實例,并使用(yòng)負載均衡器将請求分(fēn)發到這些實例上。這樣即使其中(zhōng)一個實例發生故障,其他(tā)實例仍然可(kě)以繼續提供服務(wù)。

安(ān)全性:kube-apiserver提供了一些安(ān)全機制來保護API的訪問和數據的安(ān)全性。它支持TLS加密通信,可(kě)以配置訪問控制策略來限制用(yòng)戶的權限,還可(kě)以啓用(yòng)審計日志(zhì)記錄API的訪問和操作(zuò)。

擴展性:kube-apiserver具(jù)有(yǒu)良好的擴展性,可(kě)以通過自定義資源定義(Custom Resource Definition)和自定義控制器(Custom Controller)來擴展API,以滿足特定的業務(wù)需求。

kube-apiserver是Kubernetes集群中(zhōng)非常重要的組件,用(yòng)于暴露 Kubernetes API,任何資源請求或調用(yòng)操作(zuò)都是通過 kube-apiserver 提供的接口進行。以 HTTP Restful API 提供接口服務(wù),所有(yǒu)對象資源的增删改查和監聽操作(zuò)都交給 API Server 處理(lǐ)後再提交給 Etcd 存儲。 可(kě)以理(lǐ)解成 API Server 是 K8S 的請求入口服務(wù)。API Server 負責接收 K8S 所有(yǒu)請求(來自 UI 界面或者 CLI 命令行工(gōng)具(jù)), 然後根據用(yòng)戶的具(jù)體(tǐ)請求,去通知其他(tā)組件幹活。可(kě)以說 API Server 是 K8S 集群架構的大腦。

Kube-controller-manager
kube-controller-manager是Kubernetes集群中(zhōng)的一個核心組件,它是控制器的集合,負責管理(lǐ)和運行多(duō)個控制器,以确保集群中(zhōng)的各種資源處于期望的狀态。

控制器集合:kube-controller-manager包含了多(duō)個控制器,每個控制器負責監控和管理(lǐ)集群中(zhōng)的不同資源。常見的控制器包括副本控制器(Replication Controller)、節點控制器(Node Controller)、服務(wù)控制器(Service Controller)等。

副本控制器:副本控制器負責确保Pod的副本數量與期望的副本數量保持一緻。它會監控Pod的狀态,并在需要時創建、删除或重新(xīn)調度Pod,以滿足用(yòng)戶定義的副本數量。

節點控制器:節點控制器負責監控集群中(zhōng)的節點狀态,并根據需要進行節點的添加、删除或重新(xīn)調度。它會檢測節點的健康狀态,并根據節點的可(kě)用(yòng)性和資源情況來進行節點管理(lǐ)。

服務(wù)控制器:服務(wù)控制器負責監控Service資源的變化,并确保集群中(zhōng)的服務(wù)始終具(jù)有(yǒu)穩定的網絡地址。它會自動為(wèi)Service創建對應的負載均衡器,并将流量分(fēn)發到後端的Pod實例。

控制循環:每個控制器都遵循控制循環(Control Loop)的模式,不斷地監控資源的狀态,并根據期望的狀态進行調整。控制循環包括觀察資源狀态、比較當前狀态和期望狀态、執行操作(zuò)來調整資源狀态等步驟。

高可(kě)用(yòng)性:為(wèi)了提高kube-controller-manager的可(kě)用(yòng)性,可(kě)以運行多(duō)個實例,并使用(yòng)負載均衡器将請求分(fēn)發到這些實例上。這樣即使其中(zhōng)一個實例發生故障,其他(tā)實例仍然可(kě)以繼續提供服務(wù)。

自定義控制器:除了内置的控制器,kube-controller-manager還支持自定義控制器的擴展。用(yòng)戶可(kě)以根據自己的需求編寫自定義控制器,以實現特定的業務(wù)邏輯和資源管理(lǐ)。

運行管理(lǐ)控制器,是 K8S 集群中(zhōng)處理(lǐ)常規任務(wù)的後台線(xiàn)程,是 K8S 集群裏所有(yǒu)資源對象的自動化控制中(zhōng)心。在 K8S 集群中(zhōng),一個資源對應一個控制器,而 Controller manager 就是負責管理(lǐ)這些控制器的。 由一系列控制器組成,通過 API Server 監控整個集群的狀态,并确保集群處于預期的工(gōng)作(zuò)狀态,比如當某個 Node 意外宕機時,Controller Manager 會及時發現并執行自動化修複流程,确保集群始終處于預期的工(gōng)作(zuò)狀态。

Kube-scheduler
kube-scheduler是Kubernetes集群中(zhōng)的一個核心組件,它負責根據預定義的調度策略,為(wèi)新(xīn)創建的Pod選擇合适的節點進行調度。

節點選擇:kube-scheduler會根據一系列的調度策略和規則,選擇最适合的節點來運行Pod。這些策略包括資源需求、親和性(Affinity)和反親和性(Anti-Affinity)、節點親和性(Node Affinity)、節點親和性預選(Node Affinity Preemption)等。

資源需求:kube-scheduler會考慮Pod的資源需求(如CPU、内存等),并選擇具(jù)有(yǒu)足夠資源的節點來運行Pod,以避免資源競争和過載。

親和性和反親和性:kube-scheduler支持親和性和反親和性規則,可(kě)以将Pod調度到與其他(tā)Pod或節點具(jù)有(yǒu)特定關系的節點上。例如,可(kě)以将具(jù)有(yǒu)相同标簽的Pod調度到同一個節點上,或者将Pod調度到與特定Pod或節點具(jù)有(yǒu)反親和性的節點上。

節點親和性:kube-scheduler支持節點親和性規則,可(kě)以将Pod調度到與特定節點具(jù)有(yǒu)特定關系的節點上。例如,可(kě)以将Pod調度到與具(jù)有(yǒu)特定标簽的節點具(jù)有(yǒu)親和性的節點上。

節點親和性預選:kube-scheduler支持節點親和性預選規則,可(kě)以在調度過程中(zhōng)優先考慮具(jù)有(yǒu)特定标簽或特定條件的節點。這可(kě)以用(yòng)于實現高級調度策略,如将Pod調度到具(jù)有(yǒu)特定硬件或軟件配置的節點上。

可(kě)擴展性:kube-scheduler具(jù)有(yǒu)良好的可(kě)擴展性,可(kě)以通過自定義調度器(Custom Scheduler)來擴展其功能(néng)。用(yòng)戶可(kě)以根據自己的需求編寫自定義調度器,以實現特定的調度策略和資源管理(lǐ)。

高可(kě)用(yòng)性:為(wèi)了提高kube-scheduler的可(kě)用(yòng)性,可(kě)以運行多(duō)個實例,并使用(yòng)負載均衡器将請求分(fēn)發到這些實例上。這樣即使其中(zhōng)一個實例發生故障,其他(tā)實例仍然可(kě)以繼續提供調度服務(wù)。

可(kě)以理(lǐ)解成 K8S 所有(yǒu) Node 節點的調度器。當用(yòng)戶要部署服務(wù)時,Scheduler 會根據調度算法選擇最合适的 Node 節點來部署 Pod。 •預選策略(predicate) •優選策略(priorities)

API Server 接收到請求創建一批 Pod ,API Server 會讓 Controller-manager 按照所預設的模闆去創建 Pod,Controller-manager 會通過 API Server 去找 Scheduler 為(wèi)新(xīn)創建的 Pod 選擇最适合的 Node 節點。比如運行這個 Pod 需要 2C4G 的資源,Scheduler 會通過預選策略過濾掉不滿足策略的 Node 節點。Node 節點中(zhōng)還剩多(duō)少資源是通過彙報給 API Server 存儲在 etcd 裏,API Server 會調用(yòng)一個方法找到 etcd 裏所有(yǒu) Node 節點的剩餘資源,再對比 Pod 所需要的資源,如果某個 Node 節點的資源不足或者不滿足 預選策略的條件則無法通過預選。預選階段篩選出的節點,在優選階段會根據優先策略為(wèi)通過預選的 Node 節點進行打分(fēn)排名(míng), 選擇得分(fēn)最高的 Node。例如,資源越富裕、負載越小(xiǎo)的 Node 可(kě)能(néng)具(jù)有(yǒu)越高的排名(míng)。

存儲中(zhōng)心
etcd
etcd是一個開源的分(fēn)布式鍵值存儲系統,它被廣泛應用(yòng)于Kubernetes集群中(zhōng)作(zuò)為(wèi)存儲和同步集群配置數據的後端。

分(fēn)布式鍵值存儲:etcd提供了一個簡單而強大的分(fēn)布式鍵值存儲系統,類似于一個分(fēn)布式的字典或數據庫。它允許用(yòng)戶存儲和檢索鍵值對,并支持對數據的高效查詢和事務(wù)操作(zuò)。

一緻性和可(kě)靠性:etcd使用(yòng)Raft一緻性算法來确保數據的一緻性和可(kě)靠性。Raft算法通過選舉和複制日志(zhì)的方式,保證了集群中(zhōng)的節點之間的數據一緻性,并在節點故障或網絡分(fēn)區(qū)的情況下保持系統的可(kě)用(yòng)性。

高可(kě)用(yòng)性:etcd支持多(duō)節點部署,可(kě)以運行多(duō)個etcd實例組成一個集群。這樣即使其中(zhōng)一個節點發生故障,其他(tā)節點仍然可(kě)以繼續提供服務(wù),保證了系統的高可(kě)用(yòng)性。

集群配置存儲:在Kubernetes中(zhōng),etcd被用(yòng)作(zuò)存儲和同步集群的配置數據,包括節點信息、Pod和Service的狀态、配置文(wén)件等。etcd存儲了整個集群的元數據,确保集群中(zhōng)的各個組件和資源的狀态保持一緻。

監控和調試:etcd提供了一些工(gōng)具(jù)和接口,用(yòng)于監控和調試集群的狀态和性能(néng)。用(yòng)戶可(kě)以通過etcd的API接口或命令行工(gōng)具(jù)來查詢和監控存儲的數據,并進行故障排除和性能(néng)優化。

安(ān)全性:etcd支持TLS加密通信,可(kě)以配置訪問控制策略來限制對存儲數據的訪問權限。它還提供了身份驗證和授權機制,确保隻有(yǒu)經過授權的用(yòng)戶才能(néng)訪問和修改存儲的數據。

K8S 的存儲服務(wù)。etcd 是分(fēn)布式鍵值存儲系統,存儲了 K8S 的關鍵配置和用(yòng)戶配置,K8S 中(zhōng)僅 API Server 才具(jù)備讀寫權限,其他(tā)組件必須通過 API Server 的接口才能(néng)讀寫數據。

Node
Kubelet
kubelet是Kubernetes集群中(zhōng)每個節點上的主要組件之一,它負責管理(lǐ)和監控節點上的容器。

容器生命周期管理(lǐ):kubelet負責管理(lǐ)節點上的容器的生命周期,包括創建、啓動、停止和銷毀容器。它會監控容器的狀态,并根據需要執行相應的操作(zuò),以确保容器按預期運行。

Pod和容器配置:kubelet根據來自Kubernetes API Server的指令,負責創建和管理(lǐ)Pod。它會根據Pod的配置信息,如容器鏡像、資源需求、環境變量等,來創建和配置容器。

資源管理(lǐ):kubelet會監控節點上的資源使用(yòng)情況,包括CPU、内存、存儲等,并根據Pod的資源需求進行資源分(fēn)配和管理(lǐ)。它會确保節點上的容器不會超出資源限制,以避免資源競争和過載。

健康檢查和自愈機制:kubelet會定期對容器進行健康檢查,檢測容器的運行狀态和健康狀況。如果容器出現故障或異常,kubelet會嘗試重新(xīn)啓動容器,以恢複容器的正常運行。

日志(zhì)和監控:kubelet會收集容器的日志(zhì)和監控數據,并将其發送到集中(zhōng)化的日志(zhì)和監控系統,以便用(yòng)戶和管理(lǐ)員進行查看和分(fēn)析。這有(yǒu)助于故障排除和性能(néng)優化。

安(ān)全性:kubelet負責确保節點上的容器的安(ān)全性。它會執行容器的安(ān)全策略,如限制容器的權限、隔離容器的網絡等,以保護節點和集群的安(ān)全。

與其他(tā)組件的通信:kubelet與其他(tā)Kubernetes組件,如kube-apiserver、kube-proxy等進行通信,以獲取指令、報告狀态和接收更新(xīn)。它通過與這些組件的交互,實現了集群的協調和管理(lǐ)。

在 Kubernetes 集群中(zhōng),在每個 Node(又(yòu)稱 Worker Node)上都會啓動一個 kubelet 服務(wù)進程。該進程用(yòng)于處理(lǐ) Master 下發到本節點的任務(wù),管理(lǐ) Pod 及 Pod 中(zhōng)的容器。每個 kubelet 進程都會在 API Server 上注冊節點自身的信息,定期向 Master 彙報節點資源的使用(yòng)情況,并通過 cAdvisor 監控容器和節點資源。

Kube-Proxy
服務(wù)代理(lǐ):kube-proxy通過監聽Kubernetes API Server上的Service和Endpoint對象的變化,動态地維護一個服務(wù)代理(lǐ)表。它會為(wèi)每個Service創建一個虛拟IP,并将流量轉發到後端的Pod實例。

負載均衡:kube-proxy使用(yòng)負載均衡算法将流量分(fēn)發到後端的Pod實例。它支持多(duō)種負載均衡模式,如輪詢、随機、最少連接等,以确保流量在Pod之間均勻分(fēn)布。

在每個 Node 節點上實現 Pod 網絡代理(lǐ),是 Kubernetes Service 資源的載體(tǐ),負責維護網絡規則和四層負載均衡工(gōng)作(zuò)。 負責寫入規則至iptables、ipvs實現服務(wù)映射訪問的。 Kube-Proxy 本身不是直接給 Pod 提供網絡,Pod 的網絡是由 Kubelet 提供的,Kube-Proxy 實際上維護的是虛拟的 Pod 集群網絡。 Kube-apiserver 通過監控 Kube-Proxy 進行對 Kubernetes Service 的更新(xīn)和端點的維護。 在 K8S 集群中(zhōng)微服務(wù)的負載均衡是由 Kube-proxy 實現的。Kube-proxy 是 K8S 集群内部的負載均衡器。它是一個分(fēn)布式代理(lǐ)服務(wù)器,在 K8S 的每個節點上都會運行一個 Kube-proxy 組件。

網絡通信模型
在Kubernetes(K8S)中(zhōng),網絡模型是用(yòng)于管理(lǐ)和組織容器之間通信的一種架構。Kubernetes使用(yòng)了一種稱為(wèi)"容器網絡接口"(Container Network Interface,CNI)的标準,來定義和實現容器之間的網絡通信。

Pod内部容器之間的網絡通信:在同一個Pod中(zhōng)的容器可(kě)以通過localhost進行直接通信,它們共享相同的網絡命名(míng)空間和IP地址。

Pod之間的網絡通信:不同Pod中(zhōng)的容器之間的通信需要通過網絡進行。每個Pod都被分(fēn)配一個唯一的IP地址,可(kě)以通過該IP地址進行通信。Pod之間的通信是通過網絡插件(如Flannel、Calico、Weave等)來實現的。

Pod到Service之間的網絡通信:Kubernetes中(zhōng)的Service是一種抽象,用(yòng)于将一組Pod封裝(zhuāng)為(wèi)一個邏輯服務(wù)。Service會為(wèi)這些Pod分(fēn)配一個虛拟IP地址,并通過負載均衡将流量分(fēn)發到這些Pod上。其他(tā)Pod可(kě)以通過Service的虛拟IP地址來訪問該服務(wù)。

集群外部與内部組件之間的網絡通信:Kubernetes集群外的組件(如外部服務(wù)、其他(tā)集群、雲服務(wù)等)可(kě)以通過Kubernetes提供的網絡代理(lǐ)或Ingress來與集群内的服務(wù)進行通信。網絡代理(lǐ)和Ingress可(kě)以将外部流量轉發到集群内部的Service或Pod。

具(jù)體(tǐ)的網絡實現取決于所選擇的網絡插件和配置。常見的網絡插件包括Flannel、Calico、Weave等,它們提供了不同的網絡方案和功能(néng),以滿足不同的需求和環境。這些網絡插件通過創建虛拟網絡、路由規則和網絡策略等方式,實現了Kubernetes中(zhōng)的網絡模型。

在Kubernetes中(zhōng),有(yǒu)三個與IP地址相關的概念:Node IP、Pod IP和Cluster IP。

Node IP(節點IP):Node IP是指Kubernetes集群中(zhōng)每個節點(Node)所分(fēn)配的IP地址。每個節點都有(yǒu)一個唯一的Node IP,用(yòng)于标識和訪問該節點。Node IP通常用(yòng)于集群外部與節點進行通信,例如從外部網絡訪問節點上運行的服務(wù)。

Pod IP(容器組IP):Pod IP是指Kubernetes集群中(zhōng)每個Pod所分(fēn)配的IP地址。Pod是Kubernetes中(zhōng)最小(xiǎo)的可(kě)調度和可(kě)管理(lǐ)的單元,每個Pod都有(yǒu)一個唯一的Pod IP。Pod IP用(yòng)于容器之間的通信,不同Pod中(zhōng)的容器可(kě)以通過Pod IP進行網絡通信。

Cluster IP(集群IP):Cluster IP是指Kubernetes集群中(zhōng)Service所分(fēn)配的虛拟IP地址。Service是Kubernetes中(zhōng)用(yòng)于封裝(zhuāng)一組Pod的邏輯服務(wù),為(wèi)這些Pod提供一個統一的入口。Cluster IP是Service的虛拟IP地址,用(yòng)于在集群内部進行服務(wù)發現和訪問。其他(tā)Pod可(kě)以通過Cluster IP來訪問Service提供的服務(wù)。

這些IP地址在Kubernetes中(zhōng)起着不同的作(zuò)用(yòng),Node IP用(yòng)于集群外部與節點通信,Pod IP用(yòng)于容器之間的通信,而Cluster IP用(yòng)于集群内部的服務(wù)發現和訪問。它們共同構成了Kubernetes中(zhōng)的網絡基礎設施。

容器引擎
在Kubernetes(K8S)中(zhōng),并沒有(yǒu)單獨的容器引擎。Kubernetes本身并不提供容器運行時,而是通過與容器運行時接口(Container Runtime Interface,CRI)兼容的容器運行時來運行和管理(lǐ)容器。

CRI是Kubernetes定義的一種接口規範,用(yòng)于與容器運行時進行通信和交互。它允許Kubernetes與不同的容器運行時進行集成,例如Docker、Containerd、CRI-O等。這些容器運行時負責實際的容器創建、管理(lǐ)和執行工(gōng)作(zuò)。

常見的Kubernetes容器運行時包括:

Docker:Docker是最常用(yòng)的容器運行時之一,它提供了廣泛的功能(néng)和工(gōng)具(jù),用(yòng)于創建、打包和運行容器。在較早的Kubernetes版本中(zhōng),Docker是默認的容器運行時。

Containerd:Containerd是一個輕量級的容器運行時,它是Docker的核心組件之一。Containerd提供了基本的容器管理(lǐ)功能(néng),可(kě)以與Kubernetes集成,作(zuò)為(wèi)Kubernetes的容器運行時。

CRI-O:CRI-O是一個專門為(wèi)Kubernetes設計的輕量級容器運行時,它符合CRI規範,并專注于提供最小(xiǎo)化的容器運行時功能(néng)。CRI-O使用(yòng)runc作(zuò)為(wèi)底層容器執行器,與Kubernetes緊密集成。

除了上述容器運行時,還有(yǒu)其他(tā)一些實現了CRI規範的容器運行時,如rkt(現已停止開發)、frakti等。這些容器運行時都可(kě)以與Kubernetes集成,作(zuò)為(wèi)Kubernetes的容器運行時。

k8s核心概念詳解
Kubernetes 包含多(duō)種類型的資源對象:Pod、Label、Service、Replication Controller 等。

Pod(容器組):Pod是Kubernetes中(zhōng)最小(xiǎo)的可(kě)調度和可(kě)管理(lǐ)的單元,它可(kě)以包含一個或多(duō)個容器,并共享相同的網絡和存儲資源。Pod是部署和擴展應用(yòng)程序的基本單位。

Label(标簽):Label是用(yòng)于标識和組織Kubernetes資源的鍵值對。通過為(wèi)資源對象添加标簽,可(kě)以對它們進行分(fēn)類、選擇和操作(zuò)。标簽可(kě)以用(yòng)于實現資源的分(fēn)組、服務(wù)發現、負載均衡等功能(néng)。

Service(服務(wù)):Service是一種抽象,用(yòng)于封裝(zhuāng)一組Pod,并為(wèi)它們提供一個統一的入口。Service為(wèi)這些Pod分(fēn)配一個虛拟IP地址,并通過負載均衡将流量分(fēn)發到這些Pod上,實現了服務(wù)的訪問和通信。

Namespace(命名(míng)空間):Namespace是用(yòng)于在Kubernetes集群中(zhōng)創建多(duō)個虛拟集群的一種機制。通過使用(yòng)命名(míng)空間,可(kě)以将不同的資源對象隔離開來,實現資源的多(duō)租戶和資源隔離。

Controller(控制器):Controller是一種用(yòng)于管理(lǐ)和控制資源對象的機制。Kubernetes提供了多(duō)種類型的控制器,如副本控制器、服務(wù)控制器等,用(yòng)于監控和管理(lǐ)集群中(zhōng)的各種資源。

Replication Controller(副本控制器):Replication Controller用(yòng)于确保Pod的副本數量與期望的副本數量保持一緻。它會監控Pod的狀态,并在需要時創建、删除或重新(xīn)調度Pod,以滿足用(yòng)戶定義的副本數量。

Kubernetes通過這些核心概念和機制,實現了容器化應用(yòng)程序的部署、管理(lǐ)和擴展。它提供了豐富的功能(néng)和工(gōng)具(jù),使得應用(yòng)程序的部署和運維變得更加簡單和高效。

所有(yǒu)的資源對象都可(kě)以通過 Kubernetes 提供的 kubectl 工(gōng)具(jù)進行增、删、改、查等操作(zuò),并将其保存在 etcd 中(zhōng)持久化存儲。 Kubernets其實是一個高度自動化的資源控制系統,通過跟蹤對比etcd存儲裏保存的資源期望狀态與當前環境中(zhōng)的實際資源狀态的差異,來實現自動控制和自動糾錯等高級功能(néng)。

Pod
它是最小(xiǎo)的可(kě)部署單元。一個Pod可(kě)以包含一個或多(duō)個容器,這些容器共享相同的網絡和存儲資源,并在同一主機上運行。

Pod提供了一個抽象層,用(yòng)于封裝(zhuāng)應用(yòng)程序的運行環境。它可(kě)以包含應用(yòng)程序所需的所有(yǒu)組件,如主應用(yòng)程序容器、輔助容器(如日志(zhì)收集器、輔助工(gōng)具(jù)等)以及共享的存儲卷。

Pod具(jù)有(yǒu)以下特點:

網絡共享:Pod中(zhōng)的所有(yǒu)容器共享相同的網絡命名(míng)空間和IP地址,它們可(kě)以通過localhost相互通信。

存儲共享:Pod中(zhōng)的所有(yǒu)容器可(kě)以訪問共享的存儲卷,這使得它們可(kě)以共享數據和文(wén)件。

生命周期:Pod具(jù)有(yǒu)自己的生命周期,它可(kě)以被創建、啓動、停止和銷毀。當Pod被銷毀時,其中(zhōng)的所有(yǒu)容器也會被終止。

調度和部署:Pod可(kě)以由Kubernetes調度器在集群中(zhōng)的節點上進行部署。調度器會考慮節點的資源和約束條件,選擇适合的節點來運行Pod。

Pod是臨時性的,它可(kě)以根據需要創建和銷毀。如果需要長(cháng)期運行的實例,可(kě)以使用(yòng)Pod控制器(如Deployment、ReplicaSet等)來管理(lǐ)Pod的生命周期和副本數量。

Pod 控制器
Pod控制器是Kubernetes中(zhōng)的一種資源對象,用(yòng)于管理(lǐ)和控制Pod的創建、更新(xīn)和删除。Pod控制器包括以下幾種類型:

ReplicaSet(副本集):ReplicaSet确保指定數量的Pod副本在集群中(zhōng)運行。它可(kě)以根據需要進行自動擴展或縮減Pod的數量,以滿足應用(yòng)程序的需求。

Deployment(部署):Deployment建立在ReplicaSet之上,它用(yòng)于定義應用(yòng)程序的期望狀态,并确保該狀态得到維持。Deployment支持滾動更新(xīn)和回滾操作(zuò),可(kě)以方便地進行應用(yòng)程序的發布和更新(xīn)。

StatefulSet(有(yǒu)狀态副本集):StatefulSet用(yòng)于管理(lǐ)有(yǒu)狀态應用(yòng)程序的Pod副本。它為(wèi)每個Pod分(fēn)配一個唯一的标識符,并提供穩定的網絡标識和存儲卷,确保有(yǒu)狀态應用(yòng)程序的數據持久性和順序性。

DaemonSet(守護進程集):DaemonSet用(yòng)于在集群中(zhōng)的每個節點上運行一個Pod副本。它通常用(yòng)于運行一些系統級别的服務(wù),如日志(zhì)收集、監控等。

Job(作(zuò)業):Job用(yòng)于運行一次性任務(wù)或批處理(lǐ)任務(wù)。它确保任務(wù)成功完成,并可(kě)以設置重試策略和并行度。

這些Pod控制器提供了不同的功能(néng)和用(yòng)途,可(kě)以根據應用(yòng)程序的需求選擇合适的控制器來管理(lǐ)Pod的生命周期。它們通過監控和調整Pod的數量和狀态,确保應用(yòng)程序的高可(kě)用(yòng)性和可(kě)靠性。

Label
在Kubernetes中(zhōng),Label(标簽)是一種用(yòng)于标識和組織資源的關鍵概念。它是一個鍵值對的元數據,可(kě)以附加到Kubernetes對象(如Pod、Service、Deployment等)上。

以下是一些關于标簽的重要信息:

标簽的結構:标簽由鍵值對組成,例如"app=frontend"或"tier=backend"。鍵和值都是字符串類型,且鍵必須是唯一的。

标簽的作(zuò)用(yòng):标簽可(kě)以用(yòng)于對資源進行分(fēn)類、篩選和選擇。通過為(wèi)資源添加标簽,可(kě)以更方便地管理(lǐ)和操作(zuò)它們。

标簽的用(yòng)途:标簽可(kě)以用(yòng)于多(duō)種用(yòng)途,例如:

選擇器(Selector):可(kě)以使用(yòng)标簽選擇器來選擇具(jù)有(yǒu)特定标簽的資源。這在創建Service、Deployment等對象時非常有(yǒu)用(yòng)。

資源組織:可(kě)以使用(yòng)标簽将相關的資源進行分(fēn)組和組織。例如,可(kě)以為(wèi)所有(yǒu)屬于同一應用(yòng)程序的資源添加相同的标簽。

資源管理(lǐ):可(kě)以使用(yòng)标簽來跟蹤和管理(lǐ)資源。通過為(wèi)資源添加标簽,可(kě)以更容易地識别和操作(zuò)它們。

标簽的添加和修改:可(kě)以在創建資源時為(wèi)其添加标簽,也可(kě)以在後續的操作(zuò)中(zhōng)對标簽進行修改。例如,可(kě)以使用(yòng)kubectl命令行工(gōng)具(jù)為(wèi)Pod添加或修改标簽。

标簽的查詢和選擇:可(kě)以使用(yòng)标簽選擇器來查詢和選擇具(jù)有(yǒu)特定标簽的資源。選擇器可(kě)以使用(yòng)等于、不等于、存在、不存在等操作(zuò)符進行條件篩選。

通過使用(yòng)标簽,可(kě)以更靈活地管理(lǐ)和操作(zuò)Kubernetes中(zhōng)的資源。它提供了一種簡單而強大的方式來組織、選擇和管理(lǐ)資源,使得應用(yòng)程序的部署和管理(lǐ)更加靈活和可(kě)靠。

Label 選擇器
在Kubernetes中(zhōng),标簽選擇器(Label selector)是一種用(yòng)于查詢和篩選具(jù)有(yǒu)特定标簽的資源對象的機制。

标簽選擇器有(yǒu)兩種類型:基于等值關系和基于集合關系。

基于等值關系的标簽選擇器:

=:選擇具(jù)有(yǒu)指定标簽鍵和值相等的資源對象。

!=:選擇具(jù)有(yǒu)指定标簽鍵但值不等于指定值的資源對象。

基于集合關系的标簽選擇器:

in:選擇具(jù)有(yǒu)指定标簽鍵且值在指定值列表中(zhōng)的資源對象。

notin:選擇具(jù)有(yǒu)指定标簽鍵但值不在指定值列表中(zhōng)的資源對象。

exists:選擇具(jù)有(yǒu)指定标簽鍵的資源對象。

!exists:選擇沒有(yǒu)指定标簽鍵的資源對象。

以下是一個示例,展示如何使用(yòng)标簽選擇器查詢和篩選具(jù)有(yǒu)特定标簽的Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
  labels:
    app: my-app
    environment: production
要查詢和篩選具(jù)有(yǒu)特定标簽的Pod,可(kě)以使用(yòng)标簽選擇器表達式,例如:

app=my-app:選擇具(jù)有(yǒu)标簽app的值為(wèi)my-app的Pod。

environment!=development:選擇具(jù)有(yǒu)标簽environment的值不為(wèi)development的Pod。

app in (my-app, your-app):選擇具(jù)有(yǒu)标簽app的值為(wèi)my-app或your-app的Pod。

Service 服務(wù)
Service(服務(wù))是一種抽象的概念,用(yòng)于定義一組Pod的訪問方式和網絡連接。Service為(wèi)Pod提供了一個穩定的網絡地址和DNS名(míng)稱,使得其他(tā)應用(yòng)程序可(kě)以通過該地址和名(míng)稱與Pod進行通信。

Service的主要作(zuò)用(yòng)是實現負載均衡和服務(wù)發現。它将流量分(fēn)發到後端的Pod,可(kě)以确保請求被均勻地分(fēn)發到可(kě)用(yòng)的Pod上,從而提高應用(yòng)程序的可(kě)用(yòng)性和性能(néng)。

在Kubernetes(K8S)集群中(zhōng),每個Pod都有(yǒu)一個單獨的IP地址。然而,由于Pod具(jù)有(yǒu)生命周期,可(kě)能(néng)會因為(wèi)業務(wù)變更而銷毀并重新(xīn)創建,導緻其IP地址也會改變。

為(wèi)了解決這個問題,K8S引入了Service作(zuò)為(wèi)核心概念。在K8S中(zhōng),Service并不是傳統意義上的"服務(wù)",而更像是一個網關層,用(yòng)于提供一組Pod的對外訪問接口和流量均衡。

Service通過标簽選擇器來确定作(zuò)用(yòng)于哪些Pod。在K8S集群中(zhōng),客戶端需要訪問的服務(wù)就是Service對象。每個Service都有(yǒu)一個固定的虛拟IP(也稱為(wèi)Cluster IP),它會自動綁定到後端的Pod,并将所有(yǒu)網絡請求轉發給這些Pod。

除了提供穩定的對外訪問方式,Service還具(jù)備負載均衡的功能(néng),可(kě)以自動将請求流量分(fēn)發到後端的所有(yǒu)Pod上。Service還能(néng)夠實現透明的水平擴展,對客戶端來說是無感知的。

實現Service功能(néng)的關鍵是kube-proxy。kube-proxy在每個節點上運行,監聽API Server中(zhōng)服務(wù)對象的變化,并通過三種流量調度模式(userspace、iptables、ipvs)來實現網絡轉發。

Service是K8S服務(wù)的核心,它屏蔽了服務(wù)的細節,統一對外暴露服務(wù)接口,實現了真正的"微服務(wù)"。對于用(yòng)戶來說,隻需要關注一個Service的入口,而不需要關心具(jù)體(tǐ)請求哪個Pod。

這樣做的優勢非常明顯:外部用(yòng)戶不需要關注Pod意外崩潰或K8S重新(xīn)創建Pod導緻的IP變化,也不需要關注升級或變更服務(wù)導緻的Pod替換和IP變化。

以下是一些關鍵的Service特性和概念:

ClusterIP:每個Service都有(yǒu)一個ClusterIP,它是Service在集群内部的虛拟IP地址。其他(tā)Pod或Service可(kě)以通過該IP地址與Service進行通信。

Service類型:Kubernetes支持多(duō)種Service類型,包括ClusterIP、NodePort、LoadBalancer和ExternalName。每種類型都有(yǒu)不同的用(yòng)途和配置方式。

Selector:Service使用(yòng)Selector來标識它所關聯的Pod。通過标簽選擇器,Service可(kě)以将流量轉發到具(jù)有(yǒu)特定标簽的Pod上。

端口映射:Service可(kě)以将外部請求的端口映射到後端Pod的端口。這樣,外部應用(yòng)程序可(kě)以通過Service的IP地址和映射的端口與Pod進行通信。

Headless Service:除了普通的Service類型,Kubernetes還支持Headless Service。Headless Service不會分(fēn)配ClusterIP,而是直接暴露後端Pod的網絡地址。

Ingress
在Kubernetes集群中(zhōng),Service主要負責集群内部的網絡拓撲,它提供了一種抽象的方式來訪問一組Pod。但是,如果要從集群外部訪問集群内部的服務(wù),就需要使用(yòng)Ingress。

Ingress充當了整個Kubernetes集群的接入層,它負責處理(lǐ)集群内外的通信。作(zuò)為(wèi)第7層應用(yòng)層的組件,Ingress可(kě)以通過HTTP/HTTPS等協議對外暴露服務(wù)。

與Service不同,Service隻能(néng)進行第4層的流量調度,使用(yòng)IP地址和端口進行訪問。而Ingress可(kě)以根據不同的業務(wù)域和URL訪問路徑來調度業務(wù)流量。

用(yòng)于将外部流量路由到集群内部的服務(wù)。它充當了集群和外部網絡之間的入口點。

具(jù)體(tǐ)來說,Ingress定義了一組規則,用(yòng)于将外部請求路由到集群内部的服務(wù)。它可(kě)以根據請求的主機名(míng)、路徑或其他(tā)标識符将流量轉發到相應的服務(wù)。通過使用(yòng)Ingress,可(kě)以實現負載均衡、SSL終止、路徑基礎的路由等功能(néng)。

在使用(yòng)Ingress之前,需要先部署一個Ingress控制器。Ingress控制器是一個運行在集群中(zhōng)的組件,負責監視Ingress資源的變化,并根據規則配置負載均衡器或代理(lǐ)服務(wù)器來處理(lǐ)外部流量。

一旦Ingress控制器部署好并配置了相應的規則,外部流量就可(kě)以通過Ingress路由到集群内部的服務(wù)。這樣,可(kě)以通過一個統一的入口點來訪問多(duō)個服務(wù),而無需暴露每個服務(wù)的具(jù)體(tǐ)地址。

總之,Ingress是Kubernetes中(zhōng)用(yòng)于管理(lǐ)外部流量訪問的一種機制,它通過定義規則将外部請求路由到集群内部的服務(wù),提供了更靈活和可(kě)擴展的流量管理(lǐ)方式。

Name
在Kubernetes中(zhōng),每個資源都有(yǒu)自己的名(míng)稱,通常定義在資源的元數據(metadata)中(zhōng)。元數據包含了一些描述資源的屬性,其中(zhōng)包括名(míng)稱(name)屬性。

名(míng)稱在同一個命名(míng)空間(namespace)中(zhōng)必須是唯一的,這意味着在同一個命名(míng)空間中(zhōng)不能(néng)存在相同名(míng)稱的資源。這樣可(kě)以确保在集群中(zhōng)對資源進行唯一标識和引用(yòng)。

除了名(míng)稱,元數據還可(kě)以包含其他(tā)屬性,如标簽(labels)和注釋(annotations)。标簽用(yòng)于對資源進行分(fēn)類和組織,而注釋則是一些額外的描述性信息。

通過名(míng)稱和其他(tā)元數據屬性,可(kě)以在Kubernetes中(zhōng)對資源進行識别、查詢和操作(zuò)。這些屬性在定義資源的清單文(wén)件或通過Kubernetes API進行編程時非常重要。

Namespace 命名(míng)空間
Namespace(命名(míng)空間),用(yòng)于在集群中(zhōng)創建虛拟的工(gōng)作(zuò)環境,将資源進行隔離和分(fēn)類。它可(kě)以幫助不同的團隊或項目在同一個集群中(zhōng)共享資源,同時保持彼此之間的隔離。

使用(yòng)Namespace可(kě)以将集群中(zhōng)的資源劃分(fēn)為(wèi)邏輯上獨立的單元,每個Namespace都有(yǒu)自己的資源配額、網絡和存儲資源。不同的Namespace可(kě)以擁有(yǒu)相同名(míng)稱的資源,但它們彼此之間是隔離的,不會相互幹擾。

Namespace的主要作(zuò)用(yòng)包括:

隔離和分(fēn)類:通過将資源劃分(fēn)到不同的Namespace中(zhōng),可(kě)以将不同的團隊、項目或環境隔離開來,避免資源沖突和幹擾。

訪問控制:可(kě)以使用(yòng)RBAC(Role-Based Access Control)等機制對不同的Namespace進行權限控制,限制用(yòng)戶或團隊對資源的訪問和操作(zuò)。

資源配額:可(kě)以為(wèi)每個Namespace設置資源配額,限制其使用(yòng)的計算、存儲和網絡資源的數量,以避免資源被某個Namespace過度占用(yòng)。

管理(lǐ)和監控:通過将資源按照Namespace進行分(fēn)類,可(kě)以更方便地管理(lǐ)和監控集群中(zhōng)的資源使用(yòng)情況,進行故障排查和性能(néng)優化。

在Kubernetes中(zhōng),默認會創建一個名(míng)為(wèi)"default"的Namespace,如果沒有(yǒu)顯式指定Namespace,資源将被分(fēn)配到"default" Namespace中(zhōng)。除了"default" Namespace外,還可(kě)以創建自定義的Namespace,根據實際需求進行資源的劃分(fēn)和管理(lǐ)。

不同 Namespace 内的 “資源” 名(míng)稱可(kě)以相同,相同 Namespace 内的同種 “資源”,“名(míng)稱” 不能(néng)相同。 合理(lǐ)的使用(yòng) K8S 的 Namespace,可(kě)以使得集群管理(lǐ)員能(néng)夠更好的對交付到 K8S 裏的服務(wù)進行分(fēn)類管理(lǐ)和浏覽。查詢 K8S 裏特定 “資源” 要帶上相應的 Namespace。


付費1元即可(kě)閱讀全文(wén)

三年片在线观看大全 高雅人妻被迫沦为玩物 女人性做爰100部免费 中文AV人妻AV无码中文视频 班主任解开内裤让我桶她 小奶狗腹肌体育生天台放烟花 被黑人的巨茎日出白浆 火热的领居中文字 双乳被两个男人吸住 144447大但人文艺术 公与淑婷厨房猛烈进出演员表 和漂亮老师做爰6 亚洲精品久久久蜜桃 国产精品999 99热在线观看 鉴黄师APP安装 大地中文在线观看免费高清 上司的丰满人妻3 丰年经继拇中文2优惠 国产无码AV 男人边吻奶边挵进去A片小说 亚洲无码在线播放 成人交性视频免费看 男人添女人下部高潮全视频 男妓跪趴把舌头伸进我的嘴巴 国产电影一曲二曲三曲图片 校花被黑人伦流澡H李芷珊 抹布文双男主多人 三年在线观看免费大全 亚洲成色7777777久久 日日躁夜夜躁白天躁晚上 亚洲AV网站 欧美寡妇性猛交XXX无码 三妻四妾免费观看完整版 私人生活艾伦里克曼 樱花电影大全免费高清观看 成全电影大全免费观看完整版国语 高潮了夹住男朋友不让他动 最好看的中文字幕国语电视剧 丰年经继拇中文3与其他教材比较 久久影院午夜理论片无码 少妇真人直播APP 9I传媒有限公司 还债的朋友麦子中字 丰满少妇伦精品无码专区 丰满的继牳伦理 初次爱你插曲闯进我的世界 欧美尺码日本尺码专线 美女直播全婐APP免费 真人 17岁完整版高清免费观看 十九岁日本电影免费粤语高清 十九岁免费观看全集完整版 野外一面膜胸口一面膜下 少女哔哩哔哩高清免费播放 大地资源在线观看免费中文版 国产成人AV 和房东在做爰2 HP公交车灌溉系统隐形人 公交车艳妇系列1一40 玩弄人妻少妇500系列 日本猛少妇色XXXXX猛叫 红桃成人无码免费网站 啊灬啊灬啊灬快灬深草莓视频 CSGO高清视频免费播放 一晚上接8上个客 欧美性猛交99久久久久99按摩 最好看的2018中文免费看 午夜福利视频 人妻换人妻互换A片爽文 嗯灬啊灬把腿张开灬A片视频网站 免费视频WWW可观看网站 最近中文字幕MV第三季歌词 精跪趴灌满H室友4P公交车 星空无痕MV免费视频观看 出轨熟女人妻HD中文 X7X7X7任意噪108 出轨熟女人妻HD中文 精品国产AV色一区二区深夜久久 国产精品久久久久久妇女6080 朋友的家长中韩双字