Kubernetes----基礎概念篇

前言:

Kubernetes 是一個可移植的、可擴展的開源平臺,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。Kubernetes 擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支持和工具廣泛可用。

名稱 Kubernetes 源於希臘語,意爲 “舵手” 或 “飛行員”。Google 在 2014 年開源了 Kubernetes 項目。Kubernetes 建立在 Google 在大規模運行生產工作負載方面擁有十幾年的經驗的基礎上,結合了社區中最好的想法和實踐。

一、Kubernetes 發展

  • 傳統部署時代

    早期,組織在物理服務器上運行應用程序。無法爲物理服務器中的應用程序定義資源邊界,這會導致資源分配問題。

    例如,如果在物理服務器上運行多個應用程序,則可能會出現一個應用程序佔用大部分資源的情況,結果可能導致其他應用程序的性能下降。一種解決方案是在不同的物理服務器上運行每個應用程序,但是由於資源利用不足而無法擴展,並且組織維護許多物理服務器的成本很高

在這裏插入圖片描述

  • 虛擬化部署時代

    作爲解決方案,引入了虛擬化功能,它允許您在單個物理服務器的 CPU 上運行多個虛擬機(VM)。虛擬化功能允許應用程序在 VM 之間隔離,並提供安全級別,因爲一個應用程序的信息不能被另一應用程序自由地訪問。

    因爲虛擬化可以輕鬆地添加或更新應用程序、降低硬件成本等等,所以虛擬化可以更好地利用物理服務器中的資源,並可以實現更好的可伸縮性
    在這裏插入圖片描述

  • 容器部署時代

容器類似於 VM,但是它們具有輕量級的隔離屬性,可以在應用程序之間共享操作系統(OS)。因此,容器被認爲是輕量級的。容器與 VM 類似,具有自己的文件系統、CPU、內存、進程空間等。由於它們與基礎架構分離,因此可以跨雲和 OS 分發進行移植
在這裏插入圖片描述

二、Kubernetes 作用

  • 容器因爲具有許多優勢而變得很流行,容器是打包和運行應用程序非常好的方式,在生產環境中會面臨一個問題:

    在日常工作中,管理運行的應用程序,並確保不會停機,例如,如果一個容器發送故障,則需要啓動另一個容器。如果給系統處理,效率會較低

三、 Kubernetes 其他特性

  • Kubernetes 不是傳統的、包羅萬象的 PaaS(平臺即服務)系統,由於 Kubernetes 在容器級別而不是在硬件級別運行,因此它提供了 PaaS 產品共有的一些普遍適用的功能,例如部署、擴展、負載均衡、日誌記錄和監視
  • 但是,Kubernetes 不是單一的,默認解決方案是可選和可插拔的。Kubernetes 提供了構建開發人員平臺的基礎,但是在重要的地方保留了用戶的選擇和靈活性
3.1 Kubernetes其他特性
  • ① Kubernetes 不限制支持的應用程序類型。Kubernetes 旨在支持極其多種多樣的工作負載,包括無狀態、有狀態和數據處理工作負載。如果應用程序可以在容器中運行,那麼它應該可以在 Kubernetes 上很好地運行。
  • ② Kubernetes 不部署源代碼,也不構建應用程序。持續集成(CI)、交付和部署(CI/CD)工作流取決於組織的文化和偏好以及技術要求
  • ③ Kubernetes 不提供應用程序級別的服務作爲內置服務,例如中間件(例如,消息中間件)、數據處理框架(例如,Spark)、數據庫(例如,mysql)、緩存、集羣存儲系統(例如,Ceph)。這樣的組件可以在 Kubernetes 上運行,並且/或者可以由運行在 Kubernetes 上的應用程序通過可移植機制(例如,開放服務代理)來訪問
  • ④ Kubernetes 不指定日誌記錄、監視或警報解決方案。它提供了一些集成作爲概念證明,並提供了收集和導出指標的機制。
  • ⑤ Kubernetes 不提供或不要求配置語言/系統(例如 jsonnet),它提供了聲明性 API,該聲明性 API 可以由任意形式的聲明性規範所構成。
  • ⑥ Kubernetes 不提供也不採用任何全面的機器配置、維護、管理或自我修復系統
  • ⑦ 此外,Kubernetes 不僅僅是一個編排系統,實際上它消除了編排的需要。編排的技術定義是執行已定義的工作流程:首先執行 A,然後執行 B,再執行 C。相比之下,Kubernetes 包含一組獨立的、可組合的控制過程,這些過程連續地將當前狀態驅動到所提供的所需狀態。從 A 到 C 的方式無關緊要,也不需要集中控制,這使得系統更易於使用且功能更強大、健壯、彈性和可擴展性。

四、Kubernetes 集羣架構與組件

4.1 Kubernetes 集羣架構圖

在這裏插入圖片描述

4.2 Kubernetes 各組件詳解
  • master節點主要由apiserver、controller-manager和scheduler三個組件,以及一個用於集羣狀態存儲的etcd存儲服務組成,而每個node節點則主要包含kubelet、kube-proxy及容器引擎等組件。此外,完整的集羣服務還依賴於一些附加組件,如kubedns等。
