1. 程式人生 > >kubernetes-整體概述和架構

kubernetes-整體概述和架構

1、Kubernetes是什麼

Kubernetes是一個輕便的和可擴充套件的開源平臺,用於管理容器化應用和服務。通過Kubernetes能夠進行應用的自動化部署和擴縮容。在Kubernetes中,會將組成應用的容器組合成一個邏輯單元以更易管理和發現。Kubernetes積累了作為Google生產環境執行工作負載15年的經驗,並吸收了來自於社群的最佳想法和實踐。Kubernetes經過這幾年的快速發展,形成了一個大的生態環境,Google在2014年將Kubernetes作為開源專案。Kubernetes的關鍵特性包括:

  • 自動化裝箱:在不犧牲可用性的條件下,基於容器對資源的要求和約束自動部署容器。同時,為了提高利用率和節省更多資源,將關鍵和最佳工作量結合在一起。
  • 自愈能力:當容器失敗時,會對容器進行重啟;當所部署的Node節點有問題時,會對容器進行重新部署和重新排程;當容器未通過監控檢查時,會關閉此容器;直到容器正常執行時,才會對外提供服務。
  • 水平擴容:通過簡單的命令、使用者介面或基於CPU的使用情況,能夠對應用進行擴容和縮容。
  • 服務發現和負載均衡:開發者不需要使用額外的服務發現機制,就能夠基於Kubernetes進行服務發現和負載均衡。
  • 自動釋出和回滾:Kubernetes能夠程式化的釋出應用和相關的配置。如果釋出有問題,Kubernetes將能夠迴歸發生的變更。
  • 保密和配置管理:在不需要重新構建映象的情況下,可以部署和更新保密和應用配置。
  • 儲存編排:自動掛接儲存系統,這些儲存系統可以來自於本地、公共雲提供商(例如:GCP和AWS)、網路儲存(例如:NFS、iSCSI、Gluster、Ceph、Cinder和Floker等)。

2、Kubernetes的整體架構

Kubernetes屬於主從分散式架構,主要由Master Node和Worker Node組成,以及包括客戶端命令列工具kubectl和其它附加項。

  • Master Node:作為控制節點,對叢集進行排程管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所組成;
  • Worker Node:作為真正的工作節點,執行業務應用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;
  • kubectl:用於通過命令列與API Server進行互動,而對Kubernetes進行操作,實現在叢集中進行各種資源的增刪改查等操作;
  • Add-on:是對Kubernetes核心功能的擴充套件,例如增加網路和網路策略等能力。

2 Master Node(主節點)

2.1 API Server(API伺服器)

API Server主要用來處理REST的操作,確保它們生效,並執行相關業務邏輯,以及更新etcd(或者其他儲存)中的相關物件。API Server是所有REST命令的入口,它的相關結果狀態將被儲存在etcd(或其他儲存)中。API Server的基本功能包括:

  • REST語義,監控,持久化和一致性保證,API 版本控制,放棄和生效
  • 內建准入控制語義,同步准入控制鉤子,以及非同步資源初始化
  • API註冊和發現

另外,API Server也作為叢集的閘道器。預設情況,客戶端通過API Server對叢集進行訪問,客戶端需要通過認證,並使用API Server作為訪問Node和Pod(以及service)的堡壘和代理/通道。

2.2 Cluster state store(叢集狀態儲存)

Kubernetes預設使用etcd作為叢集整體儲存,當然也可以使用其它的技術。etcd是一個簡單的、分散式的、一致的key-value儲存,主要被用來共享配置和服務發現。etcd提供了一個CRUD操作的REST API,以及提供了作為註冊的介面,以監控指定的Node。叢集的所有狀態都儲存在etcd例項中,並具有監控的能力,因此當etcd中的資訊發生變化時,就能夠快速的通知叢集中相關的元件。

2.3 Controller-Manager Server(控制管理伺服器)

Controller-Manager Serve用於執行大部分的叢集層次的功能,它既執行生命週期功能(例如:名稱空間建立和生命週期、事件垃圾收集、已終止垃圾收集、級聯刪除垃圾收集、node垃圾收集),也執行API業務邏輯(例如:pod的彈性擴容)。控制管理提供自愈能力、擴容、應用生命週期管理、服務發現、路由、服務繫結和提供。Kubernetes預設提供Replication Controller、Node Controller、Namespace Controller、Service Controller、Endpoints Controller、Persistent Controller、DaemonSet Controller等控制器。

