k8s No 1 概述與架構

2022-05-10 02:22:21 字數 3766 閱讀 7702

本章目錄

k8s概述

k8s系統架構

k8s工作流程圖

一  概述

k8s是谷歌公司基於內部容器管理系統borg開源出的乙個容器集群管理工具,它是用go語言開發,提供了容器的應用部署,規劃,更新,維護等功能。

相信你讀這篇文章之前,你已經有了docker基礎。並且對k8s已經有個大概的理解,所以關於k8s的背景知識不做過多贅婿,下面我們直接上乾貨

二  系統架構

學習新知識之前,一定要先對知識的整體框架有個大概的了解,為了更加生動形象的理解k8s框架,我在網上找了一張圖(出處見水印),我們日後的

學習也會按照架構圖上的知識點一點一點的鋪散開來

下面我們將架構圖逐一拆解

k8s操作物件

pod,service,replication  controller三種就是我們日常經常操作的三類物件,當然,在k8s中,不僅僅只有這幾種型別的資源,還有namespace,secret,node,

ingress,configmap等等

下面我們簡單的對這三種資源做下介紹

pod在英文中的意思是豆莢,我們可以把容器想象成乙個個的豆子,pod就是包裹住這些豆子的豆莢

pod是k8s集群中所有業務型別的基礎,也是k8s集群中可操作的最小單元。可以看作執行在k8s集群中的小機械人,不同型別的業務就需要不同型別的小機械人去執行。目前

k8s中的業務主要可以分為

長期伺服型(long-running)

器人控制器為deployment、

job、daemonset和petset(現在不叫petset而叫statefulset)。

rc是k8s集群中最早的保證pod高可用的api物件。比如有這樣乙個場景,你要啟動倆個或者更多相同功能的pod容器來提供服務,我們總不能手動的乙個個的去啟動這些pod,然

後再去手動管理他吧?

這種做法明顯很low,k8s早已經為我們做好乙個pod管理器,叫做replication controller,專門為我們管理那些帶有副本的pod。replication controller通過監控

執行中的pod來保證集群中執行指定數目的pod副本。指定的數目可以是多個也可以是1個;少於指定數目,rc就會啟動執行新的pod副本;

多於指定數目,rc就會殺死多餘的pod

副本,控制器在做這些操作的時候完全不用我們去人工參與,他已經自己為我們做好這一切。即使在指定數目為1的情況下,通過rc執行pod也比直接執行pod更明智,因為rc也可

以發揮它高可用的能力,保證永遠有1個pod在執行。rc是k8s較

早期的技術概念,只適用於長期伺服型的業務型別,比如控制pod提供高可用的web服務。當前rs已經取代了歷史

版本的rc,rs是最新一代的rc控制器,他提供了更多的匹配模式,而且rs一般也不單獨使用,而是作為deployment的理想化引數去使用

service一種抽象的服務,rc、rs和deployment只是保證了支撐服務的微服務pod的數量,但是沒有解決如何訪問這些服務的問題。乙個pod

只是乙個執行服務的例項,隨時可能在乙個節點上停止,

在另乙個節點以乙個新的ip啟動乙個新的pod,因此不能以確定的ip和埠號提供服務。

要穩定地提供服務需要服務發現和負載均衡能力。服務發現完成的工作,是針對客戶端訪問的服務,找到對

應的的後端服務例項。在k8s集群中,

客戶端需要訪問的服務就是service物件。每個service會對應乙個集群內部有效的虛擬ip,集群內部通過虛擬ip訪問乙個服務。在k8s集群中微服

務的負載均衡

是由kube-proxy實現的。kube-proxy是k8s集群內部的負載均衡器。它是乙個分布式**伺服器,在k8s的每個節點上都有乙個;這

一設計體現了它的伸縮性優勢,需要訪問服務的節點越多,提供

負載均衡能力的kube-proxy就越多,高可用節點也隨之增多。與之相比,我們平時

