简介

容器是一种风行的技术,用于减速当今的利用程序开发。多亏了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.16kubectl 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.17kubectl apply -f https://raw.githubusercontent.com/datastax/cass-operator/v1.4.1/docs/user/cass-operator-manifests-$K8S_VER.yamlnamespace/cass-operator createdserviceaccount/cass-operator createdsecret/cass-operator-webhook-config createdcustomresourcedefinition.apiextensions.k8s.io/cassandradatacenters.cassandra.datastax.com createdclusterrole.rbac.authorization.k8s.io/cass-operator-webhook createdclusterrolebinding.rbac.authorization.k8s.io/cass-operator-webhook createdrole.rbac.authorization.k8s.io/cass-operator createdrolebinding.rbac.authorization.k8s.io/cass-operator createdservice/cassandradatacenter-webhook-service createddeployment.apps/cass-operator createdvalidatingwebhookconfiguration.admissionregistration.k8s.io/cassandradatacenter-webhook-registration created

查看operator运行状态:

kubectl -n cass-operator get pods --selector name=cass-operatorNAME                            READY   STATUS    RESTARTS   AGEcass-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/v1kind: StorageClassmetadata:  name: server-storageprovisioner: kubernetes.io/aws-ebsparameters:  type: gp2volumeBindingMode: WaitForFirstConsumerreclaimPolicy: Delete

将该storage class 部署到集群中。

3:部署Cassandra集群

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

apiVersion: cassandra.datastax.com/v1beta1kind: CassandraDatacentermetadata:  name: dc1  namespace: cass-operatorspec:  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=lokiNAME                     READY   STATUS    RESTARTS   AGEloki-dc1-default-sts-0   2/2     Running   0          6m33sloki-dc1-default-sts-1   2/2     Running   0          6m33sloki-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 statusDatacenter: dc1===============Status=Up/Down|/ State=Normal/Leaving/Joining/Moving--  Address        Load       Tokens       Owns (effective)  Host ID                               RackUN  172.26.71.109  89.44 KiB  1            96.8%             50cc6d00-5ed7-470a-8e31-380599fbee80  defaultUN  172.26.85.109  70.19 KiB  1            84.4%             72275b36-3201-400a-9ae4-214fef137ba9  defaultUN  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生产环境调优。