使用Kubernetes创建 Couchbase 集群

Tenxcloud · · 1049 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

编者按:本文由Couchbase 的VP Arun Gupta 编写,展示了如何用Kubernetes 设置 Couchbase 集群。 Couchbase Server是一个开源的、分布式的文档型NoSQL数据库。它有低于毫秒级的快速键值对存储,为快速查询设计的专用索引和执行SQL语句的引擎。对于移动应用和物联网(IOT)环境,Couchbase Lite在能本地设备上运行并与Couchbase Server进行同步。 最近刚刚发布的Couchbase Server 4.5加入了许多新功能,包括对Docker的生产认证支持。Couchbase 支持Docker容器的各种编排框架,如Kubernetes,Docker Swarm 和 Mesos,详情访问这个页面(http://www.couchbase.com/containers)。 本文将演示如何使用Kubernetes 创建 Couchbase 集群。本次将使用Kubernetes 1.3.3 ,AWS和Couchbase 4.5企业版进行测试。 像所有美好的东西一样,本篇文章站在巨人的肩膀上。这篇文章的结构是saturnism在一个周五下午确定的,配置文件则由r_schmiddy贡献。 ## Couchbase集群 Couchbase 服务的集群通常部署在商用服务器上。Couchbase Server 有一个对等的拓扑结构,在该拓扑结构上所有节点是平等的并能按需通信。 没有主节点,从节点,配置节点,名称节点,头节点等概念,所有节点上的软件都是相同的。它允许在不考虑他们“类型”的情况下添加或删除节点。 该模式通常能在云基础设施模型上工作的特别好。对于 kubernetes,这意味着我们可以为所有Couchbase 节点使用完全相同的容器镜像。 一个典型的Couchbase 集群创建过程如下: ● 启动Couchbase:启动n个 Couchbase 服务器 ● 创建集群:选择任一服务器,并添加所有其他服务器来创建集群 ● 再平衡集群:重新平衡集群,使数据跨集群分布 为了使用Kubernetes,集群创建分为“master” 和 “worker”的Replication Controller(RC)。 master RC 只有一个副本并作为一个服务(service)发布。这样提供了一个单一的入口来开始集群创建。 默认情况下服务仅在集群内可见,但我们会将该服务作为一个负载均衡器暴露出去。这使得可从集群外部访问Couchbase Web控制台。 worker RC 跟master RC使用完全相同的镜像。这将保持集群的同质化,使得伸缩集群更加自如。 ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE1.png) 配置文件请查看这里(https://github.com/arun-gupta/couchbase-kubernetes)。让我们从创建 Kubernetes资源开始来创建Couchbase集群。 ## 创建Couchbase master RC : Couchbase master RC 可以使用以下配置文件来创建: apiVersion: v1 kind: ReplicationController metadata: name: couchbase-master-rc spec: replicas: 1 selector: app: couchbase-master-pod template: metadata: labels: app: couchbase-master-pod spec: containers: - name: couchbase-master image: arungupta/couchbase:k8s env: - name: TYPE value: MASTER ports: - containerPort: 8091 <hr /> apiVersion: v1 kind: Service metadata: name: couchbase-master-service labels: app: couchbase-master-service spec: ports: - port: 8091 selector: app: couchbase-master-pod type: LoadBalancer 该配置文件创建一个名为 couchbase-master-rc 的Replication Controller。这个RC使用arungupta/couchbase:k8s 镜像(https://github.com/arun-gupta/couchbase-kubernetes/blob/master/cluster/Dockerfile)创建了1个 pod 的副本。 该 Dockerfile使用配置脚本配置基础 Couchbase Docker 镜像。首先,它使用Couchbase REST API设置存储配额,设置索引、数据和查询服务,安全凭据,并加载样本数据桶(sample data bucket)。 然后,调用Couchbase CLI命令把Couchbase 节点添加到集群或添加节点并平衡集群。这是基于以下三个环境变量: ● TYPE:定义加入的 pod是worker还是 master ● AUTO_REBALANCE:定义集群是否需要重新平衡 ● COUCHBASE_MASTER: master 服务的名称 第一个配置文件中,只将TYPE环境变量设置为MASTER。 让我们创建并验证。 创建 Couchbase master RC: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase1-1.png) 列出所有服务: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase2.png) 输出显示,couchbase-master-service 被创建。 列出所有pod: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase3.png) 配置文件中指定的Pod创建成功 查看 RC: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase4.png) RC中 pod 指定的数量和实际的数量相同。 查看服务: kubectl describe svc couchbase-master-service Name: couchbase-master-service Namespace: default Labels: app=couchbase-master-service Selector: app=couchbase-master-pod Type: LoadBalancer IP: 10.0.57.201 LoadBalancer Ingress: a94f1f286590c11e68e100283628 cd6c-1110696566.us-west-2.elb.amazonaws.com Port: <unset> 8091/TCP NodePort: <unset> 30019/TCP Endpoints: 10.244.2.3:8091 Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 2m 2m 1 {service-controller } Normal CreatingLoadBalancer Creating load balancer 2m 2m 1 {service-controller } Normal CreatedLoadBalancer Created load balancer 记下kubectl describe命令输出中LoadBalancer Ingress 的值。通过这个地址来访问 Couchbase Web控制台。 等待3 分钟左右让负载均衡器启动。然后通过<ip>:8091访问Couchbase Web控制台,如下: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE2.png) 配置文件指定的用户名是Administrator,密码是password,登录后页面如下: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE3.png) 点击Server Nodes,查看集群中有多少Couchbase节点。正如预期的那样,当前只显示一个节点: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE4.png) 点击 Data Buckets,查看作为镜像一部分的示例Bucket : ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE5.png) 上图表明 travel-sample bucket被成功创建并有31591个 JSON文件。 ## 创建一个Couchbase worker RC: 现在我们可以使用配置文件创建一个worker RC: apiVersion: v1 kind: ReplicationController metadata: name: couchbase-worker-rc spec: replicas: 1 selector: app: couchbase-worker-pod template: metadata: labels: app: couchbase-worker-pod spec: containers: - name: couchbase-worker image: arungupta/couchbase:k8s env: - name: TYPE value: "WORKER" - name: COUCHBASE_MASTER value: "couchbase-master-service" - name: AUTO_REBALANCE value: "false" ports: - containerPort: 8091 该 RC使用相同的arungupta/couchbase:k8s镜像创建Couchbase 的单个副本。这里的主要区别是: ● TYPE 环境变量设置为WORKER。向集群中添加了一个 worker Couchbase 节点 。 ● COUCHBASE_MASTER 环境变量设置为couchbase-master-service。它使用了Kubernetes 内置的服务发现机制来使 worker 和master中的pod进行通信。 ● AUTO_REBALANCE 环境变量设置为false。该环境变量确保了节点只添加到集群而集群本身不重新平衡。集群的再平衡用来在集群中的节点中重新分布数据。当多个节点首次被添加时推荐使用这种方式,之后集群可以使用Web 控制台来手动进行再平衡。 让我们创建 一个worker: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase5.png) 查看RC: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase6.png) 一个新的 couchbase-worker-rc 被创建,并且指定的pod数量与实际数量相同。 查看所有的pod: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase7.png) worker的pod也创建成功。每个 pod 的名称前缀是了相应RC名称。例如,worker pod的名字前缀是couchbase-worker-rc。 刷新Couchbase Web控制台,能够看到一个新的Couchbase节点添加成功。在Pending Rebalance 标签能够看到一个明显的标记。 ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE6.png) 单击该标签查看需要重新平衡的节点IP地址: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE7-1.png) ## 伸缩 Couchbase 集群 现在,让我们通过调整worker RC的副本数量伸缩Couchbase 集群: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase8.png) 查看RC状态,发现pod数量修改为3个: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase9.png) 通过查看pod列表再次验证: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase10.png) Couchbase Web控制台的Pending Rebalance 标签显示有3个服务被添加到集群并且需要重新平衡。 ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE8.png) ## 重新平衡 Couchbase 集群 最后,点击“Rebalance”按钮重新平衡集群。消息窗口显示重新平衡的当前状态: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE9.png) 一旦所有的节点重新平衡完成,Couchbase 集群将会随时响应请求: ![](http://blog.tenxcloud.com/wp-content/uploads/2016/09/couchbase%E5%9B%BE10.png) 除了创建集群, Couchbase Server 支持一系列高可用性和灾难恢复(HA / DR)策略。大多数的HA/DR 策略依赖于最大可用性,增加冗余,跨数据中心,定期备份等多种方法。 现在Couchbase 集群已就绪,你可以开始使用了。 更多信息请查看 Couchbase Developer Portal 和 Forums,或查看Stack Overflow上的问题。 本文由[时速云][1]翻译,如若转载,需注明转载自“[时速云][1]” 原文链接: http://blog.kubernetes.io/2016/08/create-couchbase-cluster-using-kubernetes.html [1]:https://www.tenxcloud.com/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1049 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传