最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Operator-sdk 在 KaiwuDB 容器云中的使用

2023-03-01 10:29 作者:KaiwuDB  | 我要投稿



一、使用背景


KaiwuDB Operator 是一個(gè)自動(dòng)運(yùn)維部署工具,可以在 Kubernetes 環(huán)境上部署 KaiwuDB集群,借助 Operator 可實(shí)現(xiàn)無(wú)縫運(yùn)行在公有云廠商提供的 Kubernetes 平臺(tái)上,讓 KaiwuDB 成為真正的 Cloud-Native 數(shù)據(jù)庫(kù)。


使用傳統(tǒng)的自動(dòng)化工具會(huì)帶來(lái)了很高的部署和運(yùn)維成本,部分自動(dòng)化部署和運(yùn)維工具如 Puppet/Chef/SaltStack/Ansible,由于缺乏全局狀態(tài)管理,不能及時(shí)對(duì)各種異常情況做自動(dòng)故障轉(zhuǎn)移,并且很難發(fā)揮分布式系統(tǒng)的彈性伸縮能力。除外還需要寫大量的 DSL ,甚至出現(xiàn)與 Shell 腳本一起混合使用的情況,這將帶來(lái)可移植性較差,維護(hù)成本比較高等問(wèn)題。


在云時(shí)代,各大廠商都會(huì)提供托管的 Kubernets 集群,越來(lái)越多的應(yīng)用跑在了 Kubernetes 管理的容器中,傳統(tǒng)部署在 Kubernetes 平臺(tái)的應(yīng)用可以不用綁定在特定云平臺(tái),也能輕松實(shí)現(xiàn)在各種云平臺(tái)之間的遷移,其容器化打包和發(fā)布方式也避免了對(duì)操作系統(tǒng)環(huán)境的依賴。

二、什么是?Operator

Operator 是由 CoreOS 開發(fā)的,用來(lái)擴(kuò)展 Kubernetes api,是一個(gè)特定的應(yīng)用程序控制器,它用來(lái)創(chuàng)建、配置和管理復(fù)雜的有狀態(tài)應(yīng)用,如數(shù)據(jù)庫(kù)、緩存和監(jiān)控系統(tǒng)。Operator 基于 Kubernetes 的資源和控制器的概念構(gòu)建,但同時(shí)又涵蓋了應(yīng)用程序特定的領(lǐng)域知識(shí)。在 Kubernetes 官方文檔中,對(duì) Operator 的定義如下:

Operators?are?software?extensions?to?Kubernetes?that?make?use?of?custom?resources?to?manage?applications?and?their?components.?Operators?follow?Kubernetes?principles,?notably?the?control?loop.


簡(jiǎn)單來(lái)說(shuō):Operator = 定制資源(CRD) + 控制器。


1.??定制資源(CRD)
Kubernetes 提供了一系列的資源,包括 Statefulset、Service、Configmap 等。但是這些資源并不能完全滿足使用需求,例如在 K8s 中部署 Kaiwu 應(yīng)用時(shí),需定制一個(gè) Kaiwu 應(yīng)用資源,CRD(Custom Resource Definition)就承擔(dān)了一個(gè)說(shuō)明書的角色,讓 Kubernetes 來(lái)認(rèn)識(shí)這個(gè)自定義資源 CR。有了 CRD 之后,我們可以自由地增加各種與 Pod 平級(jí)的資源。

2.? Controller
Controller 的作用就是監(jiān)聽指定對(duì)象的新增、刪除、修改等變化,并針對(duì)這些變化做出相應(yīng)的響應(yīng)。


三、如何使用Operator-sdk

