Kubernetes 学习总结(34)—— 如何理解编排
一、通俗的理解編排
1. 編排是什么
編排這個詞,去搜 google 翻譯,推薦的是 Orchestration 這個單詞。但是你反過來搜 Orchestration 中文意思,它的翻譯是“管弦樂編曲”。在管弦樂曲里,要完成多種樂器之間的協(xié)調(diào)配合肯定需要一種方法,這種方法也叫編排。由此可感受到,有編排的場景存在多種組件事務(wù),而且這些組件事務(wù)具有一定的獨立性。個人理解,編排是按照某種機(jī)制讓各種組件自動化配合運作,然后得到你想要的結(jié)果。
2. 編排與自動化
初學(xué)者經(jīng)常會把自動化單純的理解為就是編排,其實這兩個概念是有區(qū)別的。編排更注重的是組建配合產(chǎn)生出良好的結(jié)果,而自動化更注重的是組件運行的方式和效率。但是在IT世界里,編排是離不開自動化的,沒有自動化的編排只是一種工作流,有了自動化的編排就能機(jī)動化的動起來。好比在生產(chǎn)車間里,每個環(huán)節(jié)如果都是靠人來運作,雖然每個工人一絲不茍很、按部就班,但是這僅僅也是體現(xiàn)個工作流的完美,沒有體現(xiàn)出高效,這樣的編排沒有靈魂。編排它會穿越你的整個 IT 環(huán)境。例如橫穿你的 web 服務(wù)器,數(shù)據(jù)庫,中間件,負(fù)載平衡器等。這里涉及到多個層次,不同的技術(shù)領(lǐng)域,IT管理者需要站在一個高緯度去認(rèn)識你的生產(chǎn)系統(tǒng),設(shè)計出一套復(fù)雜的編排機(jī)制。有些陳舊的系統(tǒng)和技術(shù)債,可能讓你寸步難行。
3. 編排意義
有些人或許會疑問,編排的意義在哪?它能帶來什么收益?通過上面兩點的講解,編排或許可以理解為一種IT工作流,它能把你負(fù)責(zé)的IT系統(tǒng)都串接起來,然后自動化運作。這很容易讓你想到如果真這么做到了,那不是一勞永逸?如果是輸入和輸出要求都不變的情況下或許真的能一勞永逸。但是現(xiàn)實的情況往往不是這樣。公司的業(yè)務(wù)更新迭代,IT支撐環(huán)境也是會不停的更新迭代,沒有一種IT環(huán)境能一直保持不變的支撐下去。但是,編排的思想?yún)s是貫徹著整個IT階段發(fā)展,每一個發(fā)展階段都有不一樣的編排思路。物理機(jī)時代,人們用人肉運維“編排”(搬、挪)物理機(jī);虛擬機(jī)時代,人們用腳本、CMDB、openstack heat 等“編排”虛擬機(jī);最新容器時代,人們用 K8S、微服務(wù)編排容器。套用網(wǎng)上一句話:編排旨在簡化并優(yōu)化重復(fù)性的頻發(fā)流程,以確保準(zhǔn)確、快速的軟件部署。因為企業(yè)知道產(chǎn)品上市速度越快、成功幾率越大。只要流程是重復(fù)性的,便可通過自動執(zhí)行相關(guān)任務(wù)來優(yōu)化該流程,以消除重復(fù)操作。
?二、K8S 與編排
1. 實現(xiàn)完美編排的先決條件
其實編排的對象越“原子”、越輕量那么對于編排的操作就更加的靈活。前面提到,業(yè)務(wù)會隨時改變,那么支撐的生產(chǎn)系統(tǒng)也需要隨之變化。如果編排的工作流程組件耦合度太高,那么變更就很困難。想想我們過去沒有虛擬化的時代,應(yīng)用直接跑在物理機(jī)里,那么應(yīng)用的安裝、遷移都會顯得費勁。到了虛擬機(jī)時代,會簡單很多,但是虛擬機(jī)本身還是顯得有些重,遷移也受底層硬件條件的影響。可幸的是,容器時代這些問題得到了很好的解決,我們直接能操作“進(jìn)程”了,通過容器我們能輕松部署、遷移、交付... 容器真是為良好的編排打好了基礎(chǔ)。
在當(dāng)前云原生時代,應(yīng)用一般由單獨容器化的組件(通常稱為微服務(wù))組成,且必須按順序在網(wǎng)絡(luò)級別進(jìn)行組織,以使其能夠按照計劃運行。以這種方法對多個容器進(jìn)行組織的流程即稱為容器編排。在現(xiàn)代開發(fā)當(dāng)中,整體式的應(yīng)用早已成為過去時,如今的應(yīng)用由數(shù)十乃至數(shù)百個松散結(jié)合的容器式組件構(gòu)成,而這些組件需要通過相互間的協(xié)同合作,才能使既定的應(yīng)用按照設(shè)計運作。容器編排是指對單獨組件和應(yīng)用層的工作進(jìn)行組織的流程。雖然諸如 Apache Mesos、Google Kubernetes 以及 Docker Swarm 等平臺均有其特定的容器管理方法,但所有的容器編排引擎均可讓用戶控制容器啟動和停止的時間、將其分組合到群集中,以及協(xié)調(diào)應(yīng)用組合的流程。容器編排工具允許用戶指導(dǎo)容器部署與自動更新、運行狀況監(jiān)控以及故障轉(zhuǎn)移等步驟。
2. K8S 如何實現(xiàn)編排
K8S 是容器資源管理、調(diào)度平臺,換句話說它就是容器資源的編排系統(tǒng)。那么容器編排都有哪些動作和流程呢?總體來講有六大部分:
- 資源調(diào)度
- 資源管理
- 服務(wù)發(fā)現(xiàn)
- 健康檢查
- 自動伸縮
- 更新升級
資源調(diào)度
在分布式系統(tǒng)里,資源的調(diào)度是非常重要的,K8S 是通過 scheduler 組件來對 Pod 進(jìn)行調(diào)度的。Scheduler 調(diào)度器做為 K8S 的三大核心組件之一, 承載著整個集群資源的調(diào)度功能,其根據(jù)特定調(diào)度算法和策略,將 Pod 調(diào)度到最優(yōu)工作節(jié)點上,從而更合理與充分的利用集群計算資源,使資源更好的服務(wù)于業(yè)務(wù)服務(wù)的需求。資源的調(diào)度是一套分布式系統(tǒng)最基本的核心指標(biāo)。設(shè)想,如果連資源都無法調(diào)度好,那么上層的服務(wù)將沒法玩。
資源管理
資源,一般分為計算資源、網(wǎng)絡(luò)資源、存儲資源。計算資源通常是 CPU、MEM(當(dāng)然現(xiàn)在還有 GPU 資源),對于這塊 K8S 通過可壓縮和不可壓縮的機(jī)制來做區(qū)分,這里 CPU 資源是可壓縮的,內(nèi)存是不可壓縮的。這里 K8S 主要是通過 Requests 和 Limits 參數(shù)來靈活控制 Pod 對資源的使用。
服務(wù)發(fā)現(xiàn)
所有資源的分配、支撐都是為了跑服務(wù)。由于 Pod 的 IP 不是固定的,所以外在的程序或者內(nèi)部的程序如何訪問 K8S 里面的某個 Pod,肯定需要一種固定的訪問方式,那么這種方式叫做 service。所有創(chuàng)建的服務(wù)只有輕松簡單地被發(fā)現(xiàn)、被訪問,這樣才能更加的高效。
健康檢查
計算機(jī)世界里沒有任何一種服務(wù)能一直保持正常運行(如果有,那真是太牛了!)。所以,總有各種內(nèi)在、外在因素影響著服務(wù)的穩(wěn)定運行。那么監(jiān)控檢測服務(wù)是否正常運行非常重要,在 K8S 里一般用 liveness 和 readiness 探針機(jī)制來做健康檢查(前面文章也有提到過探針的用法)。
自動伸縮
在運維環(huán)境里,資源的擴(kuò)容和管理是比較頭疼的一件事。工程師一般會比較難的精確把握業(yè)務(wù)需要多少資源,多了少了都會一定的影響成本和平臺的穩(wěn)定性。所以,假如有套機(jī)制能根據(jù)當(dāng)前的負(fù)載高低,動態(tài)的、精準(zhǔn)的擴(kuò)容資源那么對工程師來說是一個很大的福音。虛擬機(jī)時代之前,這個都非常難實現(xiàn),因為涉及到環(huán)境的快速遷移和復(fù)制。容器化時代很自然的解決了這個問題,K8S 里使用 Horizontal Pod Autoscaling(Pod 橫向擴(kuò)容機(jī)制)來保證資源的按需擴(kuò)容。
更新升級
程序會隨著業(yè)務(wù)的發(fā)展而不斷的迭代,所以我們都會架設(shè)一套完整的 CICD 來完善程序的發(fā)布、更新機(jī)制。K8S 目前在 CICD 里占了很重要的角色(如圖)。另外,K8S 的內(nèi)部控制器 ReplicationController 與 Deployment 也為服務(wù)的滾動和平滑升級提供了很好的機(jī)制。這樣實現(xiàn)什么藍(lán)綠發(fā)布,K8S 可以協(xié)助輕松做到。
?
總結(jié)
以上是生活随笔為你收集整理的Kubernetes 学习总结(34)—— 如何理解编排的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文阅读:PMF基于视觉感知的多传感器融
- 下一篇: WIN10 3个手指拖动_老树谷歌地图数