使用 DataStax Cass Operator 管理云原生Apache Cassandra

iyacontrol

简介

容器是一种流行的技术,用于加速当今的应用程序开发。多亏了Docker这样的容器平台,与虚拟机相比,您可以有效地打包应用程序。使用容器,应用程序及其所有依赖项一起打包到一个最小的可部署镜像中。作为开发人员,您可以使用容器在环境之间移动应用程序,并确保您的应用程序按预期运行。这些目标导致了容器编排平台的创建。这个领域的领导者是Kubernetes。

其优势如下:

  • Kubernetes接受服务定义,并处理容器到服务器的分配并将它们连接在一起。
  • Kubernetes动态跟踪正在运行的容器的运行状况。如果某个容器出现故障,Kubernetes会处理重启它的问题,并可以安排在其他硬件上更换其容器。
  • 通过使用Kubernetes编排容器,您可以快速构建基于微服务的应用程序,并确保它们在任何Kubernetes平台上都能按设计运行。

Cass Operator是 DataStax 开源的,自动在Kubernetes集群中部署和管理开源ApacheCassandra®。

Cass Operator将用户提供的信息精简为节点数和集群名称,以管理各个Kubernetes资源的生命周期。可以使用其他选项,但是对于初学者来说,基本上就是您需要指定的全部。现在,管理分布式Cassandra的过程变得容易得多,这意味着您的团队可以自由地专注于应用程序层及其功能。

Cass Operator可以使用以下任何经过认证的Kubernetes平台:

  • 开源 Kubernetes
  • Amazon Elastic Kubernetes Service (EKS)
  • Google Kubernetes Engine (GKE)
  • Microsoft Azure Kubernetes Service (AKS)
  • Pivotal Container Service (PKS)

部署

1:部署Cass Operator

安装Cass Operator本身很简单。官方提供了从1.13到1.17的每个Kubernetes版本的清单。如下将相关清单应用于您的集群:

K8S_VER=v1.16
kubectl apply -f https://raw.githubusercontent.com/datastax/cass-operator/v1.4.1/docs/user/cass-operator-manifests-$K8S_VER.yaml

本次部署的集群为aws的eks1.17版本。所以具体部署命令如下:

K8S_VER=v1.17
kubectl apply -f https://raw.githubusercontent.com/datastax/cass-operator/v1.4.1/docs/user/cass-operator-manifests-$K8S_VER.yaml

namespace/cass-operator created
serviceaccount/cass-operator created
secret/cass-operator-webhook-config created
customresourcedefinition.apiextensions.k8s.io/cassandradatacenters.cassandra.datastax.com created
clusterrole.rbac.authorization.k8s.io/cass-operator-webhook created
clusterrolebinding.rbac.authorization.k8s.io/cass-operator-webhook created
role.rbac.authorization.k8s.io/cass-operator created
rolebinding.rbac.authorization.k8s.io/cass-operator created
service/cassandradatacenter-webhook-service created
deployment.apps/cass-operator created
validatingwebhookconfiguration.admissionregistration.k8s.io/cassandradatacenter-webhook-registration created

检查operator运行状态:

kubectl -n cass-operator get pods --selector name=cass-operator
NAME                            READY   STATUS    RESTARTS   AGE
cass-operator-7cc94f547-cctd4   1/1     Running   0          3m44s

我们可以看到status 为runing。

Operator定义了一个名称为CassandraDatacenter的CRD,该CRD包含了Cassandra集群的所有基本构造块,例如机架,节点,镜像以及其他方面。

2:创建storage class

由于我们是eks集群,所以创建以下storage class

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: server-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete

将该storage class 部署到集群中。

3:部署Cassandra集群

以下资源定义了一个机架上具有3个节点的Cassandra 3.11.7数据中心,并将其部署到k8s中:

apiVersion: cassandra.datastax.com/v1beta1
kind: CassandraDatacenter
metadata:
  name: dc1
  namespace: cass-operator