Operator-sdk?由 CoreOS 開源,它是用于構(gòu)建 Kubernetes 原生應(yīng)用的 SDK,它提供更高級(jí)別的 api、抽象和項(xiàng)目腳手架。使用 Kubernetes 中原生的對(duì)象來(lái)部署和管理復(fù)雜的應(yīng)用程序不是那么容易,尤其是要管理整個(gè)應(yīng)用的生命周期、組件的擴(kuò)縮容,我們之前通常是編寫各種腳本,通過(guò)調(diào)用 Kubernetes 的命令行工具來(lái)管理 Kubernetes 上的應(yīng)用。


現(xiàn)在可以通過(guò)?CRD(CustomResourceDefinition)來(lái)自定義這些復(fù)雜操作,通過(guò)將運(yùn)維的知識(shí)封裝在自定義 api 里來(lái)減輕運(yùn)維人員的負(fù)擔(dān)。同時(shí),我們還可以像操作 Kubernetes 的原生資源對(duì)象一樣,使用 kubectl 來(lái)操作?CRD。


1.? 初始化項(xiàng)目
operator-sdk init --domain inspur.com --repo github.com/inspur/kaiwu-operator?

--domain 表示?api 組的后綴;

--repo 表示本工程的 golang 包名。

生成的目錄結(jié)構(gòu)如下:


其中,config?目錄下是所有的 yaml 配置文件,Dockerfile 用于生成 docker 鏡像,Makefile 是編譯控制文件,main.go 是程序入口文件。


2.? 添加 CRD 和 Controller
operator-sdk create api --group kaiwu --version v1 --kind KaiwuCluster --resource=true --controller=true


通過(guò)腳手架生成一個(gè) CRD 和?Controller?的 api, 生成了一個(gè)目錄包含 api 的結(jié)構(gòu)體定義和?Controller?代碼。在 api/v1 目錄下新增了 3 個(gè) go 文件,其中最主要文件是 kaiwucluster_types.go,是對(duì)新增 CRD 的定義。


同時(shí)增加了一些配置文件和?Controller:


其中,CRD 目錄下的文件是對(duì) CRD 的定義,rbac 目錄下的文件是新增的角色定義,samples目錄下的文件是創(chuàng)建 CR 的示例文件。


在新生成的 controllers 文件夾下,kaiwucluster_controller.go 中定義了主要的業(yè)務(wù)邏輯,主要實(shí)現(xiàn)在 Reconcile 函數(shù)中:


開發(fā)過(guò)程中使用的 api 接口包:
·?corev1 “k8s.io/api/core/v1” 核心api,提供核心結(jié)構(gòu)和接口,yaml中常用的 Spec 定義在此。·?metAV1 “k8s.io/apimachinery/pkg/apis/meta/v1” yaml 中常用的 metadata 定義,ObjectMeta,LabelSelector 等基本在此。·?appsv1 “k8s.io/api/apps/v1” 常用的創(chuàng)建的 CRD 或者已經(jīng)存在的rd等都在此,比如 Deployments,Pod,Service 等等。
3.??部署運(yùn)行
方式一:本地運(yùn)行,主要用于研發(fā)和測(cè)試階段,在項(xiàng)目根目錄運(yùn)行:


方式二:集群部署:

(1)make


(2)構(gòu)建鏡像


(3)運(yùn)行


(4)CRD 確認(rèn)


(5)查看狀態(tài)


Operator-sdk 在 KaiwuDB 容器云中的使用的評(píng)論 (共 條)

使用qq登录你需要登录后才可以评论。
买车| 临泽县| 揭西县| 旌德县| 赞皇县| 岳阳市| 尉犁县| 崇州市| 禄劝| 永定县| 鲜城| 金阳县| 图们市| 安岳县| 托克逊县| 安化县| 习水县| 华坪县| 略阳县| 松江区| 江门市| 铜梁县| 金沙县| 兰考县| 德州市| 泽州县| 双江| 贡觉县| 博白县| 义马市| 衢州市| 武宣县| 淮滨县| 铁岭县| 潼关县| 田林县| 沛县| 七台河市| 灵宝市| 铜梁县| 新竹县|