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容器主要有兩個原因,
- 用于確定容器死亡還是整體死亡。
- 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)
- CPUUtilizationPercentage計算方式:目標Pod所有副本自身的CPU利用率的平均值
- 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+