K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

作者:南瓜慢说官方网站 时间:2022-04-02 03:12:59 

1 什么是K8ssandra

Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用、弹性扩展、性能好等特点。

K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

正应Cassandra的优势,我们经常需要在云上服务使用,则需要部署Cassandra到K8s上,这就有了K8ssandra。K8ssandra不仅帮助我们可以快速可靠地在Kubernetes上部署Cassandra,同时提供了许多组件,如监控、备份、同步、访问等。而这些都是一个Production-Ready的产品不可或缺的。

K8ssandra的组件架构图如下:

K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

  • Cass-operator:保证整个集群正常运行;

  • Reaper:保证一致性的同步工具;

  • Medusa:数据备份工具,支持S3、GCP Cloud Storage等;

  • Stargate:对数据访问提供API;

  • Prometheus+Grafana:云原生的常用监控组件。

2 安装K8ssandra

2.1 安装Kubenetes

如何在Ubuntu上搭建Kubernetes,在文章《VirtualBox+Ubuntu16搭建Kubernetes集群的实现》已经有详细的介绍,这里不再赘述。为了更好的兼容性,我们指定了Kubernetes的版本,命令如下:


minikube start --driver=none --kubernetes-version=v1.19.13

因为要用到PVC,我们创建一个StorageClass:


$ kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml

2.2 安装helm3

我们需要使用Helm来部署K8ssandra,下载Helm3如下:


# 下载安装包
curl -LO https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.7.0-linux-amd64.tar.gz
# 移动到bin目录
mv linux-amd64/helm /usr/local/bin/helm

添加Helm的仓库:


helm repo add k8ssandra https://helm.k8ssandra.io/stable

$ helm repo list
NAME            URL                            
k8ssandra       https://helm.k8ssandra.io/stable
traefik         https://helm.traefik.io/traefik

查找一下K8ssandra相关的包:


$ helm search repo k8ssandra
NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                      
k8ssandra/k8ssandra             1.3.1                           Provisions and configures an instance of the en...
k8ssandra/k8ssandra-common      0.28.4                          Helper library containing functions used by man...
k8ssandra/k8ssandra-operator    0.31.0          1.0.0           Kubernetes operator which handles the provision...
k8ssandra/backup                0.26.0                          Creates a CassandraBackup custom resource insta...
k8ssandra/cass-operator         0.31.0          1.8.0           Kubernetes operator which handles the provision...
k8ssandra/medusa-operator       0.30.1          0.1.0           Installs and configures the Medusa Operator for...
k8ssandra/reaper-operator       0.32.1          0.1.0           Configures and installs the Reaper Operator for...
k8ssandra/restore               0.27.1                          Creates a CassandraRestore custom resource inst...

我们安装k8ssandra/k8ssandra就可以了。

2.3 用Helm安装K8ssandra

Helm是一个Chart+Value的管理方式,我们准备一个yaml文件(k8ssandra-values.yaml)来放一些变量:


cassandra:
 version: "4.0.0"
 cassandraLibDirVolume:
   storageClass: local-path
   size: 5Gi
 allowMultipleNodesPerWorker: true
 heap:
   size: 1G
   newGenSize: 1G
 resources:
   requests:
     cpu: 1000m
     memory: 2Gi
   limits:
     cpu: 1000m
     memory: 2Gi
 datacenters:
 - name: dc1
   size: 1
   racks:
   - name: default
kube-prometheus-stack:
 grafana:
   adminUser: admin
   adminPassword: admin123
stargate:
 enabled: true
 replicas: 1
 heapMB: 256
 cpuReqMillicores: 200
 cpuLimMillicores: 1000

安装K8ssandra:


$ helm install -f k8ssandra-values.yaml k8ssandra k8ssandra/k8ssandra
NAME: k8ssandra
LAST DEPLOYED: Thu Sep 30 21:20:49 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1

做一些必要的检查如下:


$ helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
k8ssandra       default         1               2021-09-30 21:20:49.409672869 +0800 CST deployed        k8ssandra-1.3.1            

$ kubectl get cassandradatacenters
NAME   AGE
dc1    4m34s

$ kubectl describe CassandraDataCenter dc1 | grep "Cassandra Operator Progress:"
 Cassandra Operator Progress:  Ready

检查一下Pod和Service:

K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

获取K8ssandra超级用户的用户名和密码


$ kubectl get secret k8ssandra-superuser -o jsonpath="{.data.username}" | base64 --decode ; echo
k8ssandra-superuser

$ kubectl get secret k8ssandra-superuser -o jsonpath="{.data.password}" | base64 --decode ; echo
TNE5xOk45C1aQsj29qxw

2.4 增加节点

我们为了高可用和容量,创建更多的Cassandra Node,直接修改k8ssandra-values.yaml如下:


cassandra:
 version: "4.0.0"
 cassandraLibDirVolume:
   storageClass: local-path
   size: 5Gi
 allowMultipleNodesPerWorker: true
 heap:
   size: 1G
   newGenSize: 1G
 resources:
   requests:
     cpu: 1000m
     memory: 2Gi
   limits:
     cpu: 1000m
     memory: 2Gi
 datacenters:
 - name: dc1
   size: 3
   racks:
   - name: racks1
   - name: racks2
   - name: racks3
kube-prometheus-stack:
 grafana:
   adminUser: admin
   adminPassword: admin123
stargate:
 enabled: true
 replicas: 1
 heapMB: 256
 cpuReqMillicores: 200
 cpuLimMillicores: 1000

