【云原生 ? Kubernetes】認(rèn)識 k8s蟋定、k8s 架構(gòu)粉臊、核心概念點(diǎn)介紹
一、Kubernetes 簡介
Kubernetes 簡稱 k8s驶兜,是支持云原生部署的一個平臺扼仲,起源于谷歌。谷歌早在十幾年之前就對其應(yīng)用抄淑,通過容器方式進(jìn)行部署屠凶。
k8s 本質(zhì)上就是用來簡化微服務(wù)的開發(fā)和部署的,關(guān)注點(diǎn)包括自愈和自動伸縮蝇狼、調(diào)度和發(fā)布阅畴、調(diào)用鏈監(jiān)控、配置管理迅耘、Metrics 監(jiān)控贱枣、日志監(jiān)控监署、彈性和容錯、API 管理纽哥、服務(wù)安全等钠乏,k8s 將這些微服務(wù)的公共關(guān)注點(diǎn)以組件形式封裝打包到 k8s 這個大平臺中,讓開發(fā)人員在開發(fā)微服務(wù)時專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)春塌,而不需要去特別關(guān)系微服務(wù)底層的這些公共關(guān)注點(diǎn)晓避,大大簡化了微服務(wù)應(yīng)用的開發(fā)和部署,提高了開發(fā)效率只壳。
二俏拱、Kubernetes 架構(gòu)
k8s 總體架構(gòu)采用了經(jīng)典的 master slave 架構(gòu)模式,分 master 節(jié)點(diǎn)和 worker 節(jié)點(diǎn)吼句,節(jié)點(diǎn)可以是虛擬機(jī)也可以是物理機(jī)锅必。
master 節(jié)點(diǎn)由以下組件組成;
etcd惕艳,一種的分布式存儲機(jī)制搞隐,底層采用 Raft 協(xié)議,k8s 集群的狀態(tài)數(shù)據(jù)包括配置远搪、節(jié)點(diǎn)等都存儲于 etcd 中劣纲,它保存了整個集群的狀態(tài)。
API server谁鳍,對外提供操作和獲取 k8s 集群資源的的 API癞季,是唯一操作 etcd 的組件,其他的組件包括管理員操作都是通過 API server 進(jìn)行交互的棠耕,可以將它理解成 etcd 的 “代理人”余佛。
Scheduler,在 k8s 集群中做調(diào)動決策窍荧,負(fù)責(zé)資源的調(diào)度辉巡,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機(jī)器上。
Controller Manager蕊退,相當(dāng)于集群狀態(tài)的協(xié)調(diào)者郊楣,觀察著集群的實(shí)際狀態(tài),與 etcd 中的預(yù)期狀態(tài)進(jìn)行對比瓤荔,如果不一致則對資源進(jìn)行協(xié)調(diào)操作讓實(shí)際狀態(tài)和預(yù)期狀態(tài)達(dá)到最終的一致净蚤,維護(hù)集群的狀態(tài),比如故障檢測输硝、自動擴(kuò)展今瀑、滾動更新等。
worker 節(jié)點(diǎn)由以下組件組成:
Controller Runtime,下載鏡像和運(yùn)行容器的組件橘荠,負(fù)責(zé)鏡像管理以及 Pod 和容器的真正運(yùn)行(CRI)屿附。
Pod,k8s 中特有的一個概念哥童,可以理解為對容器的包裝挺份,是 k8s 的基本調(diào)度單位,實(shí)際的容器時運(yùn)行在 Pod 中的贮懈,一個節(jié)點(diǎn)可以啟動一個或多個 Pod匀泊。
kubelet,負(fù)責(zé)管理 worker 節(jié)點(diǎn)上的組件朵你,與 master 節(jié)點(diǎn)上的 API server 節(jié)點(diǎn)進(jìn)行交互各聘,接受指令執(zhí)行操作。
kube-proxy撬呢,負(fù)責(zé)對 Pod 進(jìn)行尋址和負(fù)載均衡
用戶操作 k8s 集群一般是通過 kubectl 命令行工具或者 dashboard伦吠;Pod 之間進(jìn)行通訊是通過集群內(nèi)部的覆蓋網(wǎng)絡(luò) Overlay Network,外部流量想要進(jìn)入集群訪問 Pod 則是通過負(fù)載均衡 Load Balander 設(shè)備進(jìn)行魂拦。
三、Kunbernetes 有哪些核心概念搁嗓?
1. 集群 Cluster
集群有多個節(jié)點(diǎn)組成且可以按需添加節(jié)點(diǎn)(物理機(jī)/虛擬機(jī))芯勘,每一個節(jié)點(diǎn)都包含一定數(shù)量的 CPU 和內(nèi)存 RAM。
2. 容器 Container
k8s 本身是一個容器調(diào)度平臺腺逛,從宿主機(jī)操作系統(tǒng)來看荷愕,容器就是一個一個的進(jìn)程。從容器內(nèi)部來看容器就是一個操作系統(tǒng)棍矛,它有著自己的網(wǎng)絡(luò)安疗、CPU、文件系統(tǒng)等資源够委。
3. POD
k8s 也不是直接調(diào)度容器的荐类,而是將其封裝成了一個個 POD,POD 才是 k8s 的基本調(diào)度單位茁帽。每個 POD 中可以運(yùn)行一個或多個容器玉罐,共享 POD 的文件系統(tǒng)、IP 和網(wǎng)絡(luò)等資源潘拨,每一個 POD 只有一個 IP吊输。
4. 副本集 ReplicaSet
一個應(yīng)用發(fā)布時會發(fā)布多個 POD 實(shí)例,副本集可對應(yīng)一個應(yīng)用的一組 POD铁追,它可以通過模板來規(guī)范某個應(yīng)用的容器鏡像季蚂、端口,副本數(shù)量等。運(yùn)行時副本集會監(jiān)控和維護(hù) POD 的數(shù)量扭屁,數(shù)量過多則會下線 POD算谈,過少則啟動 POD。
5. 服務(wù) service
POD 在 k8s 中是不固定的疯搅,可能會掛起或者重啟濒生,且掛起重啟都是不可預(yù)期的,那么這就會導(dǎo)致服務(wù)的 IP 也隨著不停的變化幔欧,給用戶的尋址造成一定的困難罪治。而 service 就是用來解決這個問題的,它屏蔽了應(yīng)用的 IP 尋址和負(fù)載均衡礁蔗,消費(fèi)方可直接通過服務(wù)名來訪問目標(biāo)服務(wù)觉义,尋址和負(fù)載均衡均由 service 底層進(jìn)行。
6. 發(fā)布 Deployment
副本集就是一種基本的發(fā)布機(jī)制浴井,可以實(shí)現(xiàn)基本的或者高級的應(yīng)用發(fā)布晒骇,但操作較為繁瑣。未來簡化這些操作磺浙,k8s 引入了 Deployment 來管理 ReplicaSet洪囤,實(shí)現(xiàn)一些高級發(fā)布機(jī)制。
7. ConfigMap/Secret
微服務(wù)在上線時需要設(shè)置一些可變配置撕氧,環(huán)境不同則配置值不同瘤缩,有些配置如數(shù)據(jù)庫的連接字符串在啟動時就應(yīng)該配好,有些配置則可以在運(yùn)行中動態(tài)調(diào)整伦泥。為了實(shí)現(xiàn)針對不同環(huán)境靈活實(shí)現(xiàn)動態(tài)配置剥啤,微服務(wù)就需要 ConfigMap 的支持。
k8s 平臺內(nèi)置支持微服務(wù)的配置(ConfigMap)不脯,開發(fā)人員將配置填寫在 ConfigMap 中府怯,k8s 再 將 ConfigMap 中的配置以環(huán)境變量的形式注入 POD,這樣 POD 中的應(yīng)用就可以訪問這些配置防楷。
Secret 是一種特殊的 ConfigMap牺丙,提供更加安全的存儲和訪問配置機(jī)制。
8. DaemonSet
在微服務(wù)中域帐,每個節(jié)點(diǎn)需要配置一個常駐守護(hù)進(jìn)程赘被。DaemonSet 可支持在每一個 worker 節(jié)點(diǎn)上面配置一個守護(hù)進(jìn)程 POD 并且保證每一個節(jié)點(diǎn)上有且僅有一個 POD。
9. 核心概念總結(jié)
————————————————
版權(quán)聲明:本文為CSDN博主「Developer 小馬」的原創(chuàng)文章肖揣,遵循CC 4.0 BY-SA版權(quán)協(xié)議民假,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_53072519/article/details/125228115