编者按:本文由 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 Server 有一个对等的拓扑结构,在该拓扑结构上所有节点是平等的并能按需通信。
没有主节点,从节点,配置节点,名称节点,头节点等概念,所有节点上的软件都是相同的。它允许在不考虑他们“类型”的情况下添加或删除节点。
该模式通常能在云基础设施模型上工作的特别好。对于 kubernetes ,这意味着我们可以为所有 Couchbase 节点使用完全相同的容器镜像。
一个典型的 Couchbase 集群创建过程如下:
● 启动 Couchbase :启动 n 个 Couchbase 服务器
● 创建集群:选择任一服务器,并添加所有其他服务器来创建集群
● 再平衡集群:重新平衡集群,使数据跨集群分布
为了使用 Kubernetes ,集群创建分为“ master ” 和 “ worker ”的 Replication Controller ( RC )。
master RC 只有一个副本并作为一个服务(service)发布。这样提供了一个单一的入口来开始集群创建。
默认情况下服务仅在集群内可见,但我们会将该服务作为一个负载均衡器暴露出去。这使得可从集群外部访问 Couchbase Web 控制台。
worker RC 跟 master RC 使用完全相同的镜像。这将保持集群的同质化,使得伸缩集群更加自如。
配置文件请查看这里( https://github.com/arun-gupta/couchbase-kubernetes )。让我们从创建 Kubernetes 资源开始来创建 Couchbase 集群。
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 :
列出所有服务:
输出显示, couchbase-master-service 被创建。
列出所有 pod :
配置文件中指定的 Pod 创建成功
查看 RC :
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 控制台,如下:
配置文件指定的用户名是 Administrator ,密码是 password ,登录后页面如下:
点击 Server Nodes ,查看集群中有多少 Couchbase 节点。正如预期的那样,当前只显示一个节点:
点击 Data Buckets ,查看作为镜像一部分的示例 Bucket :
上图表明 travel-sample bucket 被成功创建并有 31591 个 JSON 文件。
现在我们可以使用配置文件创建一个 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 :
查看 RC:
一个新的 couchbase-worker-rc 被创建,并且指定的 pod 数量与实际数量相同。
查看所有的 pod :
worker 的 pod 也创建成功。每个 pod 的名称前缀是了相应 RC 名称。例如, worker pod 的名字前缀是 couchbase-worker-rc 。
刷新 Couchbase Web 控制台,能够看到一个新的 Couchbase 节点添加成功。在 Pending Rebalance 标签能够看到一个明显的标记。
单击该标签查看需要重新平衡的节点 IP 地址:
现在,让我们通过调整 worker RC 的副本数量伸缩 Couchbase 集群:
查看 RC 状态,发现 pod 数量修改为 3 个:
通过查看 pod 列表再次验证:
Couchbase Web 控制台的 Pending Rebalance 标签显示有 3 个服务被添加到集群并且需要重新平衡。
最后,点击“ Rebalance ”按钮重新平衡集群。消息窗口显示重新平衡的当前状态:
一旦所有的节点重新平衡完成, Couchbase 集群将会随时响应请求:
除了创建集群, Couchbase Server 支持一系列高可用性和灾难恢复( HA / DR )策略。大多数的 HA/DR 策略依赖于最大可用性,增加冗余,跨数据中心,定期备份等多种方法。
现在 Couchbase 集群已就绪,你可以开始使用了。
更多信息请查看 Couchbase Developer Portal 和 Forums ,或查看 Stack Overflow 上的问题。
原文链接: http://blog.kubernetes.io/2016/08/create-couchbase-cluster-using-kubernetes.html