Kubernetes 優勢:
- 自動裝箱,水平擴展,自我修復
- 服務發現和負載均衡
- 自動發布(默認滾動發布模式)和回滾
- 集中化配置管理和密鑰管理
- 存儲編排
- 任務批量運行
k8s四組基本概念:
- Pod/Pod控制器
- Name/Namespace
- Label/Label選擇器
- Service/Ingress
Pod :
1、Pod 是K8S里能夠被運行的最小邏輯單元(原子單元)
2、1個Pod中可以運行多個容器,它們共享 UTS + NET + IPC 名稱空間
3、一個POD可以運行多個容器,又叫:邊車(SideCar)模式
Pod控制器:
Pod控制器是Pod啟動的一種模板,用來保證K8S里啟動的POD始終按照人們預期運行(副本數、生命周期、健康狀態檢查等);
K8S提供了眾多的POD控制器,常用的有以下幾種:
- Deployment
- DaemonSet
- ReplicaSet
- StatefulSet
- Job
- Cronjob
Name:
1、由於K8S內部,使用“資源”來定義每一種邏輯概念(功能),故每種“資源”,都應該有自己的“名稱”;
2、“資源”有:api版本(apiVersion),類別(kind),元數據(metadata),定義清單(spec),狀態(status)等配置信息;
3、“名稱”通常定義在“資源”的“元數據”信息里。
Namespace:
1、隨着項目、人員的增多和集群規模的擴大,需要一種能夠隔離K8S內各種“資源”的方法,這就是名稱空間;
2、名稱空間可以理解為K8S內部的虛擬集群組;
3、不同名稱空間內的“資源”,名稱可以相同,相同名稱空間內的同種“資源”,“名稱”不能相同;
4、合理的使用K8S名稱空間,使得集群管理員能夠更好的對交付到k8S里的服務進行分類管理和瀏覽;
5、K8S里默認的名稱空間有: default、kube-system、kube-public;
6、查詢K8S里特定“資源”要帶上相應的名稱空間。
Lable:
1、標簽是K8S特色的管理方式,便於分類管理資源對象;
2、一個標簽可以對應多個資源,一個資源也可以有多個標簽,它們是多對多的關系;
3、一個資源擁有多個標簽,可以實現不同維度的管理;
4、標簽的組成:key=value
5、與標簽類似,還有一種“注釋”(annotation)
Lable選擇器:
1、給資源打卡標簽后,可以使用標簽選擇器過濾指定的標簽;
2、標簽選擇器目前有兩個:基於等值關系(等於、不等於)和基於集合關系(屬於、不屬於、存在);
3、許多資源支持內嵌標簽選擇器字段:
matchLables
matchExpressions
Service:
1、在K8S的世界里,雖然每個POD都會分配一個單獨的IP地址,但這個IP地址會隨着POD的銷毀而消失;
2、Service(服務)就是用來解決這個問題的核心概念;
3、一個Service可以看作一組提供相同服務的POD的對外訪問接口;
4、Service 作用於哪些POD是通過標簽選擇器來定義的。
Ingress:
1、Ingress是K8S 集群里工作在OSI網絡模型下,第7層的應用,對外暴露的接口;
2、Service只能進行L4流量調度,表現形式是 ip + port;
3、Ingress 則可以調度不同業務域、不同URL訪問路徑的業務流量。
核心組件
核心組件包括:
配置存儲中心 -> etcd 服務;
主控(master)節點;
- kube-apiserver 服務
- kube-controller-manager 服務
- kube-scheduler 服務
運算(node)節點:
- kube-kubelet 服務
- kube-proxy 服務
apiserver 服務的作用:
1、提供了集群管理的REST API接口(包括鑒權、數據校驗及集群狀態變更);
2、負責其他模塊之間的數據交互,承擔通信樞紐功能;
3、資源配額的入口;
4、提供完備的集群安全機制。
controller-manager服務:由一系列控制器組成,通過 apiserver 監控整個集群的狀態,並確保集群處於預期的工作狀態;包括有:Node Controller,Deployment Controller,Service Controller, Volume Controller, Endpoint Controller,Garbage Controller, Namespace Controller, Job Controller, Resource quta Controller 等。
scheduler 服務:主要功能是接收調度pod適合的運算節點上;預算策略(predict); 優先策略(priorities)
kubelet 服務:
1、簡單來說,kubelet 的主要功能就是定時從某個地方獲取節點上POD的期望狀態(運行什么容器、運行的副本數量、網絡或者存儲如何配置等等),並調用對應的容器平台接口達到這個狀態;
2、定時匯報當前結點的狀態給 apiserver,以供調度的時候使用;
3、鏡像和容器的清理工作,保證節點上鏡像不會占滿磁盤空間,退出的容器不會占用太多資源。
kube-proxy 服務:
1、是K8S在每個節點上運行網絡的代理,service資源的載體;
2、建立了POD網絡和集群網絡的關系(cluster ip -> pod ip);
3、常用三種流量調度模式:Userspace(廢棄)、 Iptables(瀕臨廢棄)、 Ipvs(推薦);
4、負責建立和刪除包括更新調度規則、通知 apiserver 自己的更新、或者從 apiserver 那里獲取其它 kube-proxy 的調度規則變化來更新自己。
k8s 三條網絡示意圖:

節點網絡就是運算節點宿主機網絡;所有的pod網絡都是從宿主機上 NAT 出來的;kube-proxy 把 pod 網絡和 service 網絡連接了起來,注意:service 網絡是一個虛的網絡
k8s 邏輯架構圖:

CLI客戶端
k8s的客戶端為 kubectl
核心附件
核心附件包括:
CNI網絡插件 -> flannel/calico
服務發現插件 -> coredns
服務暴露插件 -> traefik
GUI管理插件 -> Dashboard
