50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

etcd-operator 快速入门完全教程

  • 2020-05-18
  • 本文字数:4294 字

    阅读完需:约 14 分钟

etcd-operator快速入门完全教程

Operator 是指一类基于 Kubernetes 自定义资源对象(CRD)和控制器(Controller)的云原生拓展服务,其中 CRD 定义了每个 operator 所创建和管理的自定义资源对象,Controller 则包含了管理这些对象所相关的运维逻辑代码。


对于普通用户来说,如果要在 k8s 集群中部署一个高可用的 etcd 集群,那么不仅要了解其相关的配置,同时又需要特定的 etcd 专业知识才能完成维护仲裁,重新配置集群成员,创建备份,处理灾难恢复等等繁琐的事件。


而在 operator 这一类拓展服务的协助下,我们就可以使用简单易懂的 YAML 文件(同理参考 Deployment)来声明式的配置,创建和管理我们的 etcd 集群,下面我们就来一同了解下 etcd-operator 这个服务的架构以及它所包含的一些功能。

目 标

  • 了解 etcd-operator 的架构与 CRD 资源对象

  • 部署 etcd-operator

  • 使用 etcd-operator 创建 etcd cluster

  • 基于 etcd-operator 备份和恢复 etcd cluster

服务架构

etcd-operator 的设计是基于 k8s 的 API Extension 机制来进行拓展的,它为用户设计了一个类似于 Deployment 的 Controller,只不过这个 Controller 是用来专门管理 etcd 这一服务的。


用户默认还是通过 kubectl 或 UI 来与 k8s 的 API 进行交互,只不过在这个 k8s 集群中多了一个用户自定义的控制器(custom controller),operator controller 的服务是以 Pod 的方式运行在 k8s 集群中的,同时这个服务也需要配置所需的 RBAC 权限(比如对 Pod,Deployment,Volume 等使用到的资源进行增删改查的操作),下面我们用一个简单的架构图来进行阐述:


etcd-operator 的自定义资源对象(CRD)

在 k8s 中,所有自定义的 Controller 和其自定义的资源对象(CRD)都必须满足 k8s API 的规范(参考下图):


  • apiVersion 描述了当前自定义资源对象的版本号

  • Kind 表示自定义资源对象的名称,用户可通过执行 kubectl get $KIND_NAME 来获取所创建的 CRD 对象

  • Metadata 继承了原生 k8s 的 metadata,用于添加标签,Annotations 等元数据

  • Spec 是用户可自定义设计的服务配置参数,如镜像版本号,节点数量,资源配置等等…

  • Status 包含了当前资源的的相关状态,每个 operator controller 可自定义 status 所包含的信息,一般会选择添加如 conditions,updateTime 和 message 等一类的信息。



下面先我们来了解一下 etcd-operator 所包含的几个自定义资源对象(CRDs):


1、 EtcdCluster : etcdcluster 用来描述用户自定义的 etcd 集群,可一键式部署和配置一个相关的 etcd 集群。


apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdClustermetadata:  name: etcd-clusterspec:  size: 3  version: 3.2.25
复制代码


2、 EtcdBackup : etcdbackup 用来描述和管理一个 etcd 集群的备份,当前支持定期备份到云端存储,如 AWS s3, Aliyun oss(oss 当前需使用 quay.io/coreos/etcd-operator:dev 镜像)。


apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdBackupmetadata:  name: etcd-backupspec:  etcdEndpoints: [<etcd-cluster-endpoints>]  storageType: OSS #options are S3/ABS/GCS/OSS  backupPolicy:    backupIntervalInSecond: 125    maxBackups: 4  oss:    #"<oss-bucket-name>/<path-to-backup-file>"    path: <full-oss-path>    ossSecret: <oss-secret>    # Details about regions and endpoints, see https://www.alibabacloud.com/help/doc-detail/31837.htm    endpoint: <endpoint> 
复制代码


3、 EtcdRestore: etcdrestore 用来帮助将 etcdbackup 服务所创建的备份恢复到一个指定的 etcd 的集群。


apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdRestoremetadata:  # name must be same to the spec.etcdCluster.name  name: example-etcd-clusterspec:  etcdCluster:    name: example-etcd-cluster  backupStorageType: OSS  oss:    path: <full-oss-path>     ossSecret: <oss-secret>    endpoint: <endpoint>
复制代码

如何部署和使用 etcd-operator

1、部署 etcd-operator


在 Rancher 最新的 stable v2.3.2 的版本中,用户可通过应用商店(Catalog)来一键式部署 etcd-operator v0.9.0 版本,同时原生 k8s 也可下载 rancher/charts 到本地后通过 helm install 的方式进行部署。