2.4 Scheduler(排程器)

scheduler元件為容器自動選擇執行的主機。依據請求資源的可用性,服務請求的質量等約束條件,scheduler監控未繫結的pod,並將其繫結至特定的node節點。Kubernetes也支援使用者自己提供的排程器,Scheduler負責根據排程策略自動將Pod部署到合適Node中,排程策略分為預選策略和優選策略,Pod的整個排程過程分為兩步:

1)預選Node:遍歷叢集中所有的Node,按照具體的預選策略篩選出符合要求的Node列表。如沒有Node符合預選策略規則,該Pod就會被掛起,直到叢集中出現符合要求的Node。

2)優選Node:預選Node列表的基礎上,按照優選策略為待選的Node進行打分和排序,從中獲取最優Node。

3、Worker Node(從節點)

3.1 Kubelet

Kubelet是Kubernetes中最主要的控制器,它是Pod和Node API的主要實現者,Kubelet負責驅動容器執行層。在Kubernetes中,應用容器彼此是隔離的,並且與執行其的主機也是隔離的,這是對應用進行獨立解耦管理的關鍵點。

在Kubernets中,Pod作為基本的執行單元,它可以擁有多個容器和儲存資料卷,能夠方便在每個容器中打包一個單一的應用,從而解耦了應用構建時和部署時的所關心的事項,已經能夠方便在物理機/虛擬機器之間進行遷移。API准入控制可以拒絕或者Pod,或者為Pod新增額外的排程約束,但是Kubelet才是Pod是否能夠執行在特定Node上的最終裁決者,而不是scheduler或者DaemonSet。kubelet預設情況使用cAdvisor進行資源監控。負責管理Pod、容器、映象、資料卷等,實現叢集對節點的管理,並將容器的執行狀態彙報給Kubernetes API Server。

3.2 Container Runtime(容器執行時)

每一個Node都會執行一個Container Runtime,其負責下載映象和執行容器。Kubernetes本身並不停容器執行時環境,但提供了介面,可以插入所選擇的容器執行時環境。kubelet使用Unix socket之上的gRPC框架與容器執行時進行通訊,kubelet作為客戶端,而CRI shim作為伺服器。

protocol buffers API提供兩個gRPC服務,ImageService和RuntimeService。ImageService提供拉取、檢視、和移除映象的RPC。RuntimeSerivce則提供管理Pods和容器生命週期管理的RPC,以及與容器進行互動(exec/attach/port-forward)。容器執行時能夠同時管理映象和容器(例如:Docker和Rkt),並且可以通過同一個套接字提供這兩種服務。在Kubelet中,這個套接字通過–container-runtime-endpoint–image-service-endpoint欄位進行設定。Kubernetes CRI支援的容器執行時包括docker、rkt、cri-o、frankti、kata-containers和clear-containers等。

3.3 kube proxy

基於一種公共訪問策略(例如:負載均衡),服務提供了一種訪問一群pod的途徑。此方式通過建立一個虛擬的IP來實現,客戶端能夠訪問此IP,並能夠將服務透明的代理至Pod。每一個Node都會執行一個kube-proxy,kube proxy通過iptables規則引導訪問至服務IP,並將重定向至正確的後端應用,通過這種方式kube-proxy提供了一個高可用的負載均衡解決方案。服務發現主要通過DNS實現。

在Kubernetes中,kube proxy負責為Pod建立代理服務;引到訪問至服務;並實現服務到Pod的路由和轉發,以及通過應用的負載均衡。

3、kubectl

kubectl是Kubernetes叢集的命令列介面。執行kubectl命令的語法如下所示:

$ kubectl [command] [TYPE] [NAME] [flags]

這裡的command,TYPE、NAME和flags為:

  • comand:指定要對資源執行的操作,例如create、get、describe和delete
  • TYPE:指定資源型別,資源型別是大小學敏感的,開發者能夠以單數、複數和縮略的形式。例如:
