【k8s學(xué)習(xí)】Kubernetes Operator簡(jiǎn)單介紹

【參考】

【本文試圖解決以下問題】

  • 什么是Kubernetes Operator?
  • 為什么要使用Kubernetes Operator?
  • 什么時(shí)候需要使用Kubernetes Operator?

1. 無狀態(tài)的應(yīng)用 vs 有狀態(tài)應(yīng)用

1.1 Kubernetes上無狀態(tài)的應(yīng)用

首先什么是無狀態(tài)(Stateless)的應(yīng)用?比如普通的前端UI項(xiàng)目或是后臺(tái)java項(xiàng)目(自身不存儲(chǔ)數(shù)據(jù))都屬于無狀態(tài)的應(yīng)用。

安裝無狀態(tài)的應(yīng)用安裝通常包含編寫Deployment, ConfigMap, Service等組件的yaml,當(dāng)一個(gè)pod宕掉后,Kubernetes通過Control loop會(huì)重新生成pod以保持正確的replica,這里不需要額外的備份,因?yàn)槲覀兊膽?yīng)用是無狀態(tài)的。

針對(duì)無狀態(tài)的應(yīng)用,Kubernetes可以自動(dòng)化管理應(yīng)用的整個(gè)生命周期。
主要依賴于Kubernetes的Control loop機(jī)制,具體可以參考別的文章介紹:https://theithollow.com/2019/09/16/kubernetes-desired-state-and-control-loops/

簡(jiǎn)而言之就是觀察應(yīng)用想要的狀態(tài)是什么?和實(shí)際的狀態(tài)進(jìn)行對(duì)比,如果發(fā)現(xiàn)不一致則采取行動(dòng):
image.png
1.2 Kubernetes上的有狀態(tài)應(yīng)用

什么是有狀態(tài)(Stateful)應(yīng)用?如:MySQL,elasticsearch,mongoDB等。或者別的需要存儲(chǔ)數(shù)據(jù)的應(yīng)用,對(duì)于有狀態(tài)的應(yīng)用涉及到多個(gè)Pod間存在數(shù)據(jù)的同步等復(fù)雜問題。

像MySQL服務(wù)我們可以安裝在Kubernetes集群外以便以傳統(tǒng)的方式進(jìn)行管理,但有些有狀態(tài)的應(yīng)用需要安裝在集群內(nèi)以便更好的進(jìn)行監(jiān)控,如Prometheus或Grafana。

關(guān)于這塊,可以參考我之前的博文《【k8s學(xué)習(xí)】Kubernetes StatefulSet介紹》:http://www.itdecent.cn/p/d332d6d078b5

總之,有狀態(tài)的應(yīng)用,想要實(shí)現(xiàn)其布署、管理、恢復(fù)的自動(dòng)化,并不是一件容易的事情。

2. Kubernetes Operator介紹

Kubernetes Operator主要是為了更好的解決有狀態(tài)的應(yīng)用在Kubernetes中的部署、管理、恢復(fù)。如:

  • 怎么布署這些有狀態(tài)的應(yīng)用?
  • 如何創(chuàng)建有狀態(tài)應(yīng)用的集群(replica>1)?
  • 當(dāng)應(yīng)用宕掉后如何進(jìn)行恢復(fù)?

另外使用Kubernetes Operator的好處是一份標(biāo)準(zhǔn)的流程,可以在不同的環(huán)境中進(jìn)行使用(如dev/prod等)。

3. 怎么實(shí)現(xiàn)對(duì)有狀態(tài)的應(yīng)用進(jìn)行管理的?

Kubernetes Operator的工作原理:

  • 可以把Kubernetes Operator想象成定制化的Kubernetes Control loop
  • Kubernetes Operator使用了CRD
    • CRDCustom Resource Definitions,即定制化的Kubernetes組件(繼承了K8s APIs),像DeploymentService,ConfigMap都屬于標(biāo)準(zhǔn)的K8s組件,我們也可以利用CRD創(chuàng)建自己的K8s組件。
  • 加上有狀態(tài)的應(yīng)用專有的一些知識(shí)技術(shù)

以上這些,使有狀態(tài)應(yīng)用實(shí)現(xiàn)了生命周期的自動(dòng)化。

4. 誰來創(chuàng)建Kubernetes Operator?

因?yàn)橛袪顟B(tài)的應(yīng)用管理并不是通用的,所以需要各個(gè)應(yīng)用自己開發(fā)一套Operator。比如MySQL Operator可能包含只適用于MySQL的流程,如:

  • 怎么創(chuàng)建mysql集群?
  • 怎么運(yùn)行這個(gè)集群?
  • 怎么同步數(shù)據(jù)?
  • 怎么更新等等。

所以需要各個(gè)團(tuán)隊(duì)提供相應(yīng)的Operator:
image.png

具體查詢某個(gè)Operator,可以訪問官網(wǎng):https://operatorhub.io/

image.png

另外如果想要?jiǎng)?chuàng)建自己的Operator,可以使用OPERATOR SDK進(jìn)行開發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容