K8ssandra入門-詳細記錄在Linux上部署K8ssandra到Kubernetes

1 什麼是K8ssandra

Cassandra是一款非常優秀的開源的分佈式NoSQL數據庫,被許多優秀的大公司採用,具有高可用、彈性擴展、性能好等特點。

正應Cassandra的優勢,我們經常需要在雲上服務使用,則需要部署Cassandra到K8s上,這就有了K8ssandra。K8ssandra不僅幫助我們可以快速可靠地在Kubernetes上部署Cassandra,同時提供了許多組件,如監控、備份、同步、訪問等。而這些都是一個Production-Ready的產品不可或缺的。

K8ssandra的組件架構圖如下:

  • Cass-operator:保證整個集羣正常運行;
  • Reaper:保證一致性的同步工具;
  • Medusa:數據備份工具,支持S3、GCP Cloud Storage等;
  • Stargate:對數據訪問提供API;
  • Prometheus+Grafana:雲原生的常用監控組件。

2 安裝K8ssandra

2.1 安裝Kubenetes

如何在Ubuntu上通過Minikube快速啓動一個Kubernetes,在文章《服務網格Istio入門-詳細記錄Kubernetes安裝Istio並使用》已經有詳細的介紹,這裏不再贅述。爲了更好的兼容性,我們指定了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超級用戶的用戶名和密碼

$ 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的相關資源:

3 查看監控

我們對外暴露Grafana服務來看看:

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

找到對應的NodePort的端口30348,訪問:http://外網IP:30348

賬號:admin/admin123

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

4 總結

K8ssandra真是一個不錯的開源項目,後續再介紹如何在開發中通過K8ssandra使用Cassandra吧。

代碼請查看:https://github.com/LarryDpk/pkslow-samples

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章