天天看點

k8s叢集概念元件簡介

作者:散文随風想

一、Kubernetes 叢集概述

k8s的全生命周期管理:

在k8s進行管理應用的時候,基本步驟是:建立叢集,部署應用,釋出應用,擴充應用,更新應用。

-- master:

kubectl: k8s的所有操作都是通過kubectl指令操作的

REST API:k8s對外部服務提供的接口服務,例如圖形化界面或者kubectl都會通過REST API接口下發指令來控制k8s

scheduler:排程器,例如建立pod,scheduler可以控制将pod配置設定到哪個pod節點

controller-manager:檢測pod或者node的健康狀态,并維持pod的正常運作,如果pod故障,controller-manger會自動修複,例如在啟動一個pod副本

kubelet:代理軟體,例如在master上對node節點下發的指令,都需要通過kubelet組建來告知各個元件

etcd:資料庫,所有配置資料都存放在etcd資料庫中

kubeproxy:在所有節點都需要運作kubeproxy,後期通過建立svc來将pod映射到外網,當外部通過svc-ip通路pod的時候就需要通過kubeporxy進行路由轉發到pod

-- node:

pod:k8s環境運作的最小機關,一個pod中可以包含一個或多個容器

k8s叢集概念元件簡介
k8s叢集概念元件簡介

1.2 Kubernetes 資源

資源 用途
服務(Service) Kubernetes 使用服務在一組 pod 上公開正在運作的應用程式。
ReplicaSet Kubernetes 使用 ReplicaSet 來維護恒定的 pod 号。
Deployment 維護應用程式生命周期的資源對象。

1.3 Kubernetes 構架

Kubernetes 叢集包含一個 control plane 和 worker 節點。

Kubernetes 容器可以運作 在各種機器和環境中。

control plane 節點控制和維護叢集的狀态。

worker 節點運作 Kubernetes 應用程式。

Kubernetes 命名空間用來區分叢集中的叢集資源。命名空間範圍适用于資源對象,如部署、服務和 pod。

不能将命名空間用于叢集範圍的資源對象,如存儲類、節點和持久性卷。

k8s叢集概念元件簡介

1.4 Kubernetes 概念指南

  • 從一個或多個 worker 節點開始,以運作容器工作負載。
  • 從一個或多個 control plane 節點管理這些工作負載的部署。
  • 将容器嵌套到名為 pod 的部署單元中。使用 pod 可以為容器提供額外的中繼資料,并可在單個部署實體中對多個容器進行分組。
  • 建立特殊種類的資産。例如,服務由一組 pod 及定義了通路方式的政策來表示。此政策可使容器連接配接到所需的服務,即便容器沒有用于服務的特定 IP 位址。複制控制器(replication controller)是另一種特殊資産,用于訓示一次需要運作多少個 pod 副本。您可以使用此功能來自動擴充應用程式,以适應其目前的需求。

1.5 Kubernetes 元件

元件 用途
kube-proxy 在應用元件間負載均衡網絡流量。
kube-controller-manager 執行叢集級别的功能,如複制元件、追蹤工作結點狀态、處理結點失敗等。Controller Manager元件是由多個控制器組成的,其中很多控制器是按K8s的資源類型劃分的,如Replication Manager(管理ReplicationController 資源),ReplicaSet Controller,PersistentVolume controller。
kube-scheduler 排程元件,為使用者應用的每一可部署元件配置設定工作結點。
etcd 一款開源軟體。提供可靠的分布式資料存儲服務,用于持久化存儲K8s叢集的配置和狀态
kube-apiserver 驗證并配置 API 對象的資料。是使用者程式(如kubectl)、K8s其它元件之間通信的接口。K8s其它元件之間不直接通信,而是通過API server通信的。例如,隻有API server連接配接了etcd,即其它元件更新K8s叢集的狀态時,隻能通過API server讀寫etcd中的資料。
kubelet 在節點上運作并讀取容器清單。確定定義的容器已啟動且正在運作。
kubectl 管理工作結點上的容器。使用 kubectl 指令與 kube-apiserver 進行互動。
節點 節點是 Kubernetes 叢集中的實體機器或虛拟機。控制平面(control plane)管理每個節點,并在 Kubernetes 叢集中的節點之間排程 pod。
容器運作時 容器運作時在主機作業系統上運作容器。您必須在每個節點上安裝容器運作時,以便 pod 能夠在該節點上運作。
持久性存儲 即便在裝置關閉後也存儲資料。Kubernetes 使用持久性卷來存儲應用程式資料。
container-registry 存儲和通路容器鏡像。
Pod pod 是 Kubernetes 中的最小邏輯單元。pod 包含一個或多個在 worker 節點上運作的容器。
flannel 開源容器叢集子網。

1.6 k8s概念詳解

Kubernetes

Kubernetes 是一個開源容器編配引擎,用于自動化容器化應用程式的部署、擴充和管理。

容器

