はじめに
こちらの記事で実際にKubernetes環境にKubeBlocksを導入し、DBaaSの基盤を構築しました。
前回の記事ではKubeBlocksを利用してDBaaS基盤上にMySQLを構築しました。
今回は、KubeBlocksを利用してNoSQLのインメモリデータベースであるRedisを構築していきます。
導入環境構成図
以下の図は、DBaaS基盤上にRedisを導入する環境の構成図です。
「KubeBlocksオペレーター」はこちらの記事で構築しました。
本記事では、赤丸で囲まれた「DB(Redis)」の構築を対象とします。
Redisはすべてのデータをメモリ上で処理する「インメモリデータベース」の一種で、NoSQLに分類されます。
ディスク(SSD/HDD)にアクセスする一般的なデータベースと比較して圧倒的に高速なのが特徴で、主にWebサイトやアプリの高速化(キャッシュ)や、リアルタイム処理に利用されるDBになります。

導入環境構成図
Redisの構築方法
KubeBlocksを使用してRedisを構築する手順をご紹介します。
今回は最もシンプルな、1台のサーバーでRedisを稼働させるスタンドアロン構成で作成していきます。
前提条件
- KubeBlocksが構築済みであること
- KubeBlocksによってデフォルトでインストールされるRedisアドオン(以下コマンド結果のredis 1.0.1)が有効になっていること
- 以下のkbcliコマンドで有効化されているアドオンを確認することができます。
kbcli addon list # 出力例 NAME VERSION PROVIDER STATUS AUTO-INSTALL qdrant 1.0.1 community Disabled false rabbitmq 1.0.1 community Disabled false apecloud-mysql 1.0.1 community Enabled true etcd 1.0.1 community Enabled true kafka 1.0.1 community Enabled true mongodb 1.0.1 community Enabled true mysql 1.0.1 community Enabled true postgresql 1.0.1 community Enabled true redis 1.0.1 community Enabled true
- 以下のkbcliコマンドで有効化されているアドオンを確認することができます。
Namespeaceの作成
まずはRedisをデプロイするNamespeaceを作成します。
kubectl create namespace redis
# 出力例
namespace/redis created
デフォルトユーザー認証用Secretの作成
Redisのデフォルトユーザー用のユーザー名・パスワードを設定したSecretを作成します。
kubectl create secret generic custom-redis-root-secret \
--from-literal=username='default' \
--from-literal=password='<任意の値>' \
-n redis
# 出力例
secret/custom-redis-root-secret created
※Redis作成時に本手順で作成したSecretを指定することで、デフォルトユーザーのパスワードを任意の値で設定することができます。
Secretの指定がない場合は、KubeBlocksがデフォルトユーザー用のパスワードを自動発行します。
Redisの作成
MySQLクラスター構築時と同様に、KubeBlocksのカスタムリソースである「Cluster」のマニフェストを適用し、Redisを作成します。
cat <<EOF | kubectl apply -f -
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: redis-cluster
namespace: redis
spec:
terminationPolicy: Delete
clusterDef: redis
topology: standalone
componentSpecs:
- name: redis
replicas: 1
systemAccounts:
- name: default
secretRef:
name: custom-redis-root-secret
namespace: redis
serviceVersion: 8.0.3
disableExporter: false
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
EOF
# 出力例
cluster.apps.kubeblocks.io/mycluster created
clusterDef: redis- Redisアドオンが提供するRedisの構成テンプレートを、作成するDBクラスターのベースとして指定する設定です。
topology: standalone- Redisを単一のRedisサーバーインスタンスで構成されるスタンドアロンクラスターとして起動する設定です。
terminationPolicy: Delete- クラスターを削除した際、関連するデータも一緒に削除する設定です。
systemAccounts- Redisのデフォルトユーザーの認証情報(ユーザー名・パスワード)に、事前に作成したSecretを割り当てる設定です。
volumeClaimTemplates- DBのデータを保存するためのPVの設定です。
Redisの作成確認
Redis作成コマンド実行後、以下のコマンドでクラスター・Podのステータスを確認します。ステータスがRunningになっていれば正常に動作しています。
kubectl get cluster redis-cluster -n redis
# 出力例
NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE
redis-cluster redis Delete Running 110s
kubectl get pods -n redis
# 出力例
NAME READY STATUS RESTARTS AGE
redis-cluster-redis-0 4/4 Running 0 2m15s
動作確認
Redisへの接続テストを行います。
まず、作成したRedisのエンドポイント(Service名)を確認します。
kubectl get svc -l app.kubernetes.io/instance=redis-cluster -n redis
# 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-cluster-redis-redis ClusterIP 10.43.163.160 <none> 6379/TCP 3m
kubectl runコマンドでRedisクライアント用のPodを作成し、コンテナ内でシェルを起動します。
kubectl run redis-client -n redis --rm -i --tty --image=redis:8.0.3 --restart=Never -- bash
# 出力例
If you don't see a command prompt, try pressing enter.
root@redis-client:/data#
redis-clientコマンドを使用し、確認したRedisのエンドポイント、「デフォルトユーザー認証用Secretの作成」で作成したユーザ名・パスワードを指定して接続します。
root@redis-client:/data# redis-cli -h redis-cluster-redis-redis.redis.svc.cluster.local -p 6379 --user default --pass xxxxx
# 出力例
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-cluster-redis-redis.redis.svc.cluster.local:6379>
Redisに正常に接続できているか、以下のPINGコマンドを使用して確認します。
redis-cluster-redis-redis.redis.svc.cluster.local:6379> PING
# 出力例
PONG
「PONG」が出力されれば、正常に接続できています。
続いて、データの登録・取得が行えるかを確認します。
キー「test」に値「”Hello World” 」を登録します。
redis-cluster-redis-redis.redis.svc.cluster.local:6379> SET test "Hello World"
# 出力例
OK
登録したデータが正しく取得できるかを確認します。
redis-cluster-redis-redis.redis.svc.cluster.local:6379> GET test
# 出力例
"Hello World"
登録した「”Hello World” 」という文字列が出力されれば、Redisへのデータ登録と取得は正常に行えています。
これでRedisの構築と動作確認は完了になります。
おわりに
前々回構築したKubeBlocksを使用し、実際にRedisの構築から接続テストを行うまでの流れをご紹介しました。
前回のMySQL構築に引き続き、容易にRedisを構築できることを体感できたのではないでしょうか。
今回は最もシンプルな「Redisサーバ1台のスタンドアロン構成」として構築しましたが、KubeBlocksなら本番環境向けの冗長構成も、マニフェストの設定を少し変更するだけで簡単に構築することができます。
KubeBlocksは様々なDBをサポートしているため、他のDBも同様の方法で手軽に導入することができます。
本記事が、Kubernetes上でDBを構築する際の選択肢として、KubeBlocksを検討するきっかけになれば幸いです。
参考文献
https://kubeblocks.io/docs/preview/kubeblocks-for-redis/03-topologies/01-standlone
https://kubeblocks.io/docs/preview/kubeblocks-for-redis/06-custom-secret/01-custom-secret


