Docker 容器的本質(zhì)摆屯,“Namespace 做隔離粥喜,Cgroups 做限制,rootfs 做文件系統(tǒng)”
K8S的每個(gè)術(shù)語都是對某種能力和某種設(shè)施的聲明式描述缴川。
一、Pod
- K8S的最小調(diào)度單元
- 一個(gè)Node節(jié)點(diǎn)里可能有多個(gè)Pod描馅,一個(gè)Pod里可能有多個(gè)docker把夸。
- 共享網(wǎng)絡(luò)
- 生命周期短暫
Pod只是一個(gè)邏輯概念。Pod:是一個(gè)容器組铭污。容器的本質(zhì)是視圖隔離恋日,資源受限的進(jìn)程。Pod也就是一個(gè)進(jìn)程組嘹狞。
Pod中的容器之間岂膳,存在超親密關(guān)系。
Pod 里的所有容器磅网,共享的是同一個(gè) Network Namespace谈截,并且可以聲明共享同一個(gè) Volume。
Pod的5種狀態(tài):Pending涧偷。Running簸喂。Succeeded。Failed燎潮。Unknown喻鳄。
二、Controller
控制器:在集群上管理和運(yùn)行容器的對象确封,用來管理Pod的生命周期除呵。
- 確保預(yù)期的pod副本數(shù)量
- 有/無狀態(tài)應(yīng)用部署
- 確保所有的node運(yùn)行在同一個(gè)pod
- 一次性任務(wù)和定時(shí)任務(wù)
Kubernetes 項(xiàng)目的 pkg/controller 目錄下有這些個(gè)文件:
deployment
job
replicaset
cronjob
statefulset
daemon
...
Pod和Controller之間的關(guān)系:
- Pod通過Controller實(shí)現(xiàn)運(yùn)維,如彈性伸縮爪喘,滾動升級等颜曾。
- Pod和Controller通過label建立聯(lián)系。
2.1 Deployment:
部署無狀態(tài)應(yīng)用
- 認(rèn)為Pod都一樣
- 無順序要求
- 不用考慮在哪個(gè)node運(yùn)行
- 隨意進(jìn)行伸縮和擴(kuò)展
一個(gè)應(yīng)用有好幾個(gè)pod腥放,用于做冗余泛啸、高可用,這就叫做deployment。
2.2 StatefulSet
部署有狀態(tài)應(yīng)用
- 每個(gè)pod獨(dú)立候址,保持啟動順序和唯一性
- 唯一的網(wǎng)絡(luò)標(biāo)識符吕粹,持久存儲
- 有序,比如mysql主從
2.3 ReplicaSet
副本
2.4 DaemonSet
部署守護(hù)進(jìn)程
如:部署一個(gè)日志采集守護(hù)進(jìn)程岗仑,每一個(gè)worker node上安裝數(shù)據(jù)采集工具匹耕。
2.5 Job 與 CronJob
一次任務(wù)(如計(jì)算)和定時(shí)任務(wù)
三、Service和容器網(wǎng)絡(luò)
定義一組pod的訪問規(guī)則荠雕,解決了Pod的IP動態(tài)變化后的服務(wù)發(fā)現(xiàn)問題稳其。
- Pod升級回滾后,ip地址會變動 Service的作用是防止pod失聯(lián)(服務(wù)發(fā)現(xiàn))炸卑。
- 定義一組Pod的訪問策略(負(fù)載均衡)既鞠。
3.1 Serice
Service三種類型
- ClusterIP:集群內(nèi)部使用,默認(rèn)形式盖文。
- NodePort:對外訪問應(yīng)用
- LoadBalancer:公有云嘱蛋,對外訪問應(yīng)用
3.2 Ingress
Ingress作為統(tǒng)一入口,由Service關(guān)聯(lián)Pod五续。Ingress7層代理洒敏。
四、PV和PVC
Persistent Volume(PV)和 Persistent Volume Claim(PVC)是套持久化存儲體系疙驾,用來持久化容器數(shù)據(jù)凶伙。
五、Operator
在 Kubernetes 生態(tài)中它碎,有一個(gè)相對更加靈活和編程友好的管理“有狀態(tài)應(yīng)用”的解決方案函荣,它就是:Operator。
K8s內(nèi)置的能力不會再去做更多的演進(jìn)了扳肛,Operator實(shí)際上就是一個(gè)API對象加一個(gè)控制器偏竟。我們通過Operator給系統(tǒng)增加功能,也避免了K8S膨脹敞峭。
Operator 的工作原理踊谋,實(shí)際上是利用了 Kubernetes 的自定義 API 資源(CRD),來描述我們想要部署的“有狀態(tài)應(yīng)用”旋讹;然后在自定義控制器里殖蚕,根據(jù)自定義 API 對象的變化,來完成具體的部署和運(yùn)維工作沉迹。
六睦疫、其它應(yīng)用
6.1 Helm
Helm是kubernetes的包管理工具,類似linux的apt和yum鞭呕。
6.2 Istio
Istio (希臘語:揚(yáng)帆起航)項(xiàng)目使用 sidecar 容器完成微服務(wù)治理的蛤育。一種Sevice Mesh解決方案。
Istio默認(rèn)使用的數(shù)據(jù)平面:envoy,envoy是CNCF第3個(gè)畢業(yè)生瓦糕。底洗。
2020.3月,1.5版本咕娄,最終架構(gòu)亥揖。
6.3 Prometheus
CNCF第二個(gè)畢業(yè)生。監(jiān)控圣勒、報(bào)警费变、數(shù)據(jù)庫。以http協(xié)議周期性抓取鍵監(jiān)控組件狀態(tài)圣贸。
7. 云原生
CNCF云原生定義:(1)服務(wù)容器化挚歧;(2)微服務(wù);(3)容器編排(K8S)吁峻。
云原生三駕馬車:Serverless(無服務(wù)昼激,只關(guān)心本身功能),Service Mesh(服務(wù)之間的網(wǎng)絡(luò)聯(lián)系)锡搜;K8S(服務(wù)的編排)。