K8s核心概念及名詞

參考文檔 鏈接:https://pan.baidu.com/s/1wcziTCBTuK1VtaljfcIiEQ 提取碼:skax

Docker 本身非常適合管理單個容器。但隨着您開始使用越來越多的容器和容器化應用程序,並把它們劃分成數百個部分,很可能會導致管理和編排變得非常困難。最終,您需要後退一步,對容器實施分組,以便跨所有容器提供網絡、安全、遙測等服務。於是,Kubernetes 應運而生。

將運行 Linux 容器的多組主機聚集在一起,由 Kubernetes 幫助您輕鬆高效地管理這些集羣。

K8s用途

在您生產環境中使用 Kubernetes 的主要優勢在於,它提供了一個便捷有效的平臺,讓您可以在物理機和虛擬機集羣上調度和運行容器。更廣泛一點說,它可以幫助您在生產環境中,完全實施並依託基於容器的基礎架構運營。由於 Kubernetes 的實質在於實現操作任務自動化,所以您可以將其它應用平臺或管理系統分配給您的許多相同任務交給容器來執行。

核心概念

Kubernetes 有各類資源對象來描述整個集羣的運行狀態(Node、Pod、Replication Controller、Service等都可以看作一種“資源對象”)。這些對象都需要通過調用 kubernetes api 來進行創建、修改、刪除並將其保存在etcd中持久化存儲,可以通過 kubectl 命令工具,也可以直接調用 k8s api

在介紹資源對象之前,我們先了解一下Kubernetes集羣的兩種管理角色:Master和Node。

Master

Kubernetes裏的Master指的是集羣控制節點,每個Kubernetes集羣裏需要有一個Master節點來負責整個集羣的管理和控制,是整個集羣的“首腦”,如果宕機或者不可用,那麼對集羣內容器應用的管理都將失效。

Master節點上運行着以下一組關鍵進程:

  1. Kubernetes API Server (kube-apiserver):提供了HTTP Rest接口的關鍵服務進程,是Kubernetes裏所有資源的增、刪、改、查等操作的唯一入口,也是集羣控制的入口進程。
  2. Kubernetes Controller Manager (kube-controller-manager):Kubernetes裏所有資源對象的自動化控制中心,可以理解爲資源對象的“大總管”。
  3. Kubernetes Scheduler (kube-scheduler):負責資源調度(Pod調度)的進程,相當於公交公司的“調度室”。

 另外,在Master節點上還需要啓動一個etcd服務,因爲Kubernetes裏的所有資源對象的數據全部是保存在etcd中的。

Node

除了Master,Kubernetes集羣中的其他機器被稱爲Node節點。與Master一樣,Node節點可以是一臺物理主機,也可以是一臺虛擬機。Node節點纔是Kubernetes集羣中的工作負載節點,每個Node都會被Master分配一些工作負載(Docker容器),當某個Node宕機時,其上的工作負載會被Master自動轉移到其他節點上去。

每個Node節點上都運行着以下一組關鍵進程:

  1. kubelet:負責Pod對應的容器的創建、啓停等任務,同時與Master節點密切協作,實現集羣管理的基本功能。
  2. kube-proxy:實現Kubernetes Service的通信與負載均衡機制的重要組件。
  3. Docker Engine (docker):Docker引擎,負責本機的容器創建和管理工作。

Node節點可以在運行期間動態增加到Kubernetes集羣中,在默認情況下kubelet會向Master註冊自己,這也是Kubernetes推薦的Node管理方式。一旦Node被納入集羣管理範圍,kubelet進程就會定時向Master節點彙報自身的情報,例如操作系統、Docker版本、機器的CPU和內存情況,以及當前有哪些Pod在運行等,這樣Master可以獲知每個Node的資源使用情況,並實現高效均衡等資源調度策略。而某個Node超過指定時間不上報信息時,會被Master判斷爲“失聯”,Node的狀態被標記爲不可用(Not Ready),隨後Master會觸發“工作負載大轉移”的自動流程。

Pod

Pod是Kubernetes的最重要也最基本的概念,如下圖所示是Pod的組成示意圖,我們看到每個Pod都有一個特殊的被成爲“根容器”的Pause容器。Pause容器對應的鏡像屬於Kubernetes平臺的一部分,除了Pause容器,每個Pod還包含一個或多個緊密相關的用戶業務容器。

 

 

爲什麼Kubernetes會設計出一個全新的Pod概念並且Pod有這樣特殊的組成結構?

 原因之一:在一組容器作爲一個單元的情況下,我們難以對“整體”簡單地進行判斷及有效地進行行動。比如,一個容器死亡了,此時算是整體死亡麼?引入業務無關並且不易死亡的Pause容器作爲Pod的根容器,以它的狀態代表整體容器組的狀態,就簡單、巧妙地解決了這個難題。

原因之二:Pod裏的多個業務容器共享Pause容器的IP,共享Pause容器掛接的Volume,這樣既簡化了密切關聯的業務容器之間的通信問題,也很好地解決了它們之間的文件共享問題。

Label

Label是Kubernetes系統中另外一個核心概念。一個Label是一個key=value的鍵值對,其中key與vaue由用戶自己指定。Label可以附加到各種資源對象上,例如Node、Pod、Service、RC等,一個資源對象可以定義任意數量的Label,同一個Label也可以被添加到任意數量的資源對象上去,Label通常在資源對象定義時確定,也可以在對象創建後動態添加或者刪除。

 我們可以通過指定的資源對象捆綁一個或多個不同的Label來實現多維度的資源分組管理功能,以便於靈活、方便地進行資源分配、調度、配置、部署等管理工作。例如:部署不同版本的應用到不同的環境中;或者監控和分析應用(日誌記錄、監控、告警)等。一些常用等label示例如下。

