概要
本記事では、Kubernetes クラスタ上に Redis を Master-Slave レプリケーション構成でデプロイする手順を解説します。Helm パッケージマネージャと Bitnami が提供する公式チャートを活用することで、PV 動的プロビジョニングを前提とした高速な環境構築を実現します。
前提条件
- Kubernetes 1.25 以上が稼働していること
- Helm 3.10 以上がインストール済みであること
- StorageClass「nfs」が利用可能であり、PVC 作成時に PV が自動的にプロビジョンされること
1. Bitnami Helm リポジトリの追加
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
2. StorageClass の確認
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs nfs-provisioner-01 Retain Immediate false 3d10h
3. Redis Master-Slave セットアップ
$ helm install redis-ha oci://registry-1.docker.io/bitnamicharts/redis \
--set global.storageClass=nfs \
--set architecture=replication
Pulled: registry-1.docker.io/bitnamicharts/redis:19.6.1
Digest: sha256:0d077ee5947e26645e3bc05e3d6e6bd62e24e3082cf5df43d89664099336a78d
NAME: redis-ha
LAST DEPLOYED: Mon Jul 8 03:42:57 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
4. Pod 起動状況の確認
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-ha-master-0 1/1 Running 0 10m
redis-ha-replicas-0 1/1 Running 0 10m
redis-ha-replicas-1 1/1 Running 0 8m50s
redis-ha-replicas-2 1/1 Running 0 6m57s
5. 認証情報の取得
$ export REDIS_PASS=$(kubectl get secret --namespace default redis-ha -o jsonpath="{.data.redis-password}" | base64 -d)
6. クライアント Pod の作成
$ kubectl run redis-cli --restart='Never' \
--env REDIS_PASSWORD=$REDIS_PASS \
--image docker.io/bitnami/redis:7.2.5-debian-12-r2 \
--command -- sleep infinity
pod/redis-cli created
7. レプリケーション状態の確認
$ kubectl exec -it redis-cli -- bash
I have no name!@redis-cli:/$ REDISCLI_AUTH="$REDIS_PASS" \
redis-cli -h redis-ha-master
redis-ha-master:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=redis-ha-replicas-0.redis-ha-headless.default.svc.cluster.local,port=6379,state=online,offset=924,lag=1
slave1:ip=redis-ha-replicas-1.redis-ha-headless.default.svc.cluster.local,port=6379,state=online,offset=924,lag=1
slave2:ip=redis-ha-replicas-2.redis-ha-headless.default.svc.cluster.local,port=6379,state=online,offset=924,lag=1
master_failover_state:no-failover
master_replid:239753ae516fad9e7fb6230d053861b80bc0bbb3
8. クラスタ外部からのアクセス(オプション)
$ kubectl port-forward --namespace default svc/redis-ha-master 6379:6379 &
$ REDISCLI_AUTH="$REDIS_PASS" redis-cli -h 127.0.0.1 -p 6379
9. 本番環境向けの推奨設定
Chart デフォルトではリソースリクエスト/リミットが設定されていないため、本番利用時は以下の値を workload に応じて設定してください。
master:
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi
replica:
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi