zoukankan      html  css  js  c++  java
  • Astra Service Broker:在Kubernetes上尽情使用Cassandra

    2020年11月19日,我们发布了DataStax Astra Service Broker,旨在帮你无缝集成Cassandra到你的Kubernetes部署中去,并且无需操心运维问题。

    本文中,我们将向你展示在Kubernetes上使用Astra是多么容易。读完本文,你将明白为什么Kubernetes和Astra的结合是最好的解决方案。


     

    当你设计和建构云原生程序时,你可能会考虑将它部署在Kubernetes上。那么数据库呢?这可能有点儿复杂,因为一方面是对弹性、伸缩性以及自我修复的需求,另一方面是服务器的维护和长期的运维工作,你得在这两者之间做个权衡取舍。

    Apache Cassandra™很容易满足对弹性、伸缩性以及自我修复的需求,但是怎么处理管理Cassandra所引发的运维负担呢?这正是云原生的Cassandra服务DataStax Astra可以为运维人员和开发人员解决的问题。

    在此基础上,如果想要在Kubernetes上简单地完成部署并使用Astra提供的服务呢?

    2020年11月19日,我们发布了DataStax Astra Service Broker(DataStax Astra服务代理器),旨在帮你无缝集成Cassandra到你的Kubernetes部署中去,并且无需操心运维问题。本文中,我们将向你展示在Kubernetes上使用Astra是多么容易。读完本文,你将明白为什么Kubernetes和Astra的结合是最好的解决方案。

    如果你对DataStax Astra还不甚了解——DataStax Astra是一个Cassandra-as-a-Service(Cassandra托管服务)平台,它让你在使用Cassandra的同时省去运维的开销。从Astra的网站交互界面,你只需花费很短的时间填写少量信息并点一下按钮,你就会拥有一个功能完善且可以按需伸缩的数据库。

    当构建云原生程序时,将各种扩展模式类似的服务结合在一起好处多多——在事前可以尽可能多地满足各式各样的需求,在事后还能减少令人惧怕的技术负债(technical debt)。

    Astra对云平台没有偏好(cloud agnostic),意味着Astra充分提供了横跨不同云平台的可移植性。就像Kubernetes让你能够在你想要的地方、以你想要的方式运行,Astra也将在此过程中作为高度可靠的数据层相伴左右。

    当你用Kubernetes构建云原生程序时,你需要做出很多选择:当你创建你的程序实例时,你如何调配你的数据层?你的程序如何接收数据连接信息,如服务端点(endpoints)、安全证书(security certificates)以及登录信息(credentials)?

    Kubernetes的Open Service Broker API和Service Catalog operator定义了一个用于调配和绑定类似DataStax Astra这样的服务的接口。对于DataStax来说,这意味着我们需要构建一个Service Broker(服务代理器),让它能够将Open Service Broker API格式的请求转换成Astra DevOps API的格式。

    Service Catalog负责监控Kubernetes API的生命周期请求,并将它们发送至Astra Service Broker。一旦一个实例被准备好,它就会被绑定——与此同时,与之相关的服务信息会被获取到,并被存储在一个Kubernetes的Secret类型对象中。

    在一个持续交付的环境中,在每次部署你的应用程序时,只要将这些自定义资源(custom resources)跟你的代码一起放到Kubernetes上,工作变得很简单。让我们来看看集成Astra Service Broker是多么简单。

    为了跟上接下来的内容,你需要先做一些准备:

    • 一个可以通过命令行控制的、正在运行的Kubernetes集群

    • Kubernetes的Helm package manager

    • Service Catalog命令行接口

    • 一个创建了服务账户登录信息(service account credentials)的DataStax Astra帐户

    首先,先要确保Service Catalog operator已经被安装在你的本地集群中。对于每一个Kubernetes集群,这一步操作只用做一次。

    helm repo add svc-cat https://svc-catalog-charts.storage.googleapis.com
    helm repo update
    helm install catalog svc-cat/catalog --namespace catalog --create-namespace

    接下来,用Astra的服务账户信息(service account information)创建一个Kubernetes secret对象。

    对这一步来说,你需要到Astra的service account区域复制你的登录信息。

    你会得到一小段JSON代码,其中包含了在Kubernetes里创建secret对象所需的所有重要信息。这里你需要会一点命令行操作,但是请放心,这样的事你只需做一次。你只需要将下面代码中的<service_account_creds>部分替换为你的登录信息即可。

    kubectl create secret generic astra-creds --from-literal=username=unused --from-literal=password=`echo '<service_account_creds>'| base64`

    然后,你可以通过自定义资源(custom resource)ServiceBroker注册你的Astra Service Broker。为了简便起见,我们将利用非常有帮助的命令行工具svcat。

    $ svcat register astra --url https://broker.astra.datastax.com/ --basic-secret astra-creds

    有了这些信息,Service Catalog会自动请求Astra上可用的服务,并返回显示所有的套餐和服务等级。

    $ svcat marketplace
        CLASS        PLANS                    DESCRIPTION                  
    +----------------+-----------+------------------------------------------------+
      astra-database   A10       DataStax Astra, built on the                  
                                 best distribution of Apache                   
                                 Cassandra™, provides the                      
                                 ability to develop and deploy                 
                                 data-driven applications                      
                                 with a cloud-native service,                  
                                 without the hassles of                        
                                 database and infrastructure                   
                                 administration.                               
                     A20                                                                                       
                     developer                         
       
    $ svcat get plans
      NAME    NAMESPACE     CLASS                 DESCRIPTION            
    +-----------+-----------+----------------+------------------------------------+
      A10       default   astra-database   6 vCPU, 24GB DRAM, 20GB           
                                             Storage                           
      A20       default   astra-database   12 vCPU, 48GB DRAM, 40GB          
                                             Storage                                      
      developer default   astra-database   Free tier: Try Astra with         
                                             no obligation. Get 5 GB of        
                                             storage, free forever.

    备注:由于篇幅限制,上面代码中列出的只是一小部分的相关信息。

    有了这些信息之后,你也许想会要用svcat或kubectl来生成你的数据库实例:

    $ svcat provision devdb --class astra-database --plan developer --params-json '{
      "cloud_provider": "GCP",
      "region": "us-east1",
      "capacity_units": 1,
      "keyspace": "sample_keyspace"
    }'

    你应该会看到以下输出:

    Name:      devdb    
      Namespace:   default  
      Status:             
      Class:              
      Plan:               
    
    Parameters:
      capacity_units: 1
      cloud_provider: GCP
      keyspace: sample_keyspace
      region: us-east1

    如果想使用kubectl,你需要创建一个叫astra.yaml的的文件来描述你需要的实例的类型:

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceInstance
    metadata:
      name: devdb
      namespace: default
    spec:
      parameters:
        capacity_units: 1
        cloud_provider: GCP
        keyspace: petclinic
        region: us-east1
      serviceClassExternalName: astra-database
      servicePlanExternalName: developer
    
    kubectl apply -f astra.yaml

    获取服务登录信息(service credentials)的过程叫做“绑定(binding)”。下面的代码展示了如何绑定一个叫做devdb的实例:

    $ svcat bind devdb
      Name:      devdb    
      Namespace:   default  
      Status:             
      Secret:    devdb    
      Instance:  devdb    
    
    Parameters:
      No parameters defined

    如果用kubectl,这些信息应该要用ServiceBinding这个资源来描述,比如 astra-service-binding.yaml

    apiVersion: servicecatalog.k8s.io/v1beta1
    kind: ServiceBinding
    metadata:
      name: devdb
    spec:
      externalID: 9a412237-1c66-4d43-b5e6-cd92d7b61779
      instanceRef:
      name: devdb
      secretName: devdb
    
    kubectl apply -f astra-service-binding.yaml

    在收到这个请求之后,Service Catalog会从Astra中获取登录信息,并将它们放到一个本地的Kubernetes Secret对象中,这个对象的名字会与我们的绑定操作一样。在这个例子中,这个Secret对象叫做devdb

    $ kubectl get secrets devdb -o yaml
    apiVersion: v1
    data:
      cql_port: 9042
      external_endpoint: ...astra.datastax.com
      encoded_external_bundle: BASE64_ENCODED_CONNECT_BUNDLE_ZIP
      internal_endpoint: ...internal.astra.datastax.com
      encoded_internal_bundle: BASE64_ENCODED_CONNECT_BUNDLE_ZIP
      keyspace: sample_keyspace
      local_datacenter: dc-1
      password: REDACTED
      port: 1337
      tls_ca_cert: PEM_ENCODED_CA_CERT
      tls_cert: PEM_ENCODED_APPLICATION_CERT
      tls_key: PEM_ENCODED_APPLICATION_KEY
      username: REDACTED
    kind: Secret
    metadata:
      name: devdb
    type: Opaque

    想要配置Cassandra驱动程序以安全连接Astra,以上就是所需的所有信息。

    Apache Cassandra可以通过简单地GitOps交互界面按需提供处理能力,而无需再手动启动节点、编写监控代码以及采购基础设施。如果你需要升级集群以增强处理能力,只需要简单地修改你的仓库中的YAML文件再通过持续交付工具部署即可。

    唯一需要稍微花点功夫的就是调用kubectl apply。在你有了一个正常运行的数据库以后,可以前往Spring Reactive Pet Clinic的示例Java应用程序,这个应用程序可以使用Astra Service Broker返回的Secret。

    如果你想要接收我们全新的Cassandra on Kubernetes证书的最新信息,或者想获取Cassandra开发者或管理员证书,请点击这里访问我们的网站。

    References:

        https://www.datastax.com/dev/certifications

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/datastax/p/14054987.html
Copyright © 2011-2022 走看看