关于cassandra:使用-DataStax-Cass-Operator-管理云原生Apache-Cassandra

3次阅读

共计 5242 个字符,预计需要花费 14 分钟才能阅读完成。

简介

容器是一种风行的技术,用于减速当今的利用程序开发。多亏了 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 生产环境调优。

正文完
 0