$ kubectl get pod pod1 
$ kubectl get pods pod1 
$ kubectl get po pod1
  • NAME:指定資源的名稱,名稱也大小寫敏感的。如果省略名稱,則會顯示所有的資源,例如:
 $kubectl get pods
  • flags:指定可選的引數。例如,可以使用-s或者–server引數指定Kubernetes API server的地址和埠。

另外,可以通過執行kubectl help命令獲取更多的資訊。

4 附加項和其他依賴

在Kunbernetes中可以以附加項的方式擴充套件Kubernetes的功能,目前主要有網路、服務發現和視覺化這三大類的附加項,下面是可用的一些附加項:

4.4.1 網路和網路策略

  • ACI 通過與Cisco ACI整合的容器網路和網路安全。
  • Calico 是一個安全的3層網路和網路策略提供者。
  • Canal 聯合Fannel和Calico,通過網路和網路側。
  • Cilium 是一個3層網路和網路側外掛,它能夠透明的加強HTTP/API/L7 策略。其即支援路由,也支援overlay/encapsultion模式。
  • Flannel 是一個overlay的網路提供者。

4.4.2 服務發現

  • CoreDNS 是一個靈活的,可擴充套件的DNS伺服器,它能夠作為Pod叢集內的DNS進行安裝。
  • Ingress 提供基於Http協議的路由轉發機制。

4.4.3 視覺化&控制

  • Dashboard 是Kubernetes的web使用者介面。

參考資料

  1. 《Introducing Container Runtime Interface (CRI) in Kubernetes》地址:https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/
  2. 《Alternative Container Runtimes in Kubernetes》地址:https://www.infoq.com/news/2017/04/alternative-kubernetes-runtimes
  3. 《Kubernetes CRI and Minikube》地址:https://sreeninet.wordpress.com/2017/02/11/kubernetes-cri-and-minikube/
  4. 《CRI: the Container Runtime Interface》地址:https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md
  5. 《Frakti》地址:https://github.com/kubernetes/frakti
  6. 《docker、oci、runc以及kubernetes梳理》地址:https://www.cnblogs.com/xuxinkun/p/8036832.html
  7. 《Kubernetes Containerd整合進入GA階段》地址:https://www.sohu.com/a/233247128_198222

作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。

相關推薦

kubernetes-整體概述架構

1、Kubernetes是什麼 Kubernetes是一個輕便的和可擴充套件的開源平臺,用於管理容器化應用和服務。通過Kubernetes能夠進行應用的自動化部署和擴縮容。在Kubernetes中,會將組成應用的容器組合成一個邏輯單元以更易管理和發現。Kubernetes積累了作為Google生產環境執行工作

整體概述架構_Kubernetes中文社群

1、Kubernetes是什麼 Kubernetes是一個輕便的和可擴充套件的開源平臺,用於管理容器化應用和服務。通過Kubernetes能夠進行應用的自動化部署和擴縮容。在Kubernetes中,會將組成應用的容器組合成一個邏輯單元以更易管理和發現。Kubernetes積累了作為Google

Kubernetes基礎介紹架構概述

Table of Contents 1 容器編排工具概述 2 k8s整體概述 3  master主機 4  node主機 5  邏輯元件介紹 6  k8s通訊 7.我的Kubernetes學習資源 1 容器編排工具概述

Kubernetes --- 詳細介紹架構詳解

Kubernetes是一個跨主機叢集的開源的容器排程平臺,它可以自動化應用容器的部署,擴充套件和操作,提供以容器為中心的基礎架構 目錄 一. Kubernetes用途 二. Kubernetes特點 三. 介紹容器技術 四. Kubernetes能做什麼? 五. 使用Kubernetes的好處 六. 瞭解架

Rainbond 5.1.4釋出,複雜微服務架構整體升級回滾

Rainbond 5.1.4釋出, 複雜微服務架構整體升級和回滾 今天為大家帶來Rainbond 5.1系列第四個更新版本,本次版

WebService概述CXF入門小程序

定義 clas zhang 目的 配置 service組件 ott code 方式 一. 什麽是WedService? WebService不是框架, 甚至不是一種技術, 而是一種跨平臺,跨語言的規範, WebService的出現是為了解決這種需求場景: 不同平臺,