4.2.1 Master 節點/組件
  • Master組件

    提供集羣的管理控制中心。Master組件可以在集羣中任何節點上運行。但是爲了簡單起見,通常在一臺VM/機器上啓動所有Master組件,並且不會在此VM/機器上運行用戶容器。

  • **① kube-apiServer(核心組件) **

    Kubernetes API,集羣的統一吐口,各組件協調者,以RESTful api 提供接口服務,所有的對象資源的增刪改查和監聽操作都是叫給APIServer處理後再提交給Etcd存儲

  • ② kube-controller-manager

    處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManaager就是負責管理這些控制器的

    控制器包括(部分):

    • 節點控制器:負責在節點出現故障時進行通知和響應。
    • 制控制器:負責爲系統中的每個複製控制器對象維護正確數量的Pod。
    • 端點控制器:填充“端點”對象(即,加入“服務和窗格”)。
    • 服務帳戶和令牌控制器:爲新的名稱空間創建默認帳戶和API訪問令牌。
  • ③ kube-scheduler

    根據調度算法爲新創建的Pod選擇一個Node節點,可以任意部署,可以再部署再同一個節點上,也可以部署再不同的節點上。

    調度算法(之後會對此進行介紹)

    • ① 預選算法:過濾nodes
    • ② 優選算法:對nodes打分
  • ④ Etcd

    分佈式鍵值存儲系統,用於保存集羣狀態數據,比如Pod、Service等對象信息

    Etcd 具有服務發現系統,這是mysql、Oracle數據庫鎖沒有的,同時還有以下特點:

    • 簡單:安裝配置簡單,而且提供了HTTP API進行交互,使用也很簡單
    • 安全:支持SSL證書驗證
    • 快速:根據官方提供的benchmark數據,單實例支持每秒2K+讀操作
    • 可靠:採用raft算法,實現分佈式系統數據的可用性和一致性

    之後也會對Etcd進行單篇博客介紹

4.2.2 Node節點組件
  • 節點組件運行在Node,提供Kubernetes運行時環境,以及維護Pod。

  • ① kublet

    kubelet 是Master在Node節點上的Agent,管理本機運行容器的生命週期,比如創建容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器

  • ② kube-proxy

    在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工作。

  • ③ docker或rocket

    容器引擎,運行容器

4.2.3 Add-ons 附加組件
  • kube-dns:負責爲整個集羣提供DNS服務;
  • Ingress Controller:爲服務提供外網入口;
  • Heapster:提供資源監控;
  • Dashboard:提供GUI;
  • Federation:提供跨可用區的集羣;
  • Fluentd-elasticsearch:提供集羣日誌採集、存儲與查詢
4.3 單節點架構工作流程
4.3.1 單節點簡易圖

在這裏插入圖片描述

4.3.2 流程詳解:
  • 假設用戶需創建 nginx資源(網站/調度)
  • 請求發送至master 首先需要經過apiserver(資源控制請求的唯一入口)
  • apiserver 接收到請求後首先會先記載在Etcd中
  • Etcd的數據庫根據controllers manager(控制器) 查看創建的資源狀態(有無狀態化)
  • 通過controllers 觸發 scheduler (調度器)
  • scheduler 通過驗證算法 驗證架構中的nodes節點,篩選出最適合創建該資源,接着分配給這個節點進行創建
  • node節點中的kubelet 負責執行master給與的資源請求,根據不同指令,執行不同操作
  • 對外提供服務則由kube-proxy開設對應的規則(代理)
  • container 容器開始運行(runtime 生命週期開始計算)
  • 外界用戶進行訪問時,需要經過kube-proxy 訪問到container
  • 如果container 因故障而被銷燬了,master節點的controllers 會再次通過scheduler 資源調度通過kubelet再次創建容器,恢復基本條件限制

五、Kubernetes 核心概念

  • Pod

    ① 最小部署單元

    ② 一組容器的集合

    ③ 一個Pod中的容器共享網絡命名空間(可以理解在同一個局域網)

    ④ Pod 是短暫的(有生命週期)

  • Controllers

    ① ReplicaSet:確保預期的Pod副本數量(參數,可進行設置)

    ② Deployment:無狀態應用(例如:web、nignx、apache、tomcat)

    ③ StatefulSet:有狀態應用部署

    • 有狀態:該應用獨一無二,無法重新創建進行完美替代,例如mysql、Oracle數據庫

    ④ DaemonSet:確保所有的Node運行同一個Pod(把所有的Node設置爲同一個命名空間)

    ⑤ Job:一次性任務(類比linux:at)

    ⑥ Cronjob:定時任務(類比linux:crontab)

    更高層次對象,部署和管理Pod

  • Service

    防止Pod失聯

    定義一組Pod訪問的策略(主要作用)

    確保每個Pod之間的獨立性(安全)

  • Label

    標籤,附加到某個資源上,用於關聯對象、查詢和篩選

  • Namespaces

    命名空間,將對象邏輯上隔離

  • Annotations

    註釋

總結:

本篇博客介紹了k8s中的基礎概念,之後會逐步進行深入介紹~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章