spec:
  clusterName: loki
  serverType: cassandra
  serverVersion: 3.11.7
  managementApiAuth:
    insecure: {}
  size: 3
  storageConfig:
    cassandraDataVolumeClaimSpec:
      storageClassName: gp2
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
  config:
    cassandra-yaml:
      authenticator: org.apache.cassandra.auth.PasswordAuthenticator
      authorizer: org.apache.cassandra.auth.CassandraAuthorizer
      role_manager: org.apache.cassandra.auth.CassandraRoleManager
    jvm-options:
      initial_heap_size: 800M
      max_heap_size: 800M
此处需要注意,在部署cass-operator(Deployment)的时候,通过 WATCH_NAMESPACE 指定watch 某个命名空间的对象。所以http://cassandra.datastax.com 必须在该命名空间下,才会生效。

您可以按以下方式检查Cassandra群集中Pod的状态:

kubectl -n cass-operator get pods --selector cassandra.datastax.com/cluster=loki
NAME                     READY   STATUS    RESTARTS   AGE
loki-dc1-default-sts-0   2/2     Running   0          6m33s
loki-dc1-default-sts-1   2/2     Running   0          6m33s
loki-dc1-default-sts-2   2/2     Running   0          6m33s

您可以通过检查CassandraDatacenter的状态子资源中的cassandraOperatorProgress字段来检查以查看Cassandra数据中心的当前进度,如下所示:

kubectl -n cass-operator get cassdc/dc1 -o "jsonpath={.status.cassandraOperatorProgress}"
Ready

如上所述,“ Ready”的值表示Operator已完成Cassandra数据中心的设置。

还可以使用nodetool来检查Cassandra集群的状态,方法是在集群中的其中一个Pod上调用它,如下所示:

kubectl -n cass-operator exec -it -c cassandra loki-dc1-default-sts-0 -- nodetool status
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.26.71.109  89.44 KiB  1            96.8%             50cc6d00-5ed7-470a-8e31-380599fbee80  default
UN  172.26.85.109  70.19 KiB  1            84.4%             72275b36-3201-400a-9ae4-214fef137ba9  default
UN  172.26.90.148  65.3 KiB   1            18.8%             88d22e88-312a-44c9-b0d6-4e81124c6913  default

默认情况下使用新的superuser(不是传统的cassandra用户)和随机密码创建安全的Cassandra集群。您可以将它们从Kubernetes secret中删除,并首次使用它们登录到您的Cassandra集群。例如:

$ CASS_USER=$(kubectl -n cass-operator get secret loki-superuser -o json | jq -r '.data.username' | base64 --decode)
$ CASS_PASS=$(kubectl -n cass-operator get secret loki-superuser -o json | jq -r '.data.password' | base64 --decode)
$ kubectl -n cass-operator exec -ti loki-dc1-default-sts-0 -c cassandra -- sh -c "cqlsh -u '$CASS_USER' -p '$CASS_PASS'"

Connected to loki at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.7 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
loki-superuser@cqlsh> select * from system.peers;

 peer          | data_center | host_id                              | preferred_ip | rack    | release_version | rpc_address   | schema_version                       | tokens
---------------+-------------+--------------------------------------+--------------+---------+-----------------+---------------+--------------------------------------+-------------------------
 172.26.71.109 |         dc1 | 50cc6d00-5ed7-470a-8e31-380599fbee80 |         null | default |          3.11.7 | 172.26.71.109 | e84b6a60-24cf-30ca-9b58-452d92911703 | {'1714995323702467864'}
 172.26.85.109 |         dc1 | 72275b36-3201-400a-9ae4-214fef137ba9 |         null | default |          3.11.7 | 172.26.85.109 | e84b6a60-24cf-30ca-9b58-452d92911703 | {'2311535293646110755'}

(2 rows)

至此,一个三节点的Cassandra集群部署完成。

总结

本文简单介绍了一下Cass Operator, 并且部署了一个三节点的Cassandra集群。后续的文章中,我们会介绍Cassandra监控以及Cassandra生产环境调优。

阅读 1.1k

kubernetes solutions
专注k8s,serverless,service mesh,devops

专注kubernetes,devops,aiops,service mesh。

1.4k 声望
2.7k 粉丝
0 条评论

专注kubernetes,devops,aiops,service mesh。

1.4k 声望
2.7k 粉丝
文章目录
宣传栏