Kubernetes クラスタで Bitnami Redis Helm Chart を用いた Master-Slave レプリケーション環境の構築手順

概要

本記事では、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

タグ: Kubernetes Helm redis master-slave-replication bitnami-chart

7月6日 00:38 投稿