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开发者或管理员证书,请点击这里访问我们的网站。

 

 

 

Astra Service Broker:在Kubernetes上尽情使用Cassandra

上一篇:简约之美Jodd-http--深入源码理解http协议


下一篇:遍历JSONObject和XML实现简单的字段脱敏