在伺服器端做個反向**做負載均衡,還要進一步解決反向**的負載均衡和高可用問題。

2. 功能元件

在k8s集群中,共有倆部分,分為master節點與node節點,master節點還有node節點都對應一台實體伺服器或者虛擬機器

上面的功能組建遺漏了倆個最重要的部分,所以我們給他補上

針對以上元件,我們做一下簡要說明

apiserve:提供了資源操作的唯一入口,並提供認證、授權、訪問控制、api註冊和發現等機制;

controller manager:維護集群的狀態,比如故障檢測、自動擴充套件、滾動更新等;

scheduler:負責資源的排程,按照預定的排程策略將pod排程到相應的機器上;

flannel: 負責讓不同機器上面pod跨節點進行網路通訊

etcd: 提供強一致型的資料庫與服務發現,在k8s集群中,網路配置還有資源物件的資訊都儲存在etcd中

三  工作流程

上面的流程圖意在通過yaml檔案建立乙個deployment資源,先畫個圖說一下pod,replicaset,deployment三者關係,不然下面的流程解釋初學者看不懂

因為deployment包含replicaset包含pod,所以建立deployment的時候會連續建立三種資源

1、準備好乙個包含應用程式的deployment的yml檔案,然後通過kubectl客戶端工具傳送給apiserver,apiserver接收到客戶端的請求並將資源內容儲存到資料庫(etcd)中。

2、deloyment controlle監控apiserver狀態發生了改變,知道了apiserver需要建立乙個deployment資源

3、deployment controller 根據apiserver的狀態資訊,想要去建立乙個replicaset,此時apiserver檢測到了deployment controller的期望狀態的變化,再次記錄到資料庫etcd中

4、replicaset 監控到了apiserver狀態發生了改變,知道了apiserver需要建立乙個replicaset

5、replicaset controller根據apiserver的狀態資訊,想要去建立乙個pod,此時apiserver檢測到了replicaset controller的期望狀態的變化,再次記錄到資料庫etcd中,此時

最低級別的pod的建立準備工作也完成,此時實際上pod,replicaset,deployment三種資源都沒有實際被建立,剛才所說的建立類似於一種演習

6、scheduler再次檢查資料庫變化,發現尚未被分配到具體執行節點(node)的pod

7、根據一組相關規則將pod分配到可以執行它們的節點上,並更新資料庫,記錄pod分配情況。

8、kubelete監控資料庫變化,此時kubelet知道自己該建立pod了,但是它本身並沒有建立容器的功能,所以它通知了有建立容器功能的docker引擎,並把建立的約束資訊

(如映象名稱,映象源等)傳遞給docker引擎

9、docker引擎根據收到的資訊開始拉取映象,建立容器,此時,deployment才算真正建立成功

四  小結

以上就是k8s的簡單介紹,後續我們將更深入的講解每乙個元件與功能

文中如有錯誤之處,請大家向我及時指出,謝謝

1 k8s 架構概述

ansible 應用程式編排工具 docker 應用程式容器化 容器化管理介面和早期應用的管理是不同的。docker 的出現就呼喚面向容器化的編排工具的實現。docker 三劍客 docker compose 編排工具,適用於單機 docker swarm 將多台docker主機整合成乙個資源池。d...

1 k8s 環境搭建

1 初始化伺服器 所有節點master node 關閉防火牆 systemctl stop firewalld systemctl disable firewalld 關閉selinux setenforce 0 關閉臨時關閉selinux vi etc selinux config 進入selin...

k8s學習記錄1 docker概念,k8s概念

目錄 docker對比虛擬機器 容器的隔離技術 docker概念 為什麼需要k8s?k8s概念 docker更加輕量級 每個虛擬機器需要執行自己的一組系統程序 虛擬機器的主要好處 它們能提供完全隔離的環境,因為它們都執行在自己linux核心上。linux命名空間隔離 檔案,程序,網路介面,主機名等 ...