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

  • 相关阅读:
    第三周学习进度
    四则运算之结对开发
    第二周学习进度
    单元测试
    构建之法阅读笔记03
    本周学习进度
    四则运算三
    构建之法阅读笔记02
    本周学习进度
    按照Right-BICEP要求设计的测试用例
  • 原文地址:https://www.cnblogs.com/datastax/p/14054987.html
Copyright © 2011-2022 走看看