k8s object對象(pod controller)介紹

參考https://www.imooc.com/learn/978

Name UID

1 集羣中所有對象都通過name和UID明確標識
2 API中的對象訪問的路徑: /api/{version}/namespaces/{namespaces}/{object-kind}/name
比如:/api/v1/namespaces/default/pods/hello-kubernetes
3 在k8s集羣的整個生命週期內創建的每個對象實例都具有不同的UID

Namespace

命名空間 不僅僅是一個屬性,本身也是一個object

1 用於將物理集羣劃分爲多個虛擬集羣
2 namespace間完全隔離,一次也常被用來隔離不同的用戶(及權限)
3 內置3個namespace:default,kube-public和kube-public,node和persistentVolume不屬於任何namespace

Label 標籤

Label用於建立集羣對象之間的靈活的\松耦合的多維關聯關係
1 一個label是一個鍵值對,其中的key,value均由用戶自己定義
2 label可以附着在任何對象上,每個對象也可以有任意個標籤.標籤課在對象定義時附加上,也可以通過命令動態管理標籤
3 label可以將有組織目的的結構映射到集羣對象上,從而形成一個與現實世界管理結構同步對應松耦合的\多維的對象管理結構

通過label selector查詢和篩選建立對象間的關係

Annotations 註解

1 可以 以鍵值對形式呈現
2 工具和庫可以檢索到並使用這些Annotations元數據
3 將數據作爲Annotation附着在對象上,有利於創建一些用於部署\管理和做內部檢查的共享工具或客戶端

k8s 對象分類

1 workload
2 discovery load balance
3 config storage
4 cluster

工作負載:以Pod爲中心 集羣調度基本單元

Pod:一個有特定關係的容器集合
1 pod是集羣中可以創建和部署的最小且最簡的kbs對象單元
2 pod 也是一種封裝 它分裝了應用容器\存儲資源\獨立的網絡ip以及決定容器如何運行的策略選項
3 每個pod中預置一個Pause容器,其命名空間,IPC資源,網絡和存儲資源被Pod內其他容器共享.Pod中的所有容器緊密協作,並且作爲一個整體被管理\調度和運行

Pod生命週期

pod 一個非持久性實體
重啓後pod的ip地址會變化

Service

與雲原生應用中"微服務"概念一一對應
1 kbs 集羣爲每一個service分配一個集羣唯一的Ip地址,
在service的生命週期內,改ip地址不變;
在內部dns的支持下,輕鬆實現服務發現機制
2 Service通過label selector關聯到實際支撐業務運行的pod上,並通過集羣內置的服務負載均衡將服務請求分發到後端pod
3 通過nodeport或者設置loadbalancer機制實現集羣外部對service的訪問

Controller

kbs核心對象之一
1 保證集羣內一組pod能始終按照某種期望的狀態(desired state)正常運行
2 狀態包括 pod副本數量\節點選擇\資源約束\持久化數據維持等
3 kbs支持多種Controller,常用的deployment\replicaset\statefulset\daemonset等

一 replicaset

確保健康pod的副本數始終滿足用戶定義的數量
1 前身是replicationController(rc)
2 相比rc,增加集合式label selector的支持
3 支持單獨使用,單更多隱藏在deployment控制器後面,
有deployment自動管理

二 deployment

爲pod和replicaset提供了聲明式的定義declarative
1 用戶在deployment文件中描述期望狀態,deployment controller
就會自動將pod和replicaset的實際狀態改變爲期望狀態
2 deploymentzhichipod的rollingUpdate,並自動管理背後的replicaset
3 deployment支持將pod rollback到之前的任意revision(僅限於pod-template模板改動)

三 StatefulSet

提供對有狀態的應用的部署和控制的支持,1.9版本GA
1 適用場景:穩定的持久化存儲\穩定的網絡標誌\有序部署有序擴展\有序收縮有序刪除\有序自動滾動升級等
2 pod的存儲必須由 persistentVolume Provisioner 根據請求的Storage Class 進行配置,或由管理員預先配置好.
3 考慮數據安全性,伸縮或刪除StatefulSet不會刪除關聯的存儲;
另外StatefulSet目前要求Headless Service 負責Pod的網絡身份,用戶有責任創建次服務

四 daemonset

保證每個Node 上都運行一個pod副本
1 適用場景:系統daemon程序\監控跟蹤\日誌收集等
2 kbs1.6之後,可設置更新策略:支持滾動更新
3 可指定Node:nodeSelector\nodeAffinity\podAffinity

ConfigMap

常用來向pod提供非敏感的配置信息
1 ConfigMap用來保存配置數據的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件
2 可以使用命令行基於字面值\文件或目錄來創建或通過configmap對象定義文件創建
3 可以通過3種方式在pod中使用:環境變量\容器命令行參數或以文件形式通過數據卷插件掛載到pod中

Secret

1 常用於與serviceaccount關聯,存儲在tmpfs文件系統中,pod刪除後secret文件也會對應刪除
2 支持Opaque,kbs.io/service account,kbs.io/dockerconfigjson 三種類型
3 secret可以以volume或者環境變量的方式使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章