影视文化传媒公司网站建设,忻州网站seo,网站核验通知书,重庆网站建设安全一、使用背景KaiwuDB Operator 是一个自动运维部署工具#xff0c;可以在 Kubernetes 环境上部署 KaiwuDB集群#xff0c;借助 Operator 可实现无缝运行在公有云厂商提供的 Kubernetes 平台上#xff0c;让 KaiwuDB 成为真正的 Cloud-Native 数据库。使用传统的自动化工具会…一、使用背景KaiwuDB Operator 是一个自动运维部署工具可以在 Kubernetes 环境上部署 KaiwuDB集群借助 Operator 可实现无缝运行在公有云厂商提供的 Kubernetes 平台上让 KaiwuDB 成为真正的 Cloud-Native 数据库。使用传统的自动化工具会带来了很高的部署和运维成本部分自动化部署和运维工具如 Puppet/Chef/SaltStack/Ansible由于缺乏全局状态管理不能及时对各种异常情况做自动故障转移并且很难发挥分布式系统的弹性伸缩能力。除外还需要写大量的 DSL 甚至出现与 Shell 脚本一起混合使用的情况这将带来可移植性较差维护成本比较高等问题。在云时代各大厂商都会提供托管的 Kubernets 集群越来越多的应用跑在了 Kubernetes 管理的容器中传统部署在 Kubernetes 平台的应用可以不用绑定在特定云平台也能轻松实现在各种云平台之间的迁移其容器化打包和发布方式也避免了对操作系统环境的依赖。二、什么是 OperatorOperator 是由 CoreOS 开发的用来扩展 Kubernetes api是一个特定的应用程序控制器它用来创建、配置和管理复杂的有状态应用如数据库、缓存和监控系统。Operator 基于 Kubernetes 的资源和控制器的概念构建但同时又涵盖了应用程序特定的领域知识。在 Kubernetes 官方文档中对 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.简单来说Operator 定制资源(CRD) 控制器。1. 定制资源(CRD)Kubernetes 提供了一系列的资源包括 Statefulset、Service、Configmap 等。但是这些资源并不能完全满足使用需求例如在 K8s 中部署 Kaiwu 应用时需定制一个 Kaiwu 应用资源CRDCustom Resource Definition就承担了一个说明书的角色让 Kubernetes 来认识这个自定义资源 CR。有了 CRD 之后我们可以自由地增加各种与 Pod 平级的资源。2. ControllerController 的作用就是监听指定对象的新增、删除、修改等变化并针对这些变化做出相应的响应。三、如何使用Operator-sdkOperator-sdk 由 CoreOS 开源它是用于构建 Kubernetes 原生应用的 SDK它提供更高级别的 api、抽象和项目脚手架。使用 Kubernetes 中原生的对象来部署和管理复杂的应用程序不是那么容易尤其是要管理整个应用的生命周期、组件的扩缩容我们之前通常是编写各种脚本通过调用 Kubernetes 的命令行工具来管理 Kubernetes 上的应用。现在可以通过 CRDCustomResourceDefinition来自定义这些复杂操作通过将运维的知识封装在自定义 api 里来减轻运维人员的负担。同时,我们还可以像操作 Kubernetes 的原生资源对象一样使用 kubectl 来操作 CRD。1. 初始化项目operator-sdk init --domain inspur.com --repo github.com/inspur/kaiwu-operator--domain 表示 api 组的后缀;--repo 表示本工程的 golang 包名。生成的目录结构如下其中config 目录下是所有的 yaml 配置文件Dockerfile 用于生成 docker 镜像Makefile 是编译控制文件main.go 是程序入口文件。2. 添加 CRD 和 Controlleroperator-sdk create api --group kaiwu --version v1 --kind KaiwuCluster --resourcetrue --controllertrue通过脚手架生成一个 CRD 和 Controller 的 api, 生成了一个目录包含 api 的结构体定义和 Controller 代码。在 api/v1 目录下新增了 3 个 go 文件其中最主要文件是 kaiwucluster_types.go是对新增 CRD 的定义。同时增加了一些配置文件和 Controller其中CRD 目录下的文件是对 CRD 的定义rbac 目录下的文件是新增的角色定义samples目录下的文件是创建 CR 的示例文件。在新生成的 controllers 文件夹下kaiwucluster_controller.go 中定义了主要的业务逻辑主要实现在 Reconcile 函数中开发过程中使用的 api 接口包· corev1 “k8s.io/api/core/v1” 核心api提供核心结构和接口yaml中常用的 Spec 定义在此。· metav1 “k8s.io/apimachinery/pkg/apis/meta/v1” yaml 中常用的 metadata 定义ObjectMeta,LabelSelector 等基本在此。· appsv1 “k8s.io/api/apps/v1” 常用的创建的 CRD 或者已经存在的rd等都在此比如 Deployments,Pod,Service 等等。3. 部署运行方式一本地运行主要用于研发和测试阶段在项目根目录运行make generate make manifests make install make run方式二集群部署1make$ make generate make manifests make install2构建镜像$ make docker-build IMGinspur/kaiwu-operator:v1$ docker images |grep kaiwuinspur/kaiwu-operator v1 d15d88ddd113 About a minute ago 965MB3运行$ make deploy IMG inspur/kaiwu-operator:v14CRD 确认$ kubectl get crdNAME CREATED ATkaiwuclusters.kaiwu.inspur.com 2022-10-25T08:49:35Z5查看状态$ kubectl get po –n kaiwu-operator-systemNAME READY STATUS RESTARTS AGEkaiwu-operator-controller-manager-6bb7b666f-2v4nq 1/1 Running 012m