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的那層脫掉,之後就剩下有效資料
所以真正的有效資料只有後面三層
相關文章
- k8s——核心概念篇K8S
- RocketMQ - 理論篇MQ
- k8s動態儲存篇--NFSK8SNFS
- K8S系列第四篇(Dockerfile)K8SDocker
- K8S環境的Jenkin效能問題處理續篇(任務Pod設定)K8S
- K8S環境的Jenkin效能問題處理K8S
- 跨域-理論篇跨域
- EdgeX Foundry理論篇
- GraphQL分享理論篇
- 【雲原生|K8s系列第1篇】:K8s的基礎概念、元件架構及實戰安裝K8S元件架構
- K8S系列第三篇(Docker網路)K8SDocker
- Spring01:概述及IOC理論推導Spring
- 01 決策樹 - 數學理論概述 - 熵熵
- JAVA_RMI(理論篇)Java
- UCloud 葉理燈談:Docker、K8S 和 ServerlessCloudDockerK8SServer
- k8sK8S
- 來了,k8s!-----------------k8s叢集部署K8S
- K8S 部署 SpringBoot 專案(一篇夠用)K8SSpring Boot
- k8s系列文章第五篇(docker-compose)K8SDocker
- K8s - Helm的使用K8S
- k8s resource的管理K8S
- PHP效能優化 -理論篇PHP優化
- Mac + Docker + K8S 本地搭建K8S叢集MacDockerK8S
- 【k8s】使用k8s部署一個簡單的nginx服務K8SNginx
- kubernetes(k8s)K8S
- k8s——apiK8SAPI
- k8s deploymentK8S
- k8s——deploymentK8S
- linux k8sLinuxK8S
- k8s ServiceK8S
- k8s podK8S
- k8s容器互聯-flannel host-gw原理篇K8S
- k8s TLS bootstrap解析-k8s TLS bootstrap流程分析K8STLSboot
- 學K8S需要掌握哪些技能?K8S學習K8S
- [k8s] k8s基於csi使用rbd儲存K8S
- k8s與監控--k8s部署grafana6.0K8SGrafana
- java 呼叫 k8s 的 apiserverJavaK8SAPIServer
- k8s的監控+HPAK8S