Kubernetes 概述
當下,我們很多項目于都在Cloud Native
(云原生)的上面,這種方法旨在使組織能夠確??捎眯圆⒖焖夙憫瓦m應變化,云原生其實就是一組本質(zhì)上支持在不同云環(huán)境(公共云、私有云或混合云)上大規(guī)模構建、運行和管理應用程序的實踐和技術。
云原生離不開兩個概念:容器
和微服務
,這兩個概念是任何云原生應用程序的構建塊:
- 微服務是小型、獨立的服務(軟件)的集合,可以在容器中輕松打包和執(zhí)行。
- 容器基于容器鏡像, 容器是一個標準的軟件單元,它打包代碼及其所有依賴項,無論基礎設施如何, 都允許應用程序快速可靠地運行
- 容器鏡像是一個輕量級的、獨立的、可執(zhí)行的軟件包,其中包含運行應用程序所需的一切,容器鏡像在運行時成為容器
使用微服務架構是確保應用程序速度、敏捷性、增長和可用性的基礎,因此,它改善了用戶體驗。
例如,隨著網(wǎng)絡流量的增加或減少,放置在單體專用服務器上的整體應用程序比一組微服務更難擴展和縮減。
然而,微服務架構的快速采用導致生產(chǎn)環(huán)境中容器數(shù)量的增加,這使得容器的管理和維護變得非常困難。并且,如果服務的請求量上來,已部署的服務響應不過來的時候怎么辦呢?傳統(tǒng)的做法是,如果請求量、內(nèi)存、CPU超過閾值做了告警,運維馬上再加幾臺服務器,部署好服務之后,接入負載均衡來分擔已有服務的壓力。這樣從監(jiān)控告警到部署服務,中間需要人力介入。 因此,Kubernetes
的誕生就是為了解決這個問題。k8s實現(xiàn)自動完成服務的部署、更新、卸載和擴容、縮容等功能
Kubernetes(也稱為 K8s)是一個開源平臺,旨在自動化容器化應用程序的配置、管理、可擴展性和可用性。(或者簡單地說,它是一個編排工具)
Kubernetes
最初是一個名為 Borg
的 Google 內(nèi)部項目。 然后它被交給開源社區(qū),現(xiàn)在由云原生計算基金會(CNCF)維護。
架構
從上圖可以看到:
Kubernetes
集群由Control Plane
和工作節(jié)點(Worker Node
)組成。
Worker Nodes
Worker Node
負責托管稱為 Pod
的 k8s 對象。而Pod
是k8s對象的最小單位。它在其中運行一個容器化應用程序。
所有 k8s
節(jié)點都運行三個主要代理:
-
Container Runtime
: 在節(jié)點上運行容器, 負責從注冊表加載容器鏡像、監(jiān)視容器資源、將容器彼此隔離以及管理容器生命周期(即 docker) -
kube-proxy
: 它通過監(jiān)視兩個主要的 k8s 對象:Services
和Endpoints
來維護 k8s 節(jié)點上的網(wǎng)絡規(guī)則。這些網(wǎng)絡規(guī)則允許Pods
在 k8s 集群內(nèi)部或外部可訪問 -
kubelet
:一個systemd
進程。它接收PodSpecAPI
調(diào)用并與Container Runtime
通信,以確保遵守PodSpec
。
PodSpec
: 是描述Pod
的文件,它的文件格式可以是YAML
或JSON
格式。每次更改后,會由kube-controller-manager
通過kube-apiserver
發(fā)送到Kubelet
代理,以便Kubelet
可以執(zhí)行必要的更新以實現(xiàn)當前狀態(tài)和所需狀態(tài)之間的匹配。它還會發(fā)送到kube-scheduler
以決定在哪個節(jié)點上運行 pod。
Control Plane Node
Control Plane
由與Worker Node
相同的代理加上幾個其他代理組成。大多數(shù)進程在容器內(nèi)執(zhí)行,其中一些是 systemd
進程。他們負責確保集群的當前狀態(tài)與所需狀態(tài)匹配
-
kube-apiserver
: apiserver k8s 集群的單一入口,它主要負責根據(jù)用戶的具體請求,去通知其他組件
從架構圖可以看出k8s各個代理之間不直接通信。 數(shù)據(jù)通過kube-apiserver
在代理之間傳遞。因此,kube-apiserver
是 k8s 集群的單個入口,處理所有內(nèi)部和外部的 k8s 流量(API 調(diào)用)。
apiserver
調(diào)用時會為每個 API 調(diào)用執(zhí)行身份驗證(authentication
)、授權(authorization
)和admission control
。
authentication
:當客戶端提供有效的 TLS 證書時建立(有效的 TLS 證書是由集群的 CA 簽名并受apiserver
信任的證書)authorization
:通過RBAC,指定客戶端是否可以對某些 k8s 對象執(zhí)行CRUD 操作admission controlCRUD operation
: 如果客戶端對 k8s對象執(zhí)行的操作合法,則成立。例如,當集群有一個 ResourceQuota 對象將命名空間 dev 中可以創(chuàng)建的 pod 數(shù)量限制為 2 時。如果用戶嘗試創(chuàng)建 第3個 pod,則其請求將被拒絕
-
kube-controller-manager
:由一組稱為控制器的 k8s 對象組成
在 k8s 中,Controller負責監(jiān)控和調(diào)整在Worker Node上部署的服務的狀態(tài),比如用戶要求A服務部署2個副本,當其中一個服務掛了,Controller會馬上調(diào)整,讓Scheduler再選擇一個Worker Node重新部署服務。 -
cloud-controller-manager
: 這是一個可選組件,僅在云上創(chuàng)建 Kubernetes 集群時才需要。該組件將 Kubernetes 集群鏈接到云提供商 -
kube-scheduler
: K8S 所有Worker Node的調(diào)度器。當用戶要部署服務時,Scheduler會選擇最合適的Worker Node(服務器)來部署 -
etcd
: K8S的存儲服務。etcd存儲了K8S的關鍵配置和用戶配置,K8S中僅API Server
才具備讀寫權限,其他組件必須通過API Server
的接口才能讀寫數(shù)據(jù)
最好是始終確保有 etcd 數(shù)據(jù)的備份
總結
好了,到這里就簡單的說明了k8s內(nèi)部的一些組件作用和他的一個主要架構,總的來說k8s
的Master Node
具備:請求入口管理(API Server),Worker Node調(diào)度(Scheduler),監(jiān)控和自動調(diào)節(jié)(Controller Manager),以及存儲功能(etcd);而Worker Node
具備:狀態(tài)和監(jiān)控收集(Kubelet),網(wǎng)絡和負載均衡(Kube-Proxy)、保障容器化運行環(huán)境(Container Runtime)
下一篇我們介紹k8s里面一些重要的概念:Pod
,Volume
,Container
,Deployment 和 ReplicaSet
以及Service和Ingress
等。文章來源:http://www.zghlxwxcb.cn/news/detail-499843.html
轉載:風向閱讀 - Kubernetes 系列:了解 k8s 架構(一)文章來源地址http://www.zghlxwxcb.cn/news/detail-499843.html
到了這里,關于Kubernetes 系列:了解 k8s 架構(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!