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

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的那層脫掉,之後就剩下有效數據
在這裏插入圖片描述 所以真正的有效數據只有後面三層