k8s的概念梳理
1、Pod是k8s中可以創建和部署的最小單位。一個pod可以看作一個邏輯主機,一個pod代表一個應用實例,可以包含多個容器。
2、label和label selector:label能夠以key/value的形式可以給pod等資源對象創建一組或多組標簽,實現資源分組管理功能。Label selector能夠識別一組有共同特征或屬性(label)的資源對象。(Label Selector有兩種形式:等式方式:= 、 == 、 !=和集合方式:in、notin)。Label和Label Selector共同構成了k8s中最核心的應用模型,使得被管理對象能夠被精確地分組管理。
3、Namespace是對一組資源和對象的抽象集合,常用來隔離不同的用戶,也可以將其看作k8s集群中的虛擬化集群,在一個k8s集群中可以擁有多個命名空間,它們在邏輯上彼此隔離。常見的pods, services, replication controllers和deployments等都是屬于某一個namespace的(默認是default),而node, persistentVolumes等屬于集群資源,不屬于任何namespace。
4、ReplicationController用來確保容器應用的副本數始終保持在用戶定義的副本數,即如果有容器異常退出,會自動創建新的Pod來替代;如果出現異常多出來的容器也會自動回收。
5、ReplicaSet是下一代復本控制器。ReplicaSet和 Replication Controller之間的唯一區別是現在的選擇器支持。Replication Controller只支持基于等式的selector,但ReplicaSet還支持基于集合的selector。
6、Node是Pod真正運行的主機,一般是物理機。為了管理Pod,每個Node節點上至少要運行docker、kubelet和kube-proxy服務。
7、Service,由于Pod存在生命周期,有銷毀,有重建,無法提供一個固定的訪問接口(ip)給客戶端。其他Pod想要發現并連接這組Pod就需要通過service,由此Service資源出現了,service可以為一類Pod資源對象提供一個固定的訪問接口(虛擬ip)和負載均衡,Service基于標簽選擇器LabelSelector將一組Pod定義成一個邏輯組合,并通過自己的IP地址和端口調度代理請求到組內的Pod對象。
8、volume,容器中的磁盤在容器重啟后文件會丟失;當很多容器在同一Pod中運行的時候需要數據文件的共享。volume與掛載它的Pod生命周期相同,當Pod被刪除時,卷也不存在了。一個 volume 就是一個目錄,這個目錄對pod中的所有容器都是可用的。
9、PV和PVC,PersistentVolume可以看作是將分布式存儲系統(NFS)上的集群存儲資源劃分出的一個存儲塊,其生命周期獨立于使用其的pod。
要使用PV需要創建PersistentVolumeClaim(持久卷聲明,簡稱PVC),PVC是用戶的一種存儲請求。它和Pod類似,Pod消耗Node資源,而PVC消耗PV資源。Pod能夠請求特定的資源(如CPU和內存),PVC能夠請求指定的大小和訪問的模式(可以被映射為一次讀寫或者多次只讀).
10、Deployment為Pod和ReplicaSet提供了一個聲明式定義方法,deployment是用來管理無狀態應用的,使用Deployment來創建ReplicaSet,ReplicaSet在后臺創建pod。能夠支持滾動升級和回滾應用、擴容和縮容。
11、StatefulSet是為了解決有狀態服務的問題,對應的Deployments和ReplicaSets是為無狀態服務而設計。
(1)穩定且持久的存儲,即Pod重新調度后還是能訪問到相同的持久化數據,基于PVC來實現;
(2)穩定且唯一的網絡標志,即Pod重新調度后其PodName和HostName不變,基于Headless Service來實現;
(3)Pod是有順序的,有序部署和擴展,有序收縮和刪除,即在部署或者擴展的時候要依據定義的順序依次依次進行,在下一個Pod運行之前所有之前的Pod必須都是Running和Ready狀態,基于init containers來實現
12、Secret存儲對象解決了密碼、token、密鑰等敏感數據的配置問題,而不需要把這些敏感數據暴露到鏡像或者Pod Spec中。Secret可以以Volume或者環境變量的方式被使用。
13、DaemonSet保證每個Node上都運行一個Pod的副本,當有Node加入集群時,也會為他們新增一個Pod;當Node移除時,會回收Pod;刪除DaemonSet將刪除它創建的所有Pod。
典型用法:
日志收集daemon,比如fluentd,logstash等
系統監控daemon,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
系統程序daemon,比如kube-proxy, kube-dns, glusterd, ceph等
14、Job負責批量處理短暫的一次性任務 (short lived one-off tasks),即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束。Job Controller負責根據Job Spec創建Pod,并持續監控Pod的狀態,直至其成功結束。如果失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否創建新的Pod再次重試任務。
15、CronJob即定時任務,就類似于Linux系統的crontab,在指定的時間周期運行指定的任務。
總結
- 上一篇: 阿里神器Arthas 3.1.2版本发布
- 下一篇: 不小心执行了 rm -rf,除了跑路还有