修改完之后,升级配置:


$ helm upgrade -f k8ssandra-values.yaml k8ssandra k8ssandra/k8ssandra
Release "k8ssandra" has been upgraded. Happy Helming!
NAME: k8ssandra
LAST DEPLOYED: Fri Oct  1 00:40:08 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2

查看Kubernetes的相关资源:

K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

3 查看监控

我们对外暴露Grafana服务来看看:


kubectl expose deployment k8ssandra-grafana --type=NodePort --name=grafana-out

找到对应的NodePort的端口30348,访问:http://外网IP:30348

账号:admin/admin123

界面如下,提供良好的监控界面:

K8ssandra入门教程之Linux上部署K8ssandra到Kubernetes的过程

4 总结

K8ssandra真是一个不错的开源项目,后续再介绍如何在开发中通过K8ssandra使用Cassandra吧。

代码请查看:https://github.com/LarryDpk/pkslow-samples

Reference:

Apache Cassandra Operations in Kubernetes

K8ssandra Get Started

Install K8ssandra on GKE

K8ssandra Helm Chart

用Helm部署Kubernetes应用,支持多环境部署与版本回滚

附:

使用到的镜像:


root@k8ssandra:~# docker images | sort | grep -v REPOSITORY | grep -v k8s.gcr.io
alpine                                                   3.12.2            b14afc6dfb98   9 months ago    5.57MB
busybox                                                  1.33.1            16ea53ea7c65   2 weeks ago     1.24MB
busybox                                                  latest            16ea53ea7c65   2 weeks ago     1.24MB
datastax/cass-config-builder                             1.0.4             907e52ff2f78   4 months ago    354MB
gcr.io/k8s-minikube/storage-provisioner                  v5                6e38f40d628d   6 months ago    31.5MB
grafana/grafana                                          7.3.5             71716d95fc52   9 months ago    187MB
jettech/kube-webhook-certgen                             v1.5.0            344297e197b6   11 months ago   44.7MB
k8ssandra/cass-management-api                            3.11.10-v0.1.27   e88cc3a8ce75   2 months ago    877MB
k8ssandra/cass-management-api                            4.0.0-v0.1.28     59b9869dd160   7 weeks ago     726MB
k8ssandra/cass-operator                                  v1.7.1            dd57363b0794   4 months ago    49.4MB
k8ssandra/k8ssandra-tools                                latest            43e4bd91cf9b   42 hours ago    49MB
k8ssandra/reaper-operator                                v0.3.3            b4cb9084a5e5   2 months ago    45.9MB
k8ssandra/system-logger                                  9c4c3692          4dda0db106cb   4 months ago    5.66MB
kiwigrid/k8s-sidecar                                     1.1.0             f4bb3bf1ddc7   11 months ago   82MB
quay.io/prometheus-operator/prometheus-config-reloader   v0.44.0           73bc771f8028   10 months ago   13.4MB
quay.io/prometheus-operator/prometheus-operator          v0.44.0           f5ab8d7a1a64   10 months ago   42.6MB
quay.io/prometheus/prometheus                            v2.22.1           7cc97b58fb0e   10 months ago   168MB
rancher/local-path-provisioner                           v0.0.20           933989e1174c   2 months ago    35MB
stargateio/stargate-3_11                                 v1.0.29           c276fffd9964   3 months ago    537MB
stargateio/stargate-4_0                                  v1.0.29           be4bae3748e1   3 months ago    546MB
thelastpickle/cassandra-reaper                           2.3.1             8ad2c2784ead   2 months ago    418MB

来源:https://www.pkslow.com/archives/k8ssandra

标签:K8ssandra,Kubernetes
0
投稿

猜你喜欢

  • 解决Pycharm下面出现No R interpreter defined的问题

    2021-03-03 01:33:28
  • 简单实现python收发邮件功能

    2022-03-08 08:02:40
  • python生成n个元素的全组合方法

    2023-11-10 20:35:08
  • SQL Server如何保证可空字段中非空值唯一

    2011-02-24 16:44:00
  • python实现生成字符串大小写字母和数字的各种组合

    2021-02-09 07:33:00
  • python循环之彩色圆环实现示例

    2022-02-24 07:22:32
  • 浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置

    2021-10-05 06:50:08
  • Django Python 获取请求头信息Content-Range的方法

    2022-09-09 07:04:53
  • 详解Python中的__new__、__init__、__call__三个特殊方法

    2023-03-31 00:28:52
  • sql server2008调试存储过程的完整步骤

    2024-01-22 04:12:57
  • python类参数self使用示例

    2023-05-27 17:15:18
  • js jq 单击和双击区分示例介绍

    2024-04-17 10:09:43
  • python排序算法之希尔排序

    2023-03-03 13:50:48
  • 使用Perl DBI操作MySQL的一些建议

    2024-01-16 11:20:55
  • 利用python进行数据加载

    2022-05-11 19:55:00
  • Python实现的多项式拟合功能示例【基于matplotlib】

    2022-02-18 14:44:08
  • python tkinter图形界面代码统计工具

    2021-01-29 15:21:39
  • 小小聊天室Python代码实现

    2022-05-27 15:23:44
  • PHP实现执行外部程序的方法详解

    2023-09-08 02:03:46
  • 用Dreamweaver设计限时自动关闭网页

    2009-07-10 13:13:00
  • asp之家 网络编程 m.aspxhome.com