kubernetes 基礎組件
[TOC]
1. Master(節(jié)點)
負責控制集群控制的節(jié)點楚昭,每個k8s集群都有一個master節(jié)點矿筝,
- Kubernetes API Server (kube-apiserver):提供HTTP Rest 接口的服務暴浦,Kubernetes所有資源的增、刪请梢、查忧额、改操作的入口
- Kubernetes Controller Manager (kube-controller-manager):Kubernetes所有資源對象的自動糊控制中心
- Kubernetes Scheduler (kube-scheduler):負責資源調度(Pod調度)
2. Node(節(jié)點)
集群中的工作負載節(jié)點(從節(jié)點),較早的版本叫做Minion访惜,當Node宕機會被Master自動轉移到其他節(jié)點
- kubelet: 負責Pod對應容器的創(chuàng)建嘹履、啟停,與Master節(jié)點協(xié)作债热,實現(xiàn)集群管理的基本功能
- kube-proxy:實現(xiàn)Kubernetes Service的通信與負載均衡機制
- Docker Engine (docker):Docker引擎砾嫉,負責本機的容器創(chuàng)建和管理
3. Pod
Pod是Kubernetes的最重要也是最基本的概念,每個Pod都有一個特殊的“根容器”(Pause容器
)窒篱,以及多個用戶業(yè)務容器焕刮。
Pause容器主要有兩個原因,
- 用于確定容器死亡還是整體死亡墙杯。
- Pod里的多個業(yè)務共享Pause容器的IP配并,共享Pause容器掛載的Volume
每個Pod都分配了唯一的IP地址(PodIP),一個Pod里的多個容器共享Pod IP地址高镐。
4. Label(標簽)
Label(標簽)是一個key=value的鍵值對溉旋,可以設置多個,附加到各種資源對象上嫉髓。
- 版本標簽:rerlease:stable,rerlease:beta
- 環(huán)境標簽:
- 架構標簽:
- 分區(qū)標簽:
- 質量管控標簽:
說到標簽观腊,不得不提到標簽選擇器,標簽選擇器類似于SQL算行、JQuery的選擇器梧油,包括常用的=
,!=
,in
,not in
,and
關鍵字。
5. Replication Controller (RC)
定義了一個期望的場景(某個Pod)的副本數(shù)量在任意時刻都符合某個預期值州邢。包含以下屬性:
- Pod期待的副本數(shù)(replicas)
- 用戶篩選目標Pod的Label Selector
- 當Pod副本數(shù)量低于某預期數(shù)量的時候儡陨,用于創(chuàng)建新Pod的Pod模板
6. Deployment
Kubernetes 1.2后引入,目的是為了更好的解決Pod的編排問題量淌。因此Deployment
內部使用了Replica Set
來實現(xiàn)骗村,可以把它看做Replication Controller(RC)
的升級。
Deployment相對于RC最大升級是可以隨時知道當前Pod部署的進度呀枢。因為部署一個Pod需要一個連續(xù)變化的部署過程叙身,而最終部署成功。
Deployment使用場景:
- 創(chuàng)建一個Deployment對象來生成對應的Replica Set并完成Pod的創(chuàng)建過程硫狞。
- 簡稱Deployment的狀態(tài)來看部署動作是否完成(實際上就是Pod副本數(shù)量是否達到了預期的值)
- 更新Deployment以創(chuàng)建新的Pod(例如鏡像升級)
- 如果當前的Deployment不穩(wěn)定信轿,則回滾到一個早先的Deployment版本
- 掛起或恢復一個Deployment
7. Horizontal Pod Autoscaler (HPA)
Horizontal Pod Autoscaler簡稱HPA
晃痴,意思是Pod橫向自動擴容。Kubernetes 1.1后引入(apiVersion:extensions/v1beta1)财忽,1.2版本后升級穩(wěn)定版(apiVersion:Autoscaling/v1)倘核,1.3版本移除舊版本,1.4版本移除舊版本的支持即彪。主要用于Pod自動擴容屬性紧唱,與kubectl scale
命令類似。通過分析RC控制所有目標的Pod的負載變化情況隶校,來確定是否需要針對性的調整目標Pod的副本數(shù)量漏益。
有兩種方式作為度量指標:
- 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其實就是我們經(jīng)常提起的微服務架構中的一個“微服務”余爆,Pod、RC等都是為Servie做嫁衣的夸盟。
9. Volume(存儲卷)
Volume是Pod能夠被多個容器訪問的共享目錄蛾方,與Docker的Volume相似,但不能等價上陕。首先桩砰,Kubernetes中的Volume定義在Pod上,然后被一個Pod里的多個容器掛載到具體的文件目錄下唆垃;其次Kubernetes的Volume與Pod的生命周期相同,但與容器的生命周期不相關痘儡,當容器終止或者重啟時辕万,Volume中的數(shù)據(jù)也不會丟失。支持多種先進的分布式文件系統(tǒng)(GlusterFS沉删,Ceph)等渐尿。
10. Peeesistent Volume
Kubernetes集群中的某個網(wǎng)絡存儲中對應的一塊存儲,它與Volume類似矾瑰,但有以下區(qū)別:
- PV只能是網(wǎng)絡存儲砖茸,不屬于任何Node,但可以在每個Node上訪問殴穴。
- PV并不是定義在Pod之上的凉夯,而是獨立于Pod之外的定義货葬。
- PV目前只有幾種類型:GCE Persistent Disks、NFS劲够、RBD震桶、iSCSCI、AWS ElasticBlockStore征绎、GlusterFS等蹲姐。
11. Namespace(命名空間)
Namespace(命名空間)在很多情況下用于實現(xiàn)多租戶的資源隔離。
12. Annotation(注解)
與Label類似人柿,使用key/value鍵值對形式進行定義柴墩。嚴格的命名規(guī)則。
Role and ClusterRole
RoleBinding and ClusterRoleBinding
ServiceAccount
ConfigMap
1.2 +
DaemonSet
DaemonSet能夠讓所有(或者一些特定)的Node節(jié)點運行同一個pod凫岖。當節(jié)點加入到kubernetes集群中江咳,pod會被(DaemonSet)調度到該節(jié)點上運行,當節(jié)點從kubernetes集群中被移除隘截,被(DaemonSet)調度的pod會被移除扎阶,如果刪除DaemonSet,所有跟這個DaemonSet相關的pods都會被刪除婶芭。
Ingress
1.2+