kubernetes常用对象
1. Master
集群的控制節(jié)點,負責(zé)整個集群的管理和控制,kubernetes的所有的命令基本都是發(fā)給Master,由它來負責(zé)具體的執(zhí)行過程。
1.1. Master的組件
- kube-apiserver:資源增刪改查的入口
- kube-controller-manager:資源對象的大總管
- kube-scheduler:負責(zé)資源調(diào)度(Pod調(diào)度)
- etcd Server:kubernetes的所有的資源對象的數(shù)據(jù)保存在etcd中。
2. Node
Node是集群的工作負載節(jié)點,默認情況kubelet會向Master注冊自己,一旦Node被納入集群管理范圍,kubelet會定時向Master匯報自身的情報,包括操作系統(tǒng),Docker版本,機器資源情況等。
如果Node超過指定時間不上報信息,會被Master判斷為“失聯(lián)”,標記為Not Ready,隨后Master會觸發(fā)Pod轉(zhuǎn)移。
2.1. Node的組件
- kubelet:Pod的管家,與Master通信
- kube-proxy:實現(xiàn)kubernetes Service的通信與負載均衡機制的重要組件
- Docker:容器的創(chuàng)建和管理
2.2. Node相關(guān)命令
kubectl get nodes
kuebctl describe node {node_name}
2.3. describe命令的Node信息
- Node基本信息:名稱、標簽、創(chuàng)建時間等
- Node當前的狀態(tài),Node啟動后會進行自檢工作,磁盤是否滿,內(nèi)存是否不足,若都正常則切換為Ready狀態(tài)。
- Node的主機地址與主機名
- Node上的資源總量:CPU,內(nèi)存,最大可調(diào)度Pod數(shù)量等
- Node可分配資源量:當前Node可用于分配的資源量
- 主機系統(tǒng)信息:主機唯一標識符UUID,Linux kernel版本號,操作系統(tǒng),kubernetes版本,kubelet與kube-proxy版本
- 當前正在運行的Pod列表及概要信息
- 已分配的資源使用概要,例如資源申請的最低、最大允許使用量占系統(tǒng)總量的百分比
- Node相關(guān)的Event信息。
3. Pod
Pod是Kubernetes中操作的基本單元。每個Pod中有個根容器(Pause容器),Pause容器的狀態(tài)代表整個容器組的狀態(tài),其他業(yè)務(wù)容器共享Pause的IP,即Pod IP,共享Pause掛載的Volume,這樣簡化了同個Pod中不同容器之間的網(wǎng)絡(luò)問題和文件共享問題。
圖片 - pod
資源配額的兩個參數(shù)
Requests:該資源的最小申請量,系統(tǒng)必須滿足要求。
圖片 - pod2
4. Label
Label Selector有基于等式和基于集合的兩種表達方式,可以多個條件進行組合使用。
基于等式:name=redis-slave(匹配name=redis-slave的資源對象);env!=product(匹配所有不具有標簽env=product的資源對象)
使用場景
5. Replication Controller(RC)
RC是k8s系統(tǒng)中的核心概念,定義了一個期望的場景。
主要包括:
- Pod期望的副本數(shù)(replicas)
- 用于篩選目標Pod的Label Selector
- 用于創(chuàng)建Pod的模板(template)
RC特性說明:
6. Deployment
Deployment是kubernetes 1.2引入的概念,用來解決Pod的編排問題。Deployment可以理解為RC的升級版(RC+Reolicat Set)。特點在于可以隨時知道Pod的部署進度,即對Pod的創(chuàng)建、調(diào)度、綁定節(jié)點、啟動容器完整過程的進度展示。
使用場景
可以通過kubectl describe deployment來查看Deployment控制的Pod的水平拓展過程。
7. Horizontal Pod Autoscaler(HPA)
Horizontal Pod Autoscaler(HPA)即Pod橫向自動擴容,與RC一樣也屬于k8s的資源對象。
HPA原理:通過追蹤分析RC控制的所有目標Pod的負載變化情況,來確定是否針對性調(diào)整Pod的副本數(shù)。
Pod負載度量指標:
- CPUUtilizationPercentage:Pod所有副本自身的CPU利用率的平均值。即當前Pod的CPU使用量除以Pod Request的值。
- 應(yīng)用自定義的度量指標,比如服務(wù)每秒內(nèi)響應(yīng)的請求數(shù)(TPS/QPS)。
8. Service(服務(wù))
8.1. Service概述
圖片 - service
Service定義了一個服務(wù)的訪問入口地址,前端應(yīng)用通過這個入口地址訪問其背后的一組由Pod副本組成的集群實例,Service與其后端的Pod副本集群之間是通過Label Selector來實現(xiàn)“無縫對接”。RC保證Service的Pod副本實例數(shù)目保持預(yù)期水平。
8.2. kubernetes的服務(wù)發(fā)現(xiàn)機制
主要通過kube-dns這個組件來進行DNS方式的服務(wù)發(fā)現(xiàn)。
8.3. 外部系統(tǒng)訪問Service的問題
| Node IP | Node節(jié)點的IP地址 |
| Pod IP | Pod的IP地址 |
| Cluster IP | Service的IP地址 |
8.3.1. Node IP
NodeIP是集群中每個節(jié)點的物理網(wǎng)卡IP地址,是真實存在的物理網(wǎng)絡(luò),kubernetes集群之外的節(jié)點訪問kubernetes內(nèi)的某個節(jié)點或TCP/IP服務(wù)的時候,需要通過NodeIP進行通信。
8.3.2. Pod IP
Pod IP是每個Pod的IP地址,是Docker Engine根據(jù)docker0網(wǎng)橋的IP段地址進行分配的,是一個虛擬二層網(wǎng)絡(luò),集群中一個Pod的容器訪問另一個Pod中的容器,是通過Pod IP進行通信的,而真實的TCP/IP流量是通過Node IP所在的網(wǎng)卡流出的。
8.3.3. Cluster IP
8.3.4. 外部訪問Kubernetes集群
通過宿主機與容器端口映射的方式進行訪問,例如:Service定位文件如下:
可以通過任意Node的IP 加端口訪問該服務(wù)。也可以通過Nginx或HAProxy來設(shè)置負載均衡。
9. Volume(存儲卷)
9.1. Volume的功能
9.2. Volume的特點
k8s中的Volume與Docker的Volume相似,但不完全相同。
9.3. Volume的使用方式
先在Pod上聲明一個Volume,然后容器引用該Volume并Mount到容器的某個目錄。
9.4. Volume類型
9.4.1. emptyDir
emptyDir Volume是在Pod分配到Node時創(chuàng)建的,初始內(nèi)容為空,無須指定宿主機上對應(yīng)的目錄文件,由K8S自動分配一個目錄,當Pod被刪除時,對應(yīng)的emptyDir數(shù)據(jù)也會永久刪除。
作用:
說明:
目前用戶無法設(shè)置emptyVolume的使用介質(zhì),如果kubelet的配置使用硬盤則emptyDir將創(chuàng)建在該硬盤上。
9.4.2. hostPath
hostPath是在Pod上掛載宿主機上的文件或目錄。
作用:
注意點:
9.4.3. gcePersistentDisk
表示使用谷歌公有云提供的永久磁盤(Persistent Disk ,PD)存放Volume的數(shù)據(jù),它與EmptyDir不同,PD上的內(nèi)容會被永久保存。當Pod被刪除時,PD只是被卸載時,但不會被刪除。需要先創(chuàng)建一個永久磁盤,才能使用gcePersistentDisk。
使用gcePersistentDisk的限制條件:
- Node(運行kubelet的節(jié)點)需要是GCE虛擬機。
- 虛擬機需要與PD存在于相同的GCE項目中和Zone中。
10. Persistent Volume
Volume定義在Pod上,屬于“計算資源”的一部分,而Persistent Volume和Persistent Volume Claim是網(wǎng)絡(luò)存儲,簡稱PV和PVC,可以理解為k8s集群中某個網(wǎng)絡(luò)存儲中對應(yīng)的一塊存儲。
- PV是網(wǎng)絡(luò)存儲,不屬于任何Node,但可以在每個Node上訪問。
- PV不是定義在Pod上,而是獨立于Pod之外定義。
- PV常見類型:GCE Persistent Disks、NFS、RBD等。
PV是有狀態(tài)的對象,狀態(tài)類型如下:
- Available:空閑狀態(tài)
- Bound:已經(jīng)綁定到某個PVC上
- Released:對應(yīng)的PVC已經(jīng)刪除,但資源還沒有回收
- Failed:PV自動回收失敗
11. Namespace
Namespace即命名空間,主要用于多租戶的資源隔離,通過將資源對象分配到不同的Namespace上,便于不同的分組在共享資源的同時可以被分別管理。
k8s集群啟動后會默認創(chuàng)建一個“default”的Namespace。可以通過kubectl get namespaecs查看。
可以通過kubectl config use-context?namespace配置當前k8s客戶端的環(huán)境,通過kubectl get pods獲取當前namespace的Pod。或者通過kubectl get pods --namespace=NAMESPACE來獲取指定namespace的Pod。
Namespace yaml文件的定義
12. Annotation(注解)
Annotation與Label類似,也使用key/value的形式進行定義,Label定義元數(shù)據(jù)(Metadata),Annotation定義“附加”信息。
通常Annotation記錄信息如下:
- build信息,release信息,Docker鏡像信息等。
- 日志庫、監(jiān)控庫等。
參考《Kubernetes權(quán)威指南》
總結(jié)
以上是生活随笔為你收集整理的kubernetes常用对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上眼睑下垂贴双眼皮贴效果好吗
- 下一篇: 广告出价--如何使用PID控制广告投放成