(2)Kubernetes基本概念和術語

  k8s中大部分概念如Node、Pod、Replication Controller、Service等均可以看做是一種 資源對象,幾乎全部的資源對象均可以經過Kubernetes提供的kubectl工具執行增刪改查並將其保存在etcd中持久化存儲。 從這個角度看,k8s是一個高度自動化的資源監控系統,經過跟蹤對比etcd庫裏保存的資源指望狀態與當前環境中的實際資源狀態的差別來實現自動控制與自動糾錯的高級功能。node

 

如下來解釋一些常見術語linux

一、Masterdocker

  集羣控制節點  全部的控制命令都是發給這個節點,而後他來負責具體的執行過程,若是他宕機,則左右控制命令都會失敗。編程

  主要進程以下:後端

    Kubernetes API Server(kube-apiserver)提供了標準的 Rest 接口,是k8s資源增刪改查的惟一入口。api

    Kubernetes Controller Manager (kube-controller-manager) 全部資源的自動化控制中心。bash

    Kubernetes Scheduler(kube-scheduler) 負責資源調度的進程。網絡

    etcd  資源對象的數據保存架構

二、Node負載均衡

  工做負載節點,每一個Node都會被Master分配一些工做負載(Docker)容器,當某個Node宕機,其上的工做負載會被Master轉到其它節點

  主要進程入下:

    kubelet 負責Pod對應容器的建立、啓停等任務,同時與Master節點密切協做,實現集羣管理的基本功能。

    kube-proxy 實現k8s的通訊與負載均衡的主要組件

    Docker Engine (docker) Docker引擎,負責容器建立以及管理工做

  在Master獲取Node信息命令以下:

#查看集羣中有多少個node
[root@node1 ~]# kubectl get nodes NAME STATUS AGE node2 Ready 24d node3 Ready 24d
#查看node2的詳細信息 [root@node1 ~]# kubectl describe node node2 #名稱、標籤、建立時間
Name: node2 Role: Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/hostname=node2 Taints: <none> CreationTimestamp: Tue, 23 May 2017 09:04:05 +0800 Phase: #node當前的運行狀態 好比:磁盤滿了就會OutOfDisk就會標註True
Conditions:
  Type			Status	LastHeartbeatTime			LastTransitionTime			Reason				Message
  ----			------	-----------------			------------------			------				-------
  OutOfDisk 		False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:36:59 +0800 	KubeletHasSufficientDisk 	kubelet has sufficient disk space available
  MemoryPressure 	False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:04:05 +0800 	KubeletHasSufficientMemory 	kubelet has sufficient memory available
  DiskPressure 		False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:04:05 +0800 	KubeletHasNoDiskPressure 	kubelet has no disk pressure
  Ready 		True 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:36:59 +0800 	KubeletReady 			kubelet is posting ready status