1)(可选)部署 etcd-operator 时可选择同时创建一个 etcd 集群(此集群在 etcd-operator 被删除时会被一同移除),当然用户也可待 etcd-operator 部署完成通过 kubectl apply -f myetcd.yaml 来创建一个新的 etcd 集群。



2)部署时,如果用户选择启动 Enable Clusterwide of etcd Operator 这个选项,那么这个 etcd-operator 将作为集群层级对象来使用(否则为 namespaced 隔离),如果 enable 这个选项,那么在创建 etcd 集群时需添加以下注释才能创建创建:


kind: EtcdClustermetadata:  name: etcd-cluster  # add this annotation when the clusterWide is enabled  annotations:    etcd.database.coreos.com/scope: clusterwide
复制代码


2、创建 etcd 集群


接下来我们就可以使用上述的 CRD 自定义资源对象对来创建和管理我们的 etcd 集群了。


2.1 手动创建 etcd 集群


cat <<EOF | kubectl apply -f -apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdClustermetadata:  name: "etcd-cluster"spec:  size: 3 # 默认etcd节点数  version: "3.2.25" # etcd版本号EOF
复制代码


2.2 部署后可通过 CRD 对象来查看我们创建的 etcd 集群和 pod 状态


$ kubectl get etcdclusterNAME            AGEetcd-cluster    2m
$ kubectl get podNAME READY STATUS RESTARTS AGEetcd-cluster-g28f552vvx 1/1 Running 0 2metcd-cluster-lpftgqngl8 1/1 Running 0 2metcd-cluster-sdpcfrtv99 1/1 Running 0 2m
复制代码


2.3 可以往 etcd 集群任意的写入几条数据验证 etcd 集群是正常工作的(后续也可用来验证集群的备份和恢复功能)


$ kubectl get svcNAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGEetcd-cluster          ClusterIP   None           <none>        2379/TCP,2380/TCP   17hetcd-cluster-client   ClusterIP   10.43.130.71   <none>        2379/TCP            17h## write data$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 put foo "Hello World"## get data$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 get foofooHello World
复制代码


3、基于 operator 备份 etcd cluster


3.1 确认了 etcd 集群正常运行后,作为 devops 后面要考虑的就是如何创建 etcd 集群的自动化备份,下面以阿里云的 OSS 举例:


cat <<EOF | kubectl apply -f -apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdBackupmetadata:  name: example-etcd-cluster-periodic-backupspec:  etcdEndpoints: [http://etcd-cluster-client:2379] #内网可使用svc地址,外网可用NodePort或LB代理地址  storageType: OSS  backupPolicy:    backupIntervalInSecond: 120 #备份时间间隔    maxBackups: 4 #最大备份数  oss:    path: my-bucket/etcd.backup    ossSecret: oss-secret #需预先创建oss secret    endpoint: oss-cn-hangzhou.aliyuncs.comEOF
复制代码


3.2 若 OSS Secret 不存在,用户可先手动创建,具体配置可参考如下:


cat << EOF | kubectl apply -f -apiVersion: v1kind: Secretmetadata:  name: oss-secrettype: OpaquestringData:  accessKeyID: myAccessKey  accessKeySecret: mySecretEOF
复制代码


3.3 待 etcdbackup 创建成功后,用户可以通过 kubectl describe etcdbackup 或查看 etcd-backup controller 日志来查看备份状态,如状态显示为 Succeeded: true,可以前往 oss 查看具体的备份内容。



4、基于 operator 恢复 etcd cluster


最后,假设我们要将 etcd 集群 A 的备份数据恢复到另一个新的 etcd 集群 B,那么我们先手动创建一个名为 etcd-cluster2 的新集群(oss 备份/恢复当前需使用 quay.io/coreos/etcd-operator:dev 镜像)。


cat <<EOF | kubectl apply -f -apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdClustermetadata:  name: "etcd-cluster2"spec:  size: 3  version: "3.2.25"EOF
复制代码


然后通过创建 etcdresotre 将备份数据恢复到 etcd-cluster2 集群


cat <<EOF | kubectl apply -f -apiVersion: etcd.database.coreos.com/v1beta2kind: EtcdRestoremetadata:  # name必须与下面的spec.etcdCluster.name保持一致  name: etcd-cluster2spec:  etcdCluster:    name: etcd-cluster2  backupStorageType: OSS  oss:    path: my-bucket/etcd.backup_v1_2019-08-07-06:44:17    ossSecret: oss-secret    endpoint: oss-cn-hangzhou.aliyuncs.comEOF

复制代码


待 etcdresotre 对象创建成功后,可以查看 etcd-operator-restore 的日志,大致内容如下,


$ kubectl logs -f etcd-operator-restore...time="2019-08-07T06:50:26Z" level=info msg="listening on 0.0.0.0:19999"time="2019-08-07T06:50:26Z" level=info msg="starting restore controller" pkg=controllertime="2019-08-07T06:56:25Z" level=info msg="serving backup for restore CR etcd-cluster2"
复制代码


通过 kubectl 查看 pod 我们可以看到 etcd-cluster2 集群的 etcd 节点被删除重建:


NAME                       READY   STATUS    RESTARTS   AGEetcd-cluster2-5tq2d5bvpf    0/1     Terminating   0      93setcd-cluster2-kfgvc692pp    1/1     Terminating   0      101setcd-cluster2-xqkgz8chb8    0/1     Init:1/3      0      6setcd-cluster2-pf2qxgtg9d    1/1     Running       0      48setcd-cluster2-x92l9vpx97    1/1     Running       0      40s
复制代码


最后可通过 etcdctl 来验证之前的数据是否存在(需设置 ETCDCTL_API=3):


$ kubectl exec -it etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster2-client:2379 get foofooHello World
复制代码

小 结

Etcd 作为当前非常流行的 key-value 分布式文件存储,它本身的强一致性和较优的性能可以为许多分布式计算解决分布式存储的需求,如果你的微服务和应用需要用到此类的数据库,不妨来试试 Rancher Catalog 应用中的 etcd-operator 吧,Just do it!


相关资料:


https://github.com/coreos/etcd-operator


https://coreos.com/blog/introducing-the-etcd-operator.html


https://github.com/rancher/charts/tree/master/charts/etcd-operator/v0.9.0


2020-05-18 18:052992

评论 1 条评论

发布
用户头像
请教一下,我通过:https://operatorhub.io/operator/etcd 指导部署了olm和etcd-operator,然后创建etcdcluster,资源成功创建了,但etcd-operator日志只到了选主,后面没有了,etcdcluster对应的资源也没创建,看起来好像没有watch到etcdcluster的创建一样
2021-01-28 16:04
回复
没有更多了
发现更多内容

《完蛋!我被美女包围了》突然火了!世界首个开源贡献榜出炉丨 RTE 开发者日报 Vol.75

声网

语音识别技术在智能客服领域的应用与优化

数据堂

云桌面是否可以运行3D软件

青椒云云电脑

桌面云 云桌面

IoT与鸿蒙、低代码、生成式AI,引爆技术浪潮——华为云开发者日南京站成功举办

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 华为云开发者日

自动化混沌工程 ChaosMeta V0.6 版本发布

ChaosMeta

云原生 自动化 稳定性 混沌工程 攻防演练

特权账号安全管理的难点

尚思卓越

网络安全 数据安全 特权账号管理

低代码可视化逻辑编排工具

树上有只程序猿

低代码 可视化编排 JNPF

如何利用 NFTScan NFT API 在 Aptos 网络上进行 Web3 应用程序开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

语音识别技术在医疗健康领域的应用与挑战

数据堂

2023年度openEuler领先商业实践遴选征集工作正式启动

彭飞

为什么需要对特权账号进行管理

尚思卓越

运维 网络安全 信息安全

HarmonyOS数据管理与应用数据持久化(一)

HarmonyOS开发者

客服发送一条消息背后的技术和思考

得物技术

体验 IM 客服

外贸网站建设攻略:如何建设一个高效的外贸网站

九凌网络

语音识别技术在智能家居领域的创新应用与挑战

数据堂

软件测试/测试开发丨利用ChatGPT自动生成架构图

测试人

人工智能 软件测试 ChatGPT

高能有料 | 第二届OpenHarmony技术大会议程速递

OpenHarmony开发者

在线涂鸦画板软件哪款好?这7款涂鸦神器值得推荐!

彭宏豪95

效率工具 画图软件 在线白板 涂鸦 绘画软件

第22期 | GPTSecurity周报

云起无垠

软件测试/测试开发丨如何利用ChatGPT完善简历

测试人

人工智能 软件测试 ChatGPT

2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小偷计划从这些房屋中窃取现金, 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋, 小

福大大架构师每日一题

福大大架构师每日一题

特权账号管理系统PAM的优势特点

尚思卓越

网络安全 数据安全 PAM

桌面云一体机什么品牌最好?

青椒云云电脑

桌面云 一体机 桌面云一体机

低代码PAAS加速推进企业数字化转型

力软低代码开发平台

低代码 信息化 PaaS平台

etcd-operator快速入门完全教程_文化 & 方法_Rancher_InfoQ精选文章