溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實現(xiàn)K8s集群架構(gòu)與高可用解析

發(fā)布時間:2021-12-16 10:31:30 來源:億速云 閱讀:362 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)如何實現(xiàn)K8s集群架構(gòu)與高可用解析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

 

基本工作過程

Kubernetes 的核心工作過程:

  • 資源對象:Node、Pod、Service、Replication Controller 等都可以看作一種資源對象

  • 操作:通過使用 kubectl 工具,執(zhí)行增刪改查

  • 存儲:對象的目標狀態(tài)(預(yù)設(shè)狀態(tài)),保存在 etcd 中持久化儲存;

  • 自動控制:跟蹤、對比 etcd 中存儲的目標狀態(tài)與資源的當(dāng)前狀態(tài),對差異資源糾偏,自動控制集群狀態(tài)。

Kubernetes 實際是:高度自動化的資源控制系統(tǒng),將其管理的一切抽象為資源對象,大到服務(wù)器 Node 節(jié)點,小到服務(wù)實例 Pod。

Kubernetes 的資源控制是一種聲明+引擎的理念:

  • 聲明:對某種資源,聲明他的目標狀態(tài)

  • 自動:Kubernetes 自動化資源控制系統(tǒng),會一直努力將該資源對象維持在目標狀態(tài)。

架構(gòu)(物理+邏輯)

Kubernetes 集群,是主從架構(gòu):

  • Master:管理節(jié)點,集群的控制和調(diào)度

  • Node:工作節(jié)點,執(zhí)行具體的業(yè)務(wù)容器

如何實現(xiàn)K8s集群架構(gòu)與高可用解析

下述幾個組件,都是獨立的進程,每個進程都是 Go 語言編寫,實際部署 Kubernetes 集群,就是部署這些程序。

Master節(jié)點:

  • kube-apiserver

  • kube-controller-manager

  • kube-scheduler

  • Node節(jié)點:

  • kubelet

  • kube-proxy

具體,2 種角色的節(jié)點,需要運行的進程和職責(zé)不同,詳細描述如下。

Master 管理節(jié)點:管理整個 Kubernetes 集群,接收外部命令,維護集群狀態(tài)。

  • apiserver: Kubernetes API Server

  • 集群控制的入口

  • 資源的增刪改查,持久化存儲到 etcd

  • kubectl 直接與 API Server 交互,默認端口 6443。

  • etcd: 一個高可用的 key-value 存儲系統(tǒng)

  • 作用:存儲資源的狀態(tài)

  • 支持 Restful 的API。

  • 默認監(jiān)聽 2379 和 2380 端口(2379提供服務(wù),2380用于集群節(jié)點通信)(疑問:集群節(jié)點,是說 etcd 的集群? Master  集群?)

  • scheduler: 負責(zé)將 pod 資源調(diào)度到合適的 node 上。

  • 調(diào)度算法:根據(jù) node 節(jié)點的性能、負載、數(shù)據(jù)位置等,進行調(diào)度。

  • 默認監(jiān)聽 10251 端口。

  • controller-manager: 所有資源的自動化控制中心

  • 每個資源,都對應(yīng)有一個控制器(疑問:作用是什么?)

  • controller manager 管理這些控制器

  • controller manager 是自動化的循環(huán)控制器

  • Kubernetes 的核心控制守護進程,默認監(jiān)聽10252端口。(疑問:為什么有監(jiān)聽段口感?)

補充說明:

scheduler和controller-manager都是通過apiserver從etcd中獲取各種資源的狀態(tài),進行相應(yīng)的調(diào)度和控制操作。

Node 節(jié)點:Master 節(jié)點,將任務(wù)調(diào)度到 Node 節(jié)點,以 docker 方式運行;當(dāng) Node 節(jié)點宕機時,Master 會自動將 Node  上的任務(wù)調(diào)度到其他 Node 上。

  • kubelet: 本節(jié)點Pod的生命周期管理,定期向Master上報本節(jié)點及Pod的基本信息

  • Kubelet是在每個Node節(jié)點上運行agent

  • 負責(zé)維護和管理所有容器:從 apiserver 接收 Pod 的創(chuàng)建請求,啟動和停止Pod

  • Kubelet不會管理不是由Kubernetes創(chuàng)建的容器

  • 定期向Master上報信息,如操作系統(tǒng)、Docker版本、CPU、內(nèi)存、pod 運行狀態(tài)等信息

  • kube-proxy:集群中 Service 的通信以及負載均衡

  • 功能:服務(wù)發(fā)現(xiàn)、反向代理。

  • 反向代理:支持TCP和UDP連接轉(zhuǎn)發(fā),默認基于Round Robin算法將客戶端流量轉(zhuǎn)發(fā)到與service對應(yīng)的一組后端pod。

  • 服務(wù)發(fā)現(xiàn):使用 etcd 的 watch  機制,監(jiān)控集群中service和endpoint對象數(shù)據(jù)的動態(tài)變化,并且維護一個service到endpoint的映射關(guān)系。(本質(zhì)是:路由關(guān)系)

  • 實現(xiàn)方式:存在兩種實現(xiàn)方式,userspace 和 iptables。

  • userspace:在用戶空間,通過kuber-proxy實現(xiàn)負載均衡的代理服務(wù),是最初的實現(xiàn)方案,較穩(wěn)定、效率不高;

  • iptables:在內(nèi)核空間,是純采用iptables來實現(xiàn)LB,是Kubernetes目前默認的方式;

  • runtime:一般使用 docker 容器,也支持其他的容器。

集群的高可用

Kubernetes 集群,在生產(chǎn)環(huán)境,必須實現(xiàn)高可用:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 實現(xiàn)Master節(jié)點及其核心組件的高可用;

  3. 如果Master節(jié)點出現(xiàn)問題的話,那整個集群就失去了控制;

具體的 HA 示意圖:

如何實現(xiàn)K8s集群架構(gòu)與高可用解析

上述方式可以用作 HA,但仍未成熟,據(jù)了解,未來會更新升級 HA 的功能.

具體工作原理:

  • etcd 集群:部署了3個Master節(jié)點,每個Master節(jié)點的etcd組成集群

  • 入口集群:3個Master節(jié)點上的APIServer的前面放一個負載均衡器,工作節(jié)點和客戶端通過這個負載均衡和APIServer進行通信

  • pod-master保證僅是主master可用,scheduler、controller-manager 在集群中多個實例只有一個工作,其他為備用

關(guān)于如何實現(xiàn)K8s集群架構(gòu)與高可用解析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

k8s
AI