一成洗、k8s對象
k8s對象:是一種持久化的癞蚕,用于表示集群狀態(tài)的實體。
1著蛙,對象的定義本身是聲明式的删铃,它定義了對象被k8s平臺創(chuàng)建后的狀態(tài),也就是我們希望這個對象被創(chuàng)建后應該保持什么樣的狀態(tài)踏堡,一般使用yml文件描述猎唁。
2,k8s使用k8s對象來表示集群的狀態(tài)顷蟆,所有創(chuàng)建后的對象的狀態(tài)集合就是整個集群的當前狀態(tài)诫隅。使用k8s對象可以用來描述很多情況,比如有哪些容器化的應用在運行帐偎,容器運行在哪個node上逐纬,有哪些可以被應用使用的資源,應用的行為策略是什么樣子削樊,比如重啟策略豁生,聲明策略,容錯策略漫贞。
3甸箱,k8s中使用api/kubectl來管理這些對象。
管理k8s對象的過程其實就是使用k8s和運維k8s的過程迅脐。
k8s的controller manager就是通過對象的controller使得各個對象保持在期望狀態(tài)芍殖,因此整個k8s的工作就是讓所有對象保持在期望狀態(tài)。
二谴蔑、對象模型
k8s對象的創(chuàng)建就好比一個類被實例化了豌骏。其狀態(tài)變成了動態(tài)信息,保存在etcd中隐锭,而k8s狀態(tài)的變化是觸發(fā)k8s各個組件工作的起點窃躲。每當狀態(tài)變化,k8s就會努力調(diào)整成榜,努力使得各個對象始終處于期望狀態(tài)框舔。
在k8s對象的這些屬性和方法中,唯有metadata是大部分對象都有的通用屬性赎婚。
對象結(jié)構(gòu)包含靜態(tài)屬性,操作方法和動態(tài)信息樱溉。
三挣输、常用的metadata屬性含義:
1,Name和UID
k8s中所有對象都通過name和UID明確標識福贞。
1)在同一類對象中name是唯一的撩嚼,但不同類型的對象name是可以一樣的。比如某個pod叫hello-k8s,另一個deployment也可以同時叫做hello-k8s完丽。不同名字空間中恋技,同樣類型的對象實例的名字也是可以相同的。
2)Api中的對象訪問路徑:
/api/{version}/namespaces/{namespace}/{object-kind}/name
/api/v1/namespaces/default/pods/helo-k8s
3)k8s在集群的整個生命周期內(nèi)創(chuàng)建的每個對象都具有不同的UUID逻族。
2蜻底,namespace(名稱空間)
不僅是matadata中的一個屬性,本身也是一個Object聘鳞,可以提供獨立的命名空間薄辅。
1)可用于將物理集群劃分為多個虛擬集群,對象實例的名稱在同一個namespace中是唯一的抠璃。
2)namespace間完全隔離站楚,因此也常被用來隔離不同的用戶(及權(quán)限)。
3)k8s中內(nèi)置了三個名稱空間:default,kube-system和kube-public搏嗡。
default:默認的名稱空間
kube-system:k8s平臺組件部署的名稱空間窿春,比如apiserver,dns插件,網(wǎng)絡(luò)插件采盒。
kube-public:自動創(chuàng)建的谁尸,可供所有用戶訪問,包括未經(jīng)過身份驗證的用戶訪問纽甘。里面的資源在集群中是公開可見和可讀的良蛮。
注意,Node和PersistentVolumn不屬于任何namespace悍赢。
3,label(標簽)
所有K8S對象都擁有的元數(shù)據(jù)屬性决瞳。用于建立集群對象之間的靈活的松耦合的多維關(guān)聯(lián)關(guān)系。
1)一個label就是一個鍵值對左权,其中的key,value均由用戶自己定義皮胡。
2)label可以附著在任何對象上,每個對象也可以有任意個標簽赏迟。標簽可在對象定義時附加上屡贺,也可以通過命令動態(tài)管理標簽。標簽不是唯一的锌杀,很多對象可能有相同的標簽甩栈。
3)label可以將有組織目的的結(jié)構(gòu)映射到集群對象上,從而形成一個與現(xiàn)實世界管理結(jié)構(gòu)同步對應松耦合的糕再,多維的對象管理結(jié)構(gòu)量没。
k8s對象之間松耦合的關(guān)聯(lián)是通過label selector對label的查詢和篩選建立的。
service通過selector pod 的label和pod建立關(guān)系突想。
pod通過nodeSelector node的label和node建立關(guān)系殴蹄。選擇自己可以被調(diào)度運行的k8s節(jié)點究抓。
4,annotations(注解)
通過annotations袭灯,可以將任意非標識性的元數(shù)據(jù)附加到對象上刺下。
這也是他和標簽數(shù)據(jù)的區(qū)別,標簽是標識性數(shù)據(jù)稽荧,用于標識對象橘茉,主要用于篩選對象。annotations不能用于標識或者選擇對象蛤克。
1)annotations也是以鍵值對的方式呈現(xiàn)的捺癞。
常見的對象annotations信息包括:創(chuàng)建信息,版本信息或鏡像信息构挤。
比如時間戳髓介,版本號,鏡像哈希值筋现,倉庫地址等唐础。
2)工具和庫可以檢索到并使用這些annotation元數(shù)據(jù)。
3)將數(shù)據(jù)作為annotation附著在對象上矾飞,有利于創(chuàng)建一些用于部署一膨、管理和做內(nèi)部檢查的共享工具或客戶端。
四洒沦、k8s對象分類
1豹绪,workload:是k8s集群主要去管理和運行對象
2,discovery&load balance:與服務相關(guān)的一些對象
3申眼,config&storage:用于向應用中注入初始化配置數(shù)據(jù)的瞒津。活將數(shù)據(jù)持久化保存到容器外的
4括尸,cluster:集群類對象巷蚪,主要定義了集群自身如何配置的數(shù)據(jù),通常由集群管理員進行操作濒翻。