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