Kubernets概覽
Kubernetes關鍵概念-Pod
在Kubernetes中, pods是能夠創建、調度、和管理的最小部署單元,是一組容器的集合,而不是單獨的應用容器
同一個Pod里的容器共享同一個網絡命名空間, IP地址及端口空間。
從生命周期來說, Pod是短暫的而不是長久的應用。 Pods被調度到節點,保持在這個節點上直到被銷毀。
Pod詳解-容器
Infrastructure Container: 基礎容器
用戶不可見,無需感知
維護整個Pod網絡空間
InitContainers:初始化容器,一般用於服務等待處理以及注冊Pod信息等先於業務容器開始執行
順序執行,執行成功退出( exit 0),全部執行成功后開始啟動業務容器
Containers:業務容器並行啟動,啟動成功后一直Running
容器基本組成
Pod詳解-健康檢查
Pod詳解-外部輸入
配置文件( ConfigMap)及密鑰( Secret)
Pod詳解-持久化存儲
PV/PVC
Pod詳解-服務域名發現
dnsPolicy: Pod內域名解析的策略
ClusterFirst:使用kube-dns作為域名解析服務器
Default:使用節點( kubelet)指定的域名服務器解析域名
ClusterFirstWithHostNet:當Pod使用主機網絡部署時使用
Pod與工作負載的關系
關鍵工作負載-ReplicaSet
ReplicaSet用於解決pod的擴容和縮容問題。
通常用於無狀態應用
關鍵工作負載-Deployment
Kubernetes Deployment提供了官方的用於更新Pod和Replica Set(下一代的ReplicationController)的方法,您可以在Deployment對象中只描述您所期望的理想狀態(預期的運行狀態),Deployment控制器為您將現在的實際狀態轉換成您期望的狀態;
Deployment集成了上線部署、滾動升級、創建副本、暫停上線任務,恢復上線任務,回滾到以前某一版本(成功/穩定)Deployment等功能,在某種程度上, Deployment可以幫我們實現無人值守的上線,大大降低我們的上線過程的復雜溝通、操作風險。
Deployment的典型用例:
使用Deployment來啟動(上線/部署)一個Pod或者ReplicaSet
檢查一個Deployment是否成功執行
更新Deployment來重新創建相應的Pods(例如,需要使用一個新的Image)
如果現有的Deployment不穩定,那么回滾到一個早期的穩定的Deployment版本
關鍵工作負載-StatefulSet
StatefulSet—有狀態應用
用於解決各個pod實例獨立生命周期管理,提供各個實例的啟動順序和唯一性穩定,唯一的網絡標識符。
穩定,持久存儲--StatefulSet:每個pod對應一個pv
有序的,優雅的部署和擴展。
有序,優雅的刪除和終止。
有序的自動滾動更新。
關鍵工作負載-DaemonSet
DaemonSet能夠讓所有(或者一些特定)的Node節點運行同一個pod。當節點加入到kubernetes集\群中, pod會被( DaemonSet)調度到該節點上運行,當節點從kubernetes集群中被移除,被( DaemonSet)調度的pod會被移除,如果刪除DaemonSet,所有跟這個DaemonSet相關的pods都會被刪除。
在使用kubernetes來運行應用時,很多時候我們需要在一個區域( zone)或者所有Node上運行同一個守護進程( pod),例如如下場景:
每個Node上運行一個分布式存儲的守護進程,例如glusterd, ceph
運行日志采集器在每個Node上,例如fluentd, logstash
運行監控的采集端在每個Node,例如prometheus node exporter, collectd等
關鍵工作負載-Job
Kubernetes關鍵概念-CustomResourceDefinition
Pod與服務的關系
Service
Service定義了pods的邏輯集合和訪問這個集合的策略。 Pods集合是通過定義Service時提供的Label選擇器完成的
Service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理
Service的抽象使得前端客戶和后端Pods進行了解耦
支持ClusterIP, NodePort以及LoadBalancer三種類型
Service的底層實現有userspace、 iptables和ipvs三種模式
Service類型: ClusterIP、 NodePort、 LoadBalancer
Ingress
Ingress基於service實現7層路由轉發能力