K8S理論篇----K8S的概述

長大要當太空人發表於2020-09-30

Kubernetes的概述:

一.Kubernetes是什麼

●Kubernetes是Google在2014年開源的一個容器叢集管理系統,Kubernetes簡稱K8S

●K8S用於容器化應用程式的部署,擴充套件和管理

●K8S提供了容器編排,資源排程,彈性伸縮,部署管理,服務發現等一系類功能

●Kubernetes目標是讓部署容器化應用簡單高效

二.Kubernetes特性

●自我修復:

  • 在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期的副本數量;殺死健康檢查失敗容器,並且在未準備之前不會處理客戶端請求,確保上線服務不中斷,

●彈性伸縮:

  • 使用命令,UI或者基於CPU使用情況自動快速擴容和伸縮應用程式例項,保證應用業務高峰併發時的高可用性:業務低峰時回收資源,以最小成本執行服務

●自動部署和回滾:

  • K8S採用滾動更新策略更新應用,一次更新一個Pod,而不是同時刪除所有Pod,如果更新過程中出現問題,將回滾更改,確保升級不受影響業務

●服務發現和負載均衡:

  • K8S為多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),並且負載均衡關聯的所有容器,使得使用者無需考慮容器IP問題。

●機密和配置管理:

  • 管理機密資料和應用程式配置,而不需要把敏感資料暴露在映象裡,提高敏感資料安全性。並可以將一些常用的配置儲存在K8S中,方便應用程式使用

●儲存編排:

  • 掛載外部儲存系統,無論是來自本地儲存,公有云(如AWS),還是網路儲存(如NFS,GlusterFS,Ceph)都作為叢集資源的一部分使用,極大提高儲存使用靈活性

●批處理:

  • 提供一次性任務,定時任務,滿足批量資料處理和分析的場景

三.自動部署的方式

藍綠部署

●分為兩個可用區,當進行更新時,會先停止可用區A的容器並更新,不會停掉B區的功能,讓服務區B的容器去接待服務,當A區更新完畢測試能否通過負載均衡排程A區的主機,如果A區的主機能夠進行訪問,會將B區主機停止去更新,讓A區上線
在這裡插入圖片描述

灰度部署(俗稱金絲雀)

就是滾動式更新;適用於線上節點不能斷的,體量大的

  • 滾動更新的部署方式:先建立一個新容器,將第一個舊容器換下來,將新容器換上去,然後再去更新第二個容器,滾動更新會出現有人訪問的是舊網站,有人訪問的是新網站,這是很正常的現象,但時間不會很長,因為在更新
    在這裡插入圖片描述

四.Kubernetes叢集架構與元件

在這裡插入圖片描述
master端:
●Kubectl:管理人員操作的命令,提供服務的是node節點裡面跑的container容器

●客戶端訪問的入口:
在這裡插入圖片描述
●Auth:對管理員進行身份驗證(驗證是否具備管理許可權)

●API Server:核心;管理端的唯一訪問入口,所有的node節點安排都聽從API Server,它是一種node節點管理和任務分配機制;各元件協調者,以RESTful API提供介面服務,所有物件資源的增刪改查和監聽操作都交給APIServer處理後再提交給Etcd儲存;有一個點注意:當API Server宕掉後,只要後面node節點沒宕掉,客戶還是可以訪問的

●Etcd:分散式鍵值儲存系統。用於儲存叢集狀態資料,比如Pod Server等物件資訊
理解為記賬本(記錄叢集的所有資訊)具有自動發現的功能,當建立一個新的資源資訊,但是Etcd裡面沒有記錄了,那就是API出現了問題

●Controller-manager:控制資源的定義(無狀態還是有狀態),處理叢集中常規後臺任務,一個資源對應一個控制器,而ControllerManger就是負責管理這些控制檯的

