本章目錄
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命名空間隔離 檔案,程序,網路介面,主機名等 ...