版本標籤:"release" : "stable" , "release" : "canary"...

環境標籤:"environment" : "dev" , "environment" : "production"

架構標籤:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware"

分區標籤:"partition" : "customerA" , "partition" : "customerB"...

質量管控標籤:"track" : "daily" , "track" : "weekly"

 Label相當於我們熟悉的“標籤”,給某個資源對象定義一個Label,就相當於給它打了一個標籤,隨後可以通過Label Selector(標籤選擇器)查詢和篩選擁有某些Label的資源對象,Kubernetes通過這種方式實現了類似SQL的簡單又通用的對象查詢機制。

Replication Controller

RC是Kubernetes系統中的核心概念之一,簡單來說,它其實是定義了一個期望的場景,即聲明某種Pod的副本數量在任意時刻都符合某個預期值,所以RC的定義包括如下幾個部分。

  1. Pod期待的副本數(replicas)。
  2. 用於篩選目標Pod的Label Selector。
  3. 當Pod的副本數量小於預期數量時,用於創建新Pod的Pod模版(template)。

Deployment

爲了更好地解決Pod的編排問題。可以把它看作RC的一次升級

Deployment相對於RC的一個最大升級是我們隨時知道當前Pod“部署”的進度

StatefulSet

Kubernetes系統中,Pod的管理對象RC、Deployment、DaemonSet和Job都是面向無狀態的服務。但現實中有很多服務是有狀態的。如果用RC/Deployment控制Pod副本數的方式來實現上述有狀態的集羣,則我們會發現第一點是無法滿足的,因爲Pod的名字是隨機產生的,Pod的IP地址也是在運行期才確定且可能有變動的,我們事先無法爲每個Pod確定唯一不變的ID,爲了能夠在其他節點上恢復某個失敗的節點,這種集羣中的Pod需要掛接某種共享存儲

StatefulSet裏的每個Pod都有穩定、唯一的網絡標識,可以用來發現集羣內的其他成員。假設StatefulSet的名字叫kafka,那麼第一個Pod叫kafak-0,第二個Pod叫kafak-1,以此類推。

StatefulSet控制的Pod副本的啓停順序是受控的,操作第n個Pod時,前n-1個Pod已經時運行且準備好的狀態。

StatefulSet裏的Pod採用穩定的持久化存儲卷,通過PV/PVC來實現,刪除Pod時默認不會刪除與StatefulSet相關的存儲卷(爲了保證數據的安全)。

Service

Service也是Kubernetes裏的最核心的資源對象之一,Kubernetes裏的每個Service其實就是我們經常提起的微服務架構中的一個“微服務”,之前我們所說的Pod、RC等資源對象其實都是爲這節所說的“服務”------Kubernetes Service作“嫁衣”的,下圖顯示了Pod、RC與Service的邏輯關係。

Volume(存儲卷)

Volume是Pod中能夠被多個容器訪問的共享目錄。Kubernetes的Volume概念、用途和目的與Docker的Volume比較類似,但兩者不能等價。首先,Kubernetes中的Volume定義在Pod上,然後被一個Pod裏的多個容器掛載到具體的文件目錄下;其次,Kubernetes中的Volume中的數據也不會丟失。最後,Kubernetes支持多種類型的Volume,例如Gluster、Ceph等先進的分佈式文件系統。

Namespace

Namespace(命名空間)是Kubernetes系統中的另一個非常重要的概念,Namespace在很多情況下用於實現多租戶的資源隔離。Nameaspace通過將集羣內部的資源對象“分配”到不同的Namespce中,形成邏輯上分組的不同項目、小組或用戶組,便於不同的分組在共享使用整個集羣的資源的同時還能被分別管理。

Annotation(註解)

Annotation與Label類似,也使用key/value鍵值對的形式進行定義。不同的是Label具有嚴格的命名規則,它定義的是Kubernetes對象的元數據(Metadata),並且用於Label Selector。而Annotation則是用戶任意定義的“附加”信息,以便於外部工具進行查找,很多時候,Kubernetes的模塊自身會通過Annotation的方式標記資源對象的特殊信息。

 通常來說,用Annotation來記錄的信息如下。

  1. build信息、release信息、Docker鏡像信息等,例如時間戳、release id號、PR號、鏡像hash值、docker registry地址等。
  2. 日誌庫、監控庫、分析庫等資源庫的地址信息。
  3. 程序調試工具信息,例如工具、版本號等。
  4. 團隊等聯繫信息,例如電話號碼、負責人名稱、網址等。

 

Kubelet

運行在節點上的服務,可讀取容器清單(container manifest),確保指定的容器啓動並運行。

kubectl

Kubernetes 的命令行配置工具。

 

 

官方把 kubernetes 術語分爲 12 個分類:

系統結構、社區、核心對象、擴展、基礎、網絡、操作、安全、存儲、工具、用戶類型、工作負載

 

由於 k8s 的術語實在太多了,想要全部記住作爲新學者還是有點壓力,所以我們課程中只講解一些常用的術語。想要了解更多 kubernetes 術語,請參照官方術語表。

地址:https://kubernetes.io/docs/reference/glossary/?fundamental=true

 

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