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