#node的IP地址和主機名
Addresses: 192.168.59.12,192.168.59.12,node2 #資源總量
Capacity: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 8 memory: 3882344Ki pods: 110 #可分配的資源
Allocatable: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 8 memory: 3882344Ki pods: 110 #主機系統信息
System Info: Machine ID: 241163503ce842c489360d0a48a606fc System UUID: D55867F7-F78F-4C50-A691-414BBCAE6141 Boot ID: a6f0316a-d7ff-415a-9fb3-4c82c8b5c2cd Kernel Version: 3.10.0-229.el7.x86_64 OS Image: CentOS Linux 7 (Core) Operating System: linux Architecture: amd64 Container Runtime Version: docker://1.12.6 Kubelet Version: v1.5.2 Kube-Proxy Version: v1.5.2 ExternalID: node2 #正在運行的Pod
Non-terminated Pods: (0 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits --------- ---- ------------ ---------- --------------- ------------- #Requests表示該資源的最小申請量 limit爲最大使用量
Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted. CPU Requests CPU Limits Memory Requests Memory Limits ------------ ---------- --------------- ------------- 0 (0%) 0 (0%) 0 (0%) 0 (0%) #event記錄了資源的一些事件信息,對排錯有很大的用
No events

三、Pod

  Pod是k8s最重要也是最基本的概念

    每一個Pod都有一個特殊的被稱爲跟容器的Pause容器 ,Pause容器屬於k8s平臺一部分,初此以外,每一個Pod還包含一個或多個緊密相關的用戶業務容器。

    爲何設計一個全新的Pod概念:

      1.在一組容器爲一個單元的狀況下,難以對總體簡單進行判斷,引入業務無關切不容易死亡的Pause容器做爲Pod根容器,以它狀態來表明容器組的狀態。

      2.Pod裏多個業務容器共享Pause容器的IP、掛接的Volume、簡化了密切關聯容器通訊和文件共享問題。

         注:k8s要求底層網絡支持集羣內任意兩個Pod之間的TCP/IP直接通訊,一般採用虛擬二層網絡技術實現,如Flannel、Openvswitch等 使一個Pod裏的容器於其它主機Pod容器可以直接通訊

      3.Pod 資源限額  以千分之一個cpu來劃分   100~300m  指0.1到0.3個CPU    內存 64Mi   分配64M  

四、Label

  標籤 一個Label是一個key=value的鍵值對,可附加到各個資源對象上,之後能夠經過Label Selector(標籤選擇器) 來查詢和篩選用有某些標籤的資源對象

  使用Label能夠對對象建立多組標籤,Label和Label Selector共同構成了Kubernetes系統中最核心的應用模塊,使得被管理對象可以精細的分組管理,同時實現了整個集羣的高可用性。

五、Replication Controller (RC)

  RC 簡單來講定義了一個指望的場景,即聲明某種Pod的副本數量在任意時刻都符合某個預期值。

    RC包括如下幾個部分:

      1. replicas  Pod期待的副本數             注:若是爲了刪除全部的Pod,能夠將replicas設置爲0,而後更新該RC

      2.selector  用於篩選目標Pod的Label Selector

      3.template  當Pod的副本數小於預期數量的時候,用於建立新Pod的Pod模板。

  因爲Replication Controller與kubernetes中的模塊Replication Controller同名,因此在kubernetes 1.2 ,它升級爲Replica Set ,與以前的RC的惟一區別是支持基於集合的Label selector ,而RC只支持基於等式的Label Selector 這使得Replica Set的功能更強。

  總結RC(Replica Set)的一些特性及做用:

    在大多數狀況下,咱們經過定義一個RC實現Pod的建立過程以及副本數量的自動控制。

    RC裏包括完整的Pod定義模板

    RC經過Label Selector 機制實現對Pod副本的自動控制

    經過改變RC的Pod副本數量,能夠實現Pod的擴容和縮容功能

    經過改變RC裏Pod模板中的鏡像版本,能夠實現Pod的滾動升級功能

六、Deployment

  Deployment是kubernetes1.2引入的概念,爲了更好的解決Pod編排問題。相比於RC是咱們能夠隨時知道當前Pod部署的進度

  典型適用場景:

    建立一個Deployment對象來生成對應的Replica Set並完成Pod副本的建立過程

    檢查Deployment的狀態來看部署動做是否完成(Pod副本的數量是否達到預期的值)

    更新Deployment以建立新的Pod(好比鏡像升級)

    若是當前的Depoyment不穩定,則回滾到一個早先的Deployment版本

    掛起或者回復一個Deployment

七、Horizontal Pod Autoscaler (HPA)

  簡稱HPA,意思是Pod橫向自動擴容,也屬於k8s的一種資源對象

  實現原理: 經過追蹤分析RC控制的全部目標Pod的負載變化狀況,來肯定是否須要針對性的調整目標Pod的副本數

  HPA有如下兩種方式來做爲HPA的負載指標

    1.CPUUtilizationPercentage  是指Cpu利用率的平均值(一般是1分鐘,目前是經過Heapster擴張組件來獲得這個值),用當前CPU的使用量除以它的Pod Request值 ,高於指定值(targetCPUUtilizationPercentage)就會建立新的Pod副本數(最大不超過設置的maxReplication)

    2.應用程序自定義的度量標準,好比服務在每秒內的響應的請求數(TPS或QPS)

八、Service

  服務,k8s的每一個Service就是咱們常常提起的微服務架構中的一個微服務

  1.Service與其後端Pod副本集羣之間經過label Selector 來實現無縫對接的,k8s經過在每一個node節點的kube-proxy實現智能負載均衡,Service不是共用一個負載均衡器的ip,而是每一個Service分配了一個全局的惟一的虛擬IP(Cluster IP)

  Cluster IP:

    1.Cluster IP僅僅做用於Kubernetes Service這個對象,並由kubernetes管理和分配IP池

    2.Cluster IP沒法被ping,由於沒有一個實體網絡對象來相應

    3.Cluster IP只能結合Service Port組成一個具體的通訊端口,單獨的Cluster IP 不具有TCP/IP通訊的基礎,而且它們只屬於Kubernetes集羣這樣一個封閉的空間,集羣以外的節點要訪問這個通訊端口,則要作一些額外的工做

    4.在Kubernetes集羣以內,Node IP網、Pod IP網與Cluster IP網之間的通訊,採用的是Kubernetes本身設計的一種編程方式的特殊的路由規則,與咱們熟知的IP路由有很大的不一樣。

  外部網絡訪問service是經過Nodeport來訪問的。

九、Volume

  存儲卷(Volume)是Pod中可以被多個容器訪問的共享目錄。與Pod的生命週期相同,支持多種類型的volume,例如GlusterFS,Ceph等。

  Volume類型:

    1.emptyDir pod分配到Node時建立的。 用途:臨時空間、長時間任務的中斷過程CheckPoint的臨時保存目錄、多容器共享目錄

    2.hostPath pod掛在宿主機上的文件和目錄

    3.gcePersistentDisk 

    4.NFS

十、Persisten Volume 

  kubernetes集羣中某個網絡存儲中對應的一塊存儲,它與Volume很相似,區別以下:

    PV只能是網絡存儲,不屬於任何node,但能夠在每一個node上訪問

    不是定義在Pod上的

    目前只有幾種類型 GCE Persistent Disks 、NFS、RBD、iSCSCI、GlusterFS等。

十一、Namespace 

  用於實現多租戶的資源隔離,Namespace經過將集羣內部的資源對象分配到不一樣的namespace中,造成邏輯上分組的不一樣項目、小組和用戶組

  默認分配到名爲default的NameSpace中,一旦建立了namespace就能夠指定哪些資源屬於哪一個namespace

  還能夠結合k8s的資源配額管理,限定不一樣租戶能佔用的資源。

 

以上即爲k8s的核心組件,他們共同組成了k8s的系統的框架和計算模型,經過對他們進行靈活組合,用戶可快速方便的對容器集羣進行配置、建立、和管理。

相關文章
相關標籤/搜索