●Scheduler:排程器(排程演算法):根據排程演算法為新建立的Pod選擇一個Node節點,可以任意部署,可以部署再同一個節點上,也可以部署在不同的節點上;理解為:資源建立好後,API交給它,讓他監測後面節點的狀況,對健康狀態進行統計,然後通過排程演算法決定分配任務給後面的某個節點,並且告訴API服務適合建立在哪個節點上,API會再次將資訊記錄在Etcd當中,注意:當人為指定了服務建立在哪個節點,就不需要scheduler去排程

node端:
●管理員訪問入口:
在這裡插入圖片描述
●Kubelet:master端的執行代理,是Master在Node節點上的Agent,管理本機執行容器的生命週期,比如建立容器,Pod掛載資料卷,下載secret,獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器

●Pod:基本管理單元可以理解為容器的集合;一個Pod可以跑多個容器,但是生產環境中一個POD只跑一個容器;管理docker容器的

●Kube-proxy:在Node節點上實現Pod網路代理,維護網路規劃和四層負載均衡工作

●Docker或rocket:容器引擎,執行容器
在這裡插入圖片描述

五.Kubernetes核心概念

在這裡插入圖片描述
●Pod:

  • 最小部署單元
  • 一個組容器的集合
  • 一個Pod中的容器共享網路名稱空間
  • Pod是短暫的,沒有重啟的說法

●Controllers:

  • ReplicaSet:確保預期的Pod副本數量
  • Deployment:無狀態應用部署
  • StatefulSet:有狀態應用部署
  • DaemonSet:確保所有Node執行同一個Pod
  • Job:一次性任務
  • Cronjob:定時任務
  • 更高階層次物件,部署和管理Pod

●Service:

  • 防止Pod失聯
  • 定義一組Pod的訪問策略

●Label:

  • 標籤,附加到某個資源上的,用於關聯物件,查詢和篩選

●Namespaces:

  • 名稱空間,將物件邏輯上隔離

●Annotations:

  • 註釋

六.官方提供的三種部署方式

●Minikube

  • Minikube是一個工具,可以在本地快速執行一個單點的kubernetes,僅用於嘗試kubernetes或日常開發的使用者使用

●Kubeadm

  • Kubeadm也是一個工具,提供kubeadm init和kubeadm join,用於快速部署kubernetes叢集

●二進位制包

  • 推薦,從官下載發行版的二進位制包,手動部署每個元件,組成kubernetes叢集
    在這裡插入圖片描述
    ●自籤SSL證書
    在這裡插入圖片描述
    ●Node安裝Docker
    在這裡插入圖片描述

七.Flannel容器叢集網路部署

●Overlay Network:覆蓋網路,在基礎網路上疊加的一種虛擬網路技術模式,該網路中的主機通過虛擬鏈路連線起來,真實的物理網路基礎上架出虛擬網路

●VXLAN:將源資料包裝封裝到UDP,並使用基礎網路的IP/MAC作為外層報文頭進行封裝,然後在乙太網上傳輸,到達目的地後由隧道端點解封裝並將資料傳送給目標地址

●Flannel:是Overlay網路的一種,也是將資料包封裝在另一個網路包裡面進行路由轉發和通訊,目前已經支援UDP,VXLAN,AWS VPC和GCE路由等資料轉發方式
在這裡插入圖片描述
●容器封裝過程:
1.現在有一個有效資料:“hellow world”;傳給對方節點的容器,必須先封裝IP包頭(屬於虛擬網路)flannel幫忙封裝的,前面會有虛擬IP對應的MAC地址封裝;(這種也是同一節點的兩個容器互通的過程)
在這裡插入圖片描述
2.和其他節點的容器通訊,就需要再封裝一層物理IP(ens33網路地址)+物理IP對應的MAC地址
在這裡插入圖片描述
3.到目標節點時,就會將物理層脫掉,留下flannel能識別的資訊
在這裡插入圖片描述
4.flannel元件會將虛擬IP的那層脫掉,之後就剩下有效資料
在這裡插入圖片描述
所以真正的有效資料只有後面三層

相關文章