kubernetes 基礎組件

kubernetes 基礎組件

[TOC]

1. Master(節點)

負責控制集群控制的節點,每個k8s集群都有一個master節點,

  • Kubernetes API Server (kube-apiserver):提供HTTP Rest 接口的服務,Kubernetes所有資源的增、刪、查、改操作的入口
  • Kubernetes Controller Manager (kube-controller-manager):Kubernetes所有資源對象的自動糊控制中心
  • Kubernetes Scheduler (kube-scheduler):負責資源調度(Pod調度)

2. Node(節點)

集群中的工作負載節點(從節點),較早的版本叫做Minion,當Node宕機會被Master自動轉移到其他節點

  • kubelet: 負責Pod對應容器的創建、啟停,與Master節點協作,實現集群管理的基本功能
  • kube-proxy:實現Kubernetes Service的通信與負載均衡機制
  • Docker Engine (docker):Docker引擎,負責本機的容器創建和管理

3. Pod

Pod是Kubernetes的最重要也是最基本的概念,每個Pod都有一個特殊的“根容器”(Pause容器),以及多個用戶業務容器。

Pause容器主要有兩個原因,

  1. 用于確定容器死亡還是整體死亡。
  2. Pod里的多個業務共享Pause容器的IP,共享Pause容器掛載的Volume

每個Pod都分配了唯一的IP地址(PodIP),一個Pod里的多個容器共享Pod IP地址。

4. Label(標簽)

Label(標簽)是一個key=value的鍵值對,可以設置多個,附加到各種資源對象上。

  • 版本標簽:rerlease:stable,rerlease:beta
  • 環境標簽:
  • 架構標簽:
  • 分區標簽:
  • 質量管控標簽:

說到標簽,不得不提到標簽選擇器,標簽選擇器類似于SQL、JQuery的選擇器,包括常用的=,!=,in,not in,and關鍵字。

5. Replication Controller (RC)

定義了一個期望的場景(某個Pod)的副本數量在任意時刻都符合某個預期值。包含以下屬性:

  • Pod期待的副本數(replicas)
  • 用戶篩選目標Pod的Label Selector
  • 當Pod副本數量低于某預期數量的時候,用于創建新Pod的Pod模板

6. Deployment

Kubernetes 1.2后引入,目的是為了更好的解決Pod的編排問題。因此Deployment內部使用了Replica Set來實現,可以把它看做Replication Controller(RC)的升級。
Deployment相對于RC最大升級是可以隨時知道當前Pod部署的進度。因為部署一個Pod需要一個連續變化的部署過程,而最終部署成功。

Deployment使用場景:

  • 創建一個Deployment對象來生成對應的Replica Set并完成Pod的創建過程。
  • 簡稱Deployment的狀態來看部署動作是否完成(實際上就是Pod副本數量是否達到了預期的值)
  • 更新Deployment以創建新的Pod(例如鏡像升級)
  • 如果當前的Deployment不穩定,則回滾到一個早先的Deployment版本
  • 掛起或恢復一個Deployment

7. Horizontal Pod Autoscaler (HPA)

Horizontal Pod Autoscaler簡稱HPA,意思是Pod橫向自動擴容。Kubernetes 1.1后引入(apiVersion:extensions/v1beta1),1.2版本后升級穩定版(apiVersion:Autoscaling/v1),1.3版本移除舊版本,1.4版本移除舊版本的支持。主要用于Pod自動擴容屬性,與kubectl scale命令類似。通過分析RC控制所有目標的Pod的負載變化情況,來確定是否需要針對性的調整目標Pod的副本數量。
有兩種方式作為度量指標:

  • CPUUtilizationPercentage
  • 應用自定義度量指標(RPS,TPS)
  1. CPUUtilizationPercentage計算方式:目標Pod所有副本自身的CPU利用率的平均值
  2. CPU利用率:一個Pod吱聲的CPU利用率是該Pod當前CPU的使用量除以它的Pod Request的值。例如定義一個Pod的Pod Request為0.4,而當前Pod的CPU使用量為0.2,則它的CPU使用率為50%。

CPUUtilizationPercentage是1分鐘內的平均值,通過Heapster組件獲取,因此需要安裝這個組件。

8. Service (服務)

Kubernetes 里每個Service其實就是我們經常提起的微服務架構中的一個“微服務”,Pod、RC等都是為Servie做嫁衣的。

9. Volume(存儲卷)

Volume是Pod能夠被多個容器訪問的共享目錄,與Docker的Volume相似,但不能等價。首先,Kubernetes中的Volume定義在Pod上,然后被一個Pod里的多個容器掛載到具體的文件目錄下;其次Kubernetes的Volume與Pod的生命周期相同,但與容器的生命周期不相關,當容器終止或者重啟時,Volume中的數據也不會丟失。支持多種先進的分布式文件系統(GlusterFS,Ceph)等。

10. Peeesistent Volume

Kubernetes集群中的某個網絡存儲中對應的一塊存儲,它與Volume類似,但有以下區別:

  • PV只能是網絡存儲,不屬于任何Node,但可以在每個Node上訪問。
  • PV并不是定義在Pod之上的,而是獨立于Pod之外的定義。
  • PV目前只有幾種類型:GCE Persistent Disks、NFS、RBD、iSCSCI、AWS ElasticBlockStore、GlusterFS等。

11. Namespace(命名空間)

Namespace(命名空間)在很多情況下用于實現多租戶的資源隔離。

12. Annotation(注解)

與Label類似,使用key/value鍵值對形式進行定義。嚴格的命名規則。

Role and ClusterRole

RoleBinding and ClusterRoleBinding

ServiceAccount

ConfigMap

1.2 +

DaemonSet

DaemonSet能夠讓所有(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集群中,pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集群中被移除,被(DaemonSet)調度的pod會被移除,如果刪除DaemonSet,所有跟這個DaemonSet相關的pods都會被刪除。

Ingress

1.2+

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容