容器是 worker 節點上以 OCI 相容容器中運作的應用程式執行個體群組件。容器是開放容器項目(OCI)相容鏡像的運作時。鏡像是二進制應用。worker 節點可以運作多個容器。節點容量與底層資源的記憶體和 CPU 功能相關,無論它們是雲、硬體還是虛拟化。

Pod

pod 是共同部署在同一主機上的一個或多個容器。包含一組有共享資源(如卷和 IP 位址)的容器。pod 也是定義、部署和管理的最小計算單元。

在 OpenShift Container Platform 中,pod 替代了獨立的應用程式容器作為最小的可部署單元。

Pod 是 OpenShift Container Platform 中編配的單元。OpenShift Container Platform 在同一個節點上的一個 pod 中調用并運作所有容器。複雜的應用由多個 pod 組成,每個 pod 都有自己的容器。它們與外部進行互動,也在 OpenShift Container Platform 環境中互相互動。

副本集和複制控制器

Kubernetes 副本集和 OpenShift Container Platform 複制控制器,可同時使用,確定在所有時間都有指定數量的 pod 副本在運作。如果 pod 退出或被删除,副本集或複制控制器會啟動其他 pod 也保證運作的數量。如果運作的 pod 數量超過了指定值,副本集将根據需要删除以比對指定的副本數。

部署(Deployment)和部署配置(DeploymentConfig)

OpenShift Container Platform 可以使用 Kubernetes Deployment 對象和 OpenShift Container Platform DeploymentConfig 對象,使用者可以選擇其中的一個。

Deployment 對象控制應用程式用于 pod的部署,首先從 registry 中擷取的容器鏡像的名稱,并作為 pod 部署到節點上, 并設定要部署的 pod 的副本數,建立副本集來管理該程序。

Deployment 對象可以根據 Deployment 對象版本和各種 rollout 政策來更新部署到 worker 節點上的 pod,以管理應用程式的可用性。

OpenShift Container Platform DeploymentConfig 對象添加了更改觸發器的額外功能,這些觸發器可以在容器鏡像的新版本或其他更改時自動建立 Deployment 對象的新版本。

服務(Service)

Service定義了一組邏輯的 pod 和通路政策,為其他應用程式提供永久内部 IP 位址和主機名,供其他用作 pod 的建立和銷毀。

Service層将應用程式元件連接配接在一起。例如,前端 Web 服務通過與其服務通信連接配接到資料庫執行個體。服務支援跨應用程式元件簡單的内部負載平衡。OpenShift Container Platform 會自動将服務資訊注入到正在運作的容器中,以簡化發現過程。

路由(Route)

路由是通過為服務提供一個外部可通路主機名(如 www.example.com)來公開服務的方法。每個路由都包含路由名稱、服務選擇器和可選的安全配置。路由器可以使用定義的路由和由服務辨別的端點,提供允許外部用戶端到達應用程式的名稱。盡管易于部署完整的多層應用程式,但從 OpenShift Container Platform 環境以外的任何位置的流量在沒有路由層的情況下無法通路應用程式。

Build

建構 (build) 是将輸入參數轉換為結果對象的過程。此過程最常用于将輸入參數或源代碼轉換為可運作的鏡像。BuildConfig 對象是整個建構過程的定義。OpenShift Container Platform 通過從建構鏡像建立容器并将它們推送到內建的 registry 來利用 Kubernetes。

project

OpenShift Container Platform 使用project來允許一組使用者或開發人員一起工作,實作一個隔離機關和協作機關。定義資源範圍,允許項目管理者和協作者管理資源,并使用配額和限制跟蹤使用者的資源。

project是帶有額外注解的 Kubernetes 命名空間, 是管理正常使用者對資源通路的一個中央點。通過project,一組使用者可以在與其他使用者隔離的前提下組織和管理其内容。使用者需要通過管理者獲得項目的通路權限。叢集管理者也可以允許開發人員建立自己的項目,在這種情況下,使用者會自動獲得自己項目的通路權限。

每個項目都有自己的一組對象、政策、限制和服務帳戶的集合。

項目也稱為命名空間(namespaces)。

Operator

Operator 是一個 Kubernetes 原生應用程式。Operator 的目标是将相關的知識融入到軟體來實作各種操作。之前,這些知識存在于管理者的頭腦中,以及各種 shell 腳本或自動化軟體(如 Ansible)中。它們都在您的 Kubernetes 叢集之外,很難內建。但是,Operators 改變了這個情況。

Operator 專門用于應用程式的建構。

Operator 是在 Kubernetes 叢集内運作、且原生內建了 Kubernetes 概念和 API 的一個軟體,可以實施和自動化常見的第 1 天操作,如安裝和配置,以及第 2 天活動,如擴充和縮減、重新配置、更新、備份、故障轉移以及恢複,Operator稱為 Kubernetes 原生應用程式。

使用 Operator 時,應用程式不能被視為原語的集合,如 pod、部署、服務或配置映射。相反,Operator 應被視為單個對象,它公開了對應用程式有意義的選項。