【參考】
- Kubernetes Operator simply explained in 10 mins:https://www.youtube.com/watch?v=ha3LjlD6g7g --> 本文主要是對(duì)這個(gè)視頻的內(nèi)容的總結(jié)與學(xué)習(xí)
【本文試圖解決以下問題】
- 什么是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/

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-
CRD指Custom Resource Definitions,即定制化的Kubernetes組件(繼承了K8s APIs),像Deployment,Service,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è)Operator,可以訪問官網(wǎng):https://operatorhub.io/

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