简介
容器是一种流行的技术,用于加速当今的应用程序开发。多亏了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生产环境调优。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。