K8sandra入門チュートリアル - Linux上のKubernetesにK8sandraをデプロイする
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の運用について
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へのデプロイについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。
関連
-
近年のImagenetデータセットに基づくPytorchの画像分類モデルについてまとめる。
-
Git.gitignore開発必携アドバイス集
-
Fiddlerを用いたソフトウェアテストにより、脆弱なネットワークテストを実現
-
Win10でVScodeのリモート開発 ssh-remote(パスワード不要のログイン)を設定する
-
WSL2の他ホストへのVSCodeリモート接続問題
-
MATLABチュートリアル データ操作 変数操作と行列表現 詳細
-
5G帯の精緻化
-
[解決済み】ターミナルで"-"破線のファイル名を開くには?
-
[解決済み】スタイルシートとして解釈されるリソースがMIMEタイプtext/htmlで転送される(Webサーバーとは関係ないようです)。
-
[解決済み】複数のgitコミットを元に戻すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
OAuth 1.0から2.1への展開の道のり
-
Burp Suite Proのインストールと設定のチュートリアルの詳細
-
ゲートウェイ・ゲートウェイ原理の徹底分析
-
HDFSのNamenode高可用性メカニズムを見てみよう
-
roolupを使ったライブラリの構築(ステップバイステップの実装)
-
Visual Studioを使ったファイル差分比較の問題点まとめ
-
Centos7でVscodeが反応しない不具合とその解決方法
-
12 バックエンド管理システム開発のためのフロントエンドフレームワーク(要約)
-
[解決済み】git error: failed to push some refs to remote
-
自律走行技術のV2X技術の紹介