02.18_Java語言基礎(數據類型的概述分類).avi

技術分享 png src 分類 com 語言 logs 技術 blog 02.18_Java語言基礎(數據類型的概述和分類).avi

SSH框架整體理解總結

程序員 mapper 集成 開發效率 beans 緩沖 -h 服務器端 邏輯 首先,SSH不是一個框架,而是多個框架(struts+spring+hibernate)的集成,是目前較流行的一種Web應用程序開源集成框架,用於構建靈活、易於擴展的多層Web應用程序。 集成

Scanner的概述方法介紹

數據 tint sys 標記 strong new can 取字符 col Scanner的概述和方法介紹 一:Scanner的構造方法原理    1.Scanner(InputStream source)         構造一個新的 Scanner,它

volley2--volley的使用架構

為什麽 網絡 vol 線程 大於 例如 直接 一個 所有 圖片: 1.其實RequestQueue裏面有兩個隊列,一個我稱為緩存隊列mCacheQueue,一個稱為網絡隊列mNetworkQueue 如果請求要求加入緩存隊列(例如我們給request設置一個屬性Shoul

Flume概述簡單實例

可用 日誌采集 解壓 mar vid except null lose provider Flume概述 Flume是一個分布式、可靠、和高可用的海量日誌采集、聚合和傳輸的系統。支持在日誌系統中定制各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到

007-sql整體概述

left 建表 高級 das from 插入數據 類型 ceil 重新 一、概述 sql基礎 數據庫、數據表、行、列、關系 查詢 Select 字段1,字段2,* from 表 where 條件 去除重復 Distinct 必須放在所

學習 Kubernetes 的 Why How - 每天5分鐘玩轉 Docker 容器技術(11

kubernetes docker 容器 教程 這是一個系統學習 Kubernetes 的教程,有下面兩個特點:系統講解當前最流行的容器編排引擎 Kubernetes包括了安裝部署、應用管理、網絡、存儲、監控、日誌管理等多各個方面。重實踐並兼顧理論通過大量實驗和操作帶領大家學習 Kuberne

Java中,內部類的概述內部類的訪問特點內部類的分類(內部類的位置)

back 外部 mage 對象 post info bsp 一個 strong 內部類的概述:   把類定義在另一個類的內部,該類就被稱為內部類。   舉例:把類B定義在類A中,類B就被稱為內部類。 內部類的訪問特點:   A:內部類可以直接訪問外部類的成員,包括

Java面向對象概述三大特性

obi bcf 類對象 編譯 開發者 set 包含 parent 默認   Java 是面向對象的高級編程語言,類和對象是 Java 程序的構成核心。圍繞著 Java 類和 Java 對象,有三大基本特性:封裝是 Java 類的編寫規範、繼承是類與類之間聯系的一種形式、

【oracle11g】整體啟動關閉

lsnrctl1.關閉數據庫【默認orcl】 sqlplus /nolog conn sys/sys as sysdba; shutdown immediate; --關閉所有實例 lsnrctl stop2.單獨關閉的數據庫實例,目前啟動不了了【uu】 sqlplus /nolog conn sys/

spark概述安裝部署

初識 lock path memory 由於 flat 集群 worker opts 1、spark概述 1、什麽是spark 基於內存的計算引擎,它的計算速度非常快。但是spark僅僅只涉及到數據的計算,沒有涉及到數據的存儲。 2、為什麽學習spark

Ansible自動化運維的使用領域架構

Ansible自動化運維的使用領域和架構Ansible 一、自動化運維簡介: 自動化運維:將周期性、重復性、規律性的工作都交給工具去做,具體來說有應用系統維護自動化,巡檢自動化和故障處理自動化這三個方面;自動化運維依賴於具體的智能管理平臺,最終達到提升運維效率的目的。 二、自動化應用領域 配置管理 確保被管理

Docker簡介以及使用領域架構

Docker簡介以及使用領域和架構Docker 簡介 1、Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。 2、Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。 3、容器是

前端基礎-JavaScript的基本概述語法

tr1 理解 2.3 作用域 add 比較 mozilla OS eat 1、JavaScript概述 2、JavaScript引入方式 3、JavaScript語言規範 4、JavaScript語言基礎 5、JavaScri