V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
Tenxcloud10
V2EX  ›  云计算

使用 Kubernetes 创建 Couchbase 集群

  •  
  •   Tenxcloud10 · 2016-09-02 11:45:12 +08:00 · 1987 次点击
    这是一个创建于 2987 天前的主题,其中的信息可能已经有所发展或是发生改变。

    编者按:本文由 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 使用完全相同的镜像。这将保持集群的同质化,使得伸缩集群更加自如。

    配置文件请查看这里( 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 :

    列出所有服务:

    输出显示, 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 文件。

    创建一个 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 :

    查看 RC:

    一个新的 couchbase-worker-rc 被创建,并且指定的 pod 数量与实际数量相同。

    查看所有的 pod :

    worker 的 pod 也创建成功。每个 pod 的名称前缀是了相应 RC 名称。例如, worker pod 的名字前缀是 couchbase-worker-rc 。

    刷新 Couchbase Web 控制台,能够看到一个新的 Couchbase 节点添加成功。在 Pending Rebalance 标签能够看到一个明显的标记。

    单击该标签查看需要重新平衡的节点 IP 地址:

    伸缩 Couchbase 集群

    现在,让我们通过调整 worker RC 的副本数量伸缩 Couchbase 集群:

    查看 RC 状态,发现 pod 数量修改为 3 个:

    通过查看 pod 列表再次验证:

    Couchbase Web 控制台的 Pending Rebalance 标签显示有 3 个服务被添加到集群并且需要重新平衡。

    重新平衡 Couchbase 集群

    最后,点击“ 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

    2 条回复    2016-09-02 12:11:01 +08:00
    est
        1
    est  
       2016-09-02 11:49:12 +08:00
    这年头还有人用 Couchbase ?
    sorra
        2
    sorra  
       2016-09-02 12:11:01 +08:00
    社区版只有 4.1 啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.