1. ホーム
  2. Web プログラミング
  3. その他全般

K8sandra入門チュートリアル - Linux上のKubernetesにK8sandraをデプロイする

2022-01-02 06:50:49

1 K8sandraとは

Cassandraはオープンソースの分散型NoSQLデータベースで、高可用性、弾性スケーリング、優れたパフォーマンスなど、多くの偉大な大企業で使用されています。

Cassandraが有利なように、クラウド上でサービスを利用する必要がある場合、CassandraをK8sにデプロイする必要があることが多く、K8sandraにたどり着きました。k8sandraはKubernetes上にCassandraを迅速かつ確実にデプロイするだけではなく、監視、バックアップ、同期、アクセスなど、多くのコンポーネントを提供することが可能です。そしてこれらはすべて、Production-Readyな製品に不可欠なものです。

K8sandraのコンポーネント・アーキテクチャは下図の通りです。

  • Cass-operator:クラスタ全体が正常に機能していることを確認します。
  • Reaper:整合性を確保するための同期ツール。
  • Medusa:S3、GCP Cloud Storageなどをサポートしたデータバックアップツール。
  • スターゲイト データアクセスのためのAPI。
  • Prometheus+Grafana: クラウドにネイティブな共通監視コンポーネント。

2 K8sandraのインストール

2.1 Kubenetesのインストール

Ubuntu上でKubernetesを構築する方法は、以下の記事で紹介されています。 VirtualBox+Ubuntu16によるKubernetesクラスタ構築の実装について 記事 "Kubernetes Cluster Implementation on VirtualBox+Ubuntu16" に詳しく書かれているので、ここでは割愛します。互換性を高めるために、以下のコマンドで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のインストール

K8sandraをデプロイするためにHelmを使用する必要があるので、以下のようにHelm3をダウンロードします。

# Download the installation package
curl -LO https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz
# Decompress
tar -zxvf helm-v3.7.0-linux-amd64.tar.gz
# Move to the bin directory
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 

K8sandra関連のパッケージは、以下のサイトで調べてください。

$ 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...                       

k8sandra/k8sandraをインストールし、完了です。

2.3 Helmを使ったK8sandraのインストール

HelmはChart+Valueの管理で、いくつかの変数を入れるyamlファイル(k8sandra-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

K8sandraをインストールします。

$ 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を確認する。

K8sandraスーパーユーザーのユーザー名とパスワードを取得します。

$ 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 ノードの追加

以下のようにk8ssandra-values.yamlを直接修正して、高可用性と容量のためにさらにCassandra Nodeを作成します。

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

ポート30348で対応するNodePortを探し、http://外网IP:30348 を訪問します。

アカウント: admin/admin123

インターフェイスは以下のとおりで、良好な監視インターフェイスを提供します。

4 まとめ

K8sandraは本当に良いオープンソース・プロジェクトなので、K8sandraを使った開発でCassandraを使う方法を追って説明します。

コードは、こちらをご覧ください。 https://github.com/LarryDpk/pkslow-samples

参考

KubernetesにおけるApache Cassandraの運用について

K8ssandra スタートアップ

GKEにK8sandraをインストールする

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

K8sandraのチュートリアルでLinuxのKubernetesにK8sandraをデプロイする手順について紹介した記事ですが、これが全てです。K8sandraのKubernetesへのデプロイについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。