華為雲-容器引擎CCE-基本概念
華為雲-容器引擎CCE-基本概念
https://blog.csdn.net/KH_FC/article/details/111373386
雲容器引擎(Cloud Container Engine,簡稱CCE)提供高度可擴充套件的、高效能的企業級Kubernetes叢集,支援執行Docker容器。藉助雲容器引擎,您可以在華為雲上輕鬆部署、管理和擴充套件容器化應用程式。
雲容器引擎提供Kubernetes原生API,支援使用kubectl,且提供圖形化控制檯,讓您能夠擁有完整的端到端使用體驗,使用雲容器引擎前,建議您先了解相關的基本概念。
叢集(Cluster)
叢集指容器執行所需要的雲資源組合,關聯了若干雲服務器節點、負載均衡等雲資源。您可以理解為叢集是“同一個子網中一個或多個彈性雲伺服器(又稱:節點)”通過相關技術組合而成的計算機群體,為容器執行提供了計算資源池。
節點(Node)
每一個節點對應一臺伺服器(可以是虛擬機器例項或者物理伺服器),容器應用執行在節點上。節點上執行著Agent代理程式(kubelet),用於管理節點上執行的容器例項。叢集中的節點數量可以伸縮。
節點池(NodePool)
節點池是叢集中具有相同配置的一組節點,一個節點池包含一個節點或多個節點。
虛擬私有云(VPC)
虛擬私有云是通過邏輯方式進行網路隔離,提供安全、隔離的網路環境。您可以在VPC中定義與傳統網路無差別的虛擬網路,同時提供彈性IP、安全組等高階網路服務。
安全組
安全組是一個邏輯上的分組,為同一個VPC內具有相同安全保護需求並相互信任的彈性雲伺服器提供訪問策略。安全組建立後,使用者可以在安全組中定義各種訪問規則,當彈性雲伺服器加入該安全組後,即受到這些訪問規則的保護。
詳細介紹請參見安全組。
叢集、虛擬私有云、安全組和節點的關係
如下圖,同一個Region下可以有多個虛擬私有云(VPC)。虛擬私有云由一個個子網組成,子網與子網之間的網路互動通過子網閘道器完成,而叢集就是建立在某個子網中。因此,存在以下三種場景:
不同叢集可以建立在不同的虛擬私有云中。
不同叢集可以建立在同一個子網中。
不同叢集可以建立在不同的子網中。
叢集、VPC、安全組和節點的關係
例項(Pod)
例項(Pod)是 Kubernetes 部署應用或服務的最小的基本單位。一個Pod 封裝多個應用容器(也可以只有一個容器)、儲存資源、一個獨立的網路 IP 以及管理控制容器執行方式的策略選項。
例項(Pod)
容器(Container)
一個通過 Docker 映象建立的執行例項,一個節點可執行多個容器。容器的實質是程序,但與直接在宿主執行的程序不同,容器程序運行於屬於自己的獨立的名稱空間。
工作負載
工作負載即Kubernetes對一組Pod的抽象模型,用於描述業務的執行載體,包括Deployment、Statefulset、Daemonset、Job、CronJob等多種型別。
- 無狀態工作負載:即kubernetes中的“Deployment”,無狀態工作負載支援彈性伸縮與滾動升級,適用於例項完全獨立、功能相同的場景,如:nginx、wordpress等。
- 有狀態工作負載:即kubernetes中的“StatefulSet”,有狀態工作負載支援例項有序部署和刪除,支援持久化儲存,適用於例項間存在互訪的場景,如ETCD、mysql-HA等。
-
建立守護程序集:即kubernetes中的“DaemonSet”,守護程序集確保全部(或者某些)節點都執行一個Pod例項,支援例項動態新增到新節點,適用於例項在每個節點上都需要執行的場景,如ceph、fluentd、Prometheus
Node Exporter等。 - 普通任務:即kubernetes中的“Job”,普通任務是一次性執行的短任務,部署完成後即可執行。使用場景為在建立工作負載前,執行普通任務,將映象上傳至映象倉庫。
- 定時任務:即kubernetes中的“CronJob”,定時任務是按照指定時間週期執行的短任務。使用場景為在某個固定時間點,為所有執行中的節點做時間同步。
工作負載與Pod的關係
編排模板
編排模板包含了一組容器服務的定義和其相互關聯,可以用於多容器應用的部署和管理。
映象(Image)
Docker映象是一個模板,是容器應用打包的標準格式,用於建立Docker容器。或者說,Docker映象是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的配置引數(如匿名卷、環境變數、使用者等)。映象不包含任何動態資料,其內容在構建之後也不會被改變。在部署容器化應用時可以指定映象,映象可以來自於 Docker Hub、華為雲容器映象服務或者使用者的私有 Registry。例如一個Docker映象可以包含一個完整的Ubuntu作業系統環境,裡面僅安裝了使用者需要的應用程式及其依賴檔案。
映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的類和例項一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。
映象、容器、工作負載的關係
名稱空間(Namespace)
名稱空間是對一組資源和物件的抽象整合。在同一個叢集內可建立不同的名稱空間,不同名稱空間中的資料彼此隔離。使得它們既可以共享同一個叢集的服務,也能夠互不干擾。例如:
- 可以將開發環境、測試環境的業務分別放在不同的名稱空間。
- 常見的pods, services, replication
controllers和deployments等都是屬於某一個namespace的(預設是default),而node,
persistentVolumes等則不屬於任何namespace。
服務(Service)
Service是將執行在一組 Pods 上的應用程式公開為網路服務的抽象方法。
使用Kubernetes,您無需修改應用程式即可使用不熟悉的服務發現機制。 Kubernetes為Pods提供自己的IP地址和一組Pod的單個DNS名稱,並且可以在它們之間進行負載平衡。
Kubernetes允許指定一個需要的型別的 Service,型別 的取值以及行為如下:
- ClusterIP:叢集內訪問。通過叢集的內部 IP 暴露服務,選擇該值,服務只能夠在叢集內部可以訪問,這也是預設的
ServiceType。 - NodePort:節點訪問。通過每個 Node 上的 IP 和靜態埠(NodePort)暴露服務。NodePort 服務會路由到
ClusterIP 服務,這個 ClusterIP 服務會自動建立。通過請求
:,可以從叢集的外部訪問一個 NodePort 服務。 - LoadBalancer:負載均衡。使用雲提供商的負載均衡器,可以向外部暴露服務。外部的負載均衡器可以路由到 NodePort 服務和
ClusterIP 服務。 - DNAT:DNAT閘道器。可以為叢集節點提供網路地址轉換服務,使多個節點可以共享使用彈性IP。與彈性IP方式相比增強了可靠性,彈性IP無需與單個節點繫結,任何節點狀態的異常不影響其訪問
七層負載均衡(Ingress)
Ingress是為進入叢集的請求提供路由規則的集合,可以給service提供叢集外部訪問的URL、負載均衡、SSL終止、HTTP路由等。
網路策略(NetworkPolicy)
NetworkPolicy提供了基於策略的網路控制,用於隔離應用並減少攻擊面。它使用標籤選擇器模擬傳統的分段網路,並通過策略控制它們之間的流量以及來自外部的流量。
配置項(Configmap)
ConfigMap用於儲存配置資料的鍵值對,可以用來儲存單個屬性,也可以用來儲存配置檔案。ConfigMap跟secret很類似,但它可以更方便地處理不包含敏感資訊的字串。
金鑰(Secret)
Secret解決了密碼、token、金鑰等敏感資料的配置問題,而不需要把這些敏感資料暴露到映象或者Pod Spec中。Secret可以以Volume或者環境變數的方式使用。
標籤(Label)
標籤其實就一對 key/value,被關聯到物件上,比如Pod。標籤的使用我們傾向於能夠標示物件的特殊特點,並且對使用者而言是有意義的,但是標籤對核心系統是沒有直接意義的。
選擇器(LabelSelector)
Label selector是Kubernetes核心的分組機制,通過label selector客戶端/使用者能夠識別一組有共同特徵或屬性的資源物件。
註解(Annotation)
Annotation與Label類似,也使用key/value鍵值對的形式進行定義。
Label具有嚴格的命名規則,它定義的是Kubernetes物件的元資料(Metadata),並且用於Label Selector。
Annotation則是使用者任意定義的“附加”資訊,以便於外部工具進行查詢。
儲存卷(PersistentVolume)
PersistentVolume(PV)是叢集之中的一塊網路儲存。跟 Node 一樣,也是叢集的資源。
儲存宣告(PersistentVolumeClaim)
PV 是儲存資源,而 PersistentVolumeClaim (PVC) 是對 PV 的請求。PVC 跟 Pod 類似:Pod 消費 Node 資源,而 PVC 消費 PV 資源;Pod 能夠請求 CPU 和記憶體資源,而 PVC 請求特定大小和訪問模式的資料卷。
彈性伸縮(HPA)
Horizontal Pod Autoscaling,簡稱HPA,是Kubernetes中實現POD水平自動伸縮的功能。Kubernetes叢集可以通過Replication Controller的scale機制完成服務的擴容或縮容,實現具有伸縮性的服務。
親和性與反親和性
在應用沒有容器化之前,原先一個虛機上會裝多個元件,程序間會有通訊。但在做容器化拆分的時候,往往直接按程序拆分容器,比如業務程序一個容器,監控日誌處理或者本地資料放在另一個容器,並且有獨立的生命週期。這時如果他們分佈在網路中兩個較遠的點,請求經過多次轉發,效能會很差。
- 親和性:可以實現就近部署,增強網路能力實現通訊上的就近路由,減少網路的損耗。如:應用A與應用B兩個應用頻繁互動,所以有必要利用親和性讓兩個應用的儘可能的靠近,甚至在一個節點上,以減少因網路通訊而帶來的效能損耗。
- 反親和性:主要是出於高可靠性考慮,儘量分散例項,某個節點故障的時候,對應用的影響只是 N
分之一或者只是一個例項。如:當應用採用多副本部署時,有必要採用反親和性讓各個應用例項打散分佈在各個節點上,以提高HA。
節點親和性(NodeAffinity)
通過選擇標籤的方式,可以限制pod被排程到特定的節點上。
節點反親和性(NodeAntiAffinity)
通過選擇標籤的方式,可以限制pod不被排程到特定的節點上。
工作負載親和性(PodAffinity)
指定工作負載部署在相同節點。使用者可根據業務需求進行工作負載的就近部署,容器間通訊就近路由,減少網路消耗。
工作負載反親和性(PodAntiAffinity)
指定工作負載部署在不同節點。同個工作負載的多個例項反親和部署,減少宕機影響;互相干擾的應用反親和部署,避免干擾。
資源配額(Resource Quota)
資源配額(Resource Quotas)是用來限制使用者資源用量的一種機制。
資源限制(Limit Range)
預設情況下,K8S中所有容器都沒有任何CPU和記憶體限制。LimitRange(簡稱limits)用來給Namespace增加一個資源限制,包括最小、最大和預設資源。在pod建立時,強制執行使用limits的引數分配資源。
環境變數
環境變數是指容器執行環境中設定的一個變數,您可以在建立容器模板時設定不超過30個的環境變數。環境變數可以在工作負載部署後修改,為工作負載提供了極大的靈活性。
在CCE中設定環境變數與Dockerfile中的“ENV”效果相同。
應用服務網格(Istio)
Istio是一個提供連線、保護、控制以及觀測功能的開放平臺。
雲容器引擎深度集成了應用服務網格,提供非侵入式的微服務治理解決方案,支援完整的生命週期管理和流量治理能力,相容Kubernetes和Istio生態。一鍵開啟應用服務網格後即可提供非侵入的智慧流量治理解決方案,其功能包括負載均衡、熔斷、限流等多種治理能力。應用服務網格內建金絲雀、藍綠等多種灰度釋出流程,提供一站式自動化的釋出管理。基於無侵入的監控資料採集,深度整合華為雲應用效能管理(APM)能力,提供實時流量拓撲、呼叫鏈等服務效能監控和執行診斷,構建全景的服務執行檢視。