elasticsearch入門系列">elasticsearch入門系列
621
2022-05-29
在之前的文章已經(jīng)講到了很多Kubernets對象,包括pod,service,deployment等等。Kubernets對象是一種持久化,表示集群狀態(tài)的實(shí)體。它是一種聲明式的意圖的記錄,一般使用yaml文件描述對象,它使用Kubernetes對象來表示集群的狀態(tài),通過API/kubectl管理Kubernetes對象。
1?? name和uid
在Kubernetes對象模型中,使用了name和uid作為對象的唯一標(biāo)識,其中name在同一種對象中是唯一的,在不同類型對象可以是相同的;uid是唯一標(biāo)識的。
在API中對象的訪問路徑:/api/{version}/namespaces/{namespaxe/{object-kind}/name,比如:/api/v1/namespace/default/pods/hello-kubernetes
在Kubernetes集群的整個生命周期內(nèi)創(chuàng)建的每個對象實(shí)例都具有不同的UID.
2?? Namespace(名字空間)
Namesapce,不僅僅是一個屬性,本身也是一個object。
§? Namesapce:用于將物理集群劃分為多個虛擬集群。
§? Namespace間完全隔離,因此也常被用來隔離不同的用戶以及權(quán)限。
§? Kubernetes內(nèi)置了三個Namesapces:default、kube-system和kube-public,Node和PersistentVolume不屬于任何namespace。
3?? Label(標(biāo)簽)
Label用于建立集群對象之間的靈活、松耦合的多維關(guān)聯(lián)關(guān)系。
§? 一個label是一個鍵-值對,其中的key、value均由用戶自己定義。
§? lable可以附著在任何對象上,每個對象也可以有任意個標(biāo)簽。標(biāo)簽可在對象定義時附加上,也可以通過命令動態(tài)管理標(biāo)簽。
§? label可以將有組織目的的結(jié)構(gòu)映射到集群對象上,從而形成一個與現(xiàn)實(shí)世界管理結(jié)構(gòu)同步對應(yīng)松耦合的、多維的對象管理結(jié)構(gòu)。
通過lable selector 查詢和篩選建立對象間的關(guān)系的。
如上圖所示,有兩個service1和 service2,對應(yīng)的pod有標(biāo)簽release:stable和標(biāo)簽release:rc-1,通過selector,就可以篩選出相應(yīng)的標(biāo)簽的pod。而pod由通過nodeselector篩選出不同環(huán)境的node。
4?? Annotations
Annotations:可以將任意非標(biāo)識性元數(shù)據(jù)附加到對象上。
§? Annotations也是以鍵值對的形式呈現(xiàn)。
§? 工具和庫可以檢索并使用這些Annotations元數(shù)據(jù)
§? 將數(shù)據(jù)作為Annotations附著在對象上,有利于創(chuàng)建一些用于部署、管理和做內(nèi)部檢查的共享工具和客戶端。
5?? Kubernetes對象分類
常用的對象分類有以下幾種:
§? workload類,即工作負(fù)載類
o?? pod
o?? controller
o?? deployment
o?? stateful
o?? daemonset
o?? job
§? discovery&loadbalance類,與服務(wù)相關(guān)的對象
o?? service
o?? endpoint
o?? ingress
§? config&storage,向應(yīng)用初始化配置話信息
§? configmap
§? secret
§? volume
§? persistentVolumeClaim
§? cluster,集群類對象
§? Node
§? namespace
§? persitenceVolume
§? clusterRole
§? ClusterRoleVindeing
§? ResoruceQuota
6?? 工作負(fù)載,以pod為中心
pod是一個有特定關(guān)系的容器集合。
§? Pod是集群中可以創(chuàng)建和部署的最小且最簡單的Kubernetes對象的單元。
§? Pod也是一種封裝。它封裝了應(yīng)用容器,存儲資源、獨(dú)立的網(wǎng)絡(luò)IP以及決定容器如何運(yùn)行的策略選項(xiàng)。
§? 每個pod中預(yù)置了一個Pause容器,其namespace、IPC資源、網(wǎng)絡(luò)和存儲資源被pod內(nèi)其它容器共享。Pod中的所有容器緊密協(xié)作,并且作為一個整體被管理、調(diào)度和運(yùn)行。
pod的生命周期
pod是一個非持久化實(shí)體。
如圖所示,pod有如下幾個生命周期:
§? pending,即掛起,即pod對象已經(jīng)被kubernetes所接受,但有一個或者多個pod尚未創(chuàng)建。
§? running,運(yùn)行中,pod已經(jīng)綁定到node上,所有pod中所有容器已經(jīng)創(chuàng)建
§? succeed,成功狀態(tài),pod的所有的容器已經(jīng)成功終止。
§? failed,失敗狀態(tài),即有最少又一個容器正常退出。
7?? service
pod是一個非持久化的實(shí)體,pod隨時都有可能被銷毀掉或者重新創(chuàng)建,所以pod的所在節(jié)點(diǎn)是不確定的,為了防止因pod的提供服務(wù)不確定性而采用了地址唯一的service用來提供服務(wù),service可以通過負(fù)載均衡的調(diào)用它背后的pod對象,從而提供穩(wěn)定的服務(wù)。
servie是與云原生應(yīng)用中“微服務(wù)”概念一一對應(yīng)。
§? kubernetes集群為每一個service分配一個集群唯一的IP地址,在 service的生命周期內(nèi),該ip地址不變;在內(nèi)部DNS指出下,輕松實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)機(jī)制。
§? service通過label selector關(guān)聯(lián)到實(shí)際支撐業(yè)務(wù)運(yùn)行的pod上,并通過集群內(nèi)置的服務(wù)負(fù)載均衡分發(fā)到后端pod上。
§? 通過nodeport或者設(shè)置loadbalance機(jī)制實(shí)現(xiàn)集群外部對service的訪問。
8?? controllers
controller是kubernetes的核心對象之一。
§? controller用于保證集群內(nèi)一組pod能始終按照某種期望的狀態(tài)正常運(yùn)行
§? 狀態(tài)包括:Pod副本數(shù)量、節(jié)點(diǎn)選擇、資源約束、持久化數(shù)據(jù)運(yùn)維等
§? kubernetes支持多種controller,常用的deployment、replicaseet、statefulset、daemonset等。
9?? ReplicaSet
ReplicaSet:確保健康Pod的副本始終滿足用戶定義的數(shù)量。
§? 前身是ReplicationController()rc
§? 相比rc,增加了集合式label selector的支持。
§? 支持單獨(dú)使用,但更多隱藏在Deployment控制器后面,由deployment自動管理。
10 Deployment
Deployment:為pod和 ReplicaSet提供聲明式的定義。
§? 用戶在deployment文件中描述期望狀態(tài),Deployment Controller就會自動將Pod和Replica Set的實(shí)際狀態(tài)改變到期望狀態(tài)。
§? Deployment支持Pod的滾動更新,并自動管理背后的ReplicaSet
§? Deployment支持將Pod滾動到任意版本。
11 StatefulSet
StatefulSet:提供對有狀態(tài)應(yīng)用的部署和控制的支持,1.9版本GA,正式畢業(yè)。可以用于生產(chǎn)環(huán)境中。
§? 使用場景:文檔的持久化存儲,穩(wěn)定的網(wǎng)絡(luò)標(biāo)志,有序部署有序擴(kuò)展,有序收縮有序刪除,有序自動滾動升級等。
§? Pod的存儲必須由PersistentVolume Provisioner根據(jù)請求的Storage Class 進(jìn)行配置,或由管理員預(yù)先配置好。
§? 考慮數(shù)據(jù)安全性,伸縮或刪除StatefulSey不會刪除關(guān)聯(lián)的存儲;另外StartefulSet目前要求Headless Service 負(fù)責(zé)Pod的網(wǎng)絡(luò)身份,用戶有責(zé)任創(chuàng)建此服務(wù)。
12 DaemonSet
保證在每個Node上都運(yùn)行一個Pod副本。
§? 適用于系統(tǒng)Daemon程序、系統(tǒng)跟蹤、日志收集等
§? Kubernetes1.6之后,可設(shè)置更新策略:支持滾動更新
§? 可指定Node:nodeSelector、nodeAffinity、podAffinity
13 ConfigMap
常用來向pod提供非敏感的配置信息。
§? ConfigMap用于保存配置數(shù)據(jù)的鍵值對,可以用來保存單個,也可以用來保存配置文件。
§? ConfigMap可以使用命令行基于字面值、文件或者目錄來創(chuàng)建或者通過configmap對象定義文件創(chuàng)建。
§? ConfigMap可以通過三種形式在pod中使用:環(huán)境變量、容器命令行參數(shù)貨以文件形式通過數(shù)據(jù)卷插件掛載到pod中。
14 Secret
secret解決的事集群內(nèi)密碼、token、密鑰等敏感數(shù)據(jù)的配置問題。
§? 常用于與ServiceAccount關(guān)聯(lián),存儲在tmpfs文件系統(tǒng)中,Pod刪除后sercret文件也會對應(yīng)刪除
§? 支持opaque,kubernetes.io/Service Account,kubernetes.io/dockerconfigjson三種類型。
15 總結(jié)
本文主要對Kubernetes的對象模型進(jìn)行一個初略的講解。后續(xù)文章會對重點(diǎn)對象模型進(jìn)行一個詳細(xì)的講解或者實(shí)戰(zhàn)的演示。
Kubernetes
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。