はじめに
Redisは、人気のあるNoSQLデータベースであり、複数の抽象データ構造をサポートするインメモリデータストアです。これらには、文字列、リスト、ハッシュ、セット、ストリームなどが含まれます。Redisは、可変データ構造にアクセスするための構文を提供し、複数のプロセスが共有方法でそれらを読み書きできるようにします。
Redisクラスターは、ノード間でデータを自動的にシャーディングするRedisインスタンスのセットです。クラスタを使用すると、ユーザーはデータセットをノード間で分割し、一部のノードに障害が発生した場合でもデータベースを実行し続けることができます。
このチュートリアルでは、ConfigMapとHelmを使用してKubernetesにRedisクラスターをデプロイする方法を説明します。
前提条件
- 2つ以上のノードで構成されるKubernetesクラスター
- ヘルム3がインストールされています
- kubectl1.14以降がインストールされています
ConfigMapを使用してKubernetesにRedisをデプロイする
次の手順では、RedisキャッシュとRedisインスタンスを含むポッドを構成する方法について説明します。
- テキストエディターを使用して、Redis構成を保存するConfigMapYAMLを作成します。
nano redis-conf.yaml
2. data.redis-config
でRedis構成を指定します セクション。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
上記の設定例では、 maxmemory
を設定しています ディレクティブであり、データセットに最大2MBのストレージを使用するようにRedisに指示します。 maxmemory-policy
ディレクティブは、メモリ制限に達したときに適用される手順を定義します。 allkeys-lru
まず、使用頻度の低い(LRU)キーを削除します。
3.ファイルを保存して終了します。
4.YAMLファイルを適用してConfigMapを作成します。
kubectl apply -f redis-conf.yaml
操作が成功したことをシステムが確認します。
5.Redisポッドマニフェストを作成します。
nano redis-pod.yaml
6.ポッド構成を指定します。
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: test-redis-config
items:
- key: redis-config
path: redis.conf
上記の例では、マニフェストは config
を定義しています ボリュームを作成し、 /redis-master
にマウントします ポッド上のディレクトリ。 spec.volumes.items
次に、セクションで redis-config
を公開します 以前に作成したConfigMapのキーをredis.conf
として ファイル。
7.ファイルを保存して終了します。
8.kubectlを使用してポッドマニフェストを適用します。
kubectl apply -f redis-pod.yaml
システムは、ポッドの作成が成功したことを確認します。
9.ポッドのステータスを確認します。
kubectl get pod
10.作成したポッドをkubectl exec
で入力します 。
kubectl exec -it redis -- redis-cli
Redisサーバーコンソールが表示されます:
11. PINGコマンドを使用して、サーバーがオンラインであるかどうかを確認します。
PING
サーバーがコンソールと通信する場合、サーバーは PONG
を返します。 答えとして。
ヘルムチャートを使用してKubernetesにRedisをデプロイする
Helmは、事前に作成されたHelmチャートを使用してRedisクラスターをセットアップする簡単な方法を提供します。
1.インストールするRedisチャートを含むHelmリポジトリを追加します。
helm repo add [repo-name] [repo-address]
この記事では、Bitnamiリポジトリで利用可能なRedisチャートを使用しています。
2.ローカルHelmリポジトリを更新します。
helm repo update
3. helm install
を使用します チャートをインストールします。基本的なコマンドは次のとおりです。
helm install redis-test bitnami/redis
重要: チャートをMinikubeにインストールすると、ポッドが CrashLoopBackOff
でスタックすることは珍しくありません。 バインドされていないボリュームクレームによるイベント。これを防ぐには、 --set
を使用します オプションを選択し、 persistence.storageClass
を設定します nfs-client
へ 両方のポッド用。
Redisはデフォルトで非管理ボリューム権限でデプロイされているため、Redisポッドはサーバーと通信できない場合があります。 volumePermissions
を設定して、この問題を解決してください true
。
最後のhelm install
コマンドは次のようになります:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4.Redisパスワードを環境変数としてエクスポートします。
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5.データベースへのアクセスに使用するRedisクライアントポッドを作成します。
kubectl run --namespace default redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image docker.io/bitnami/redis:6.2.5-debian-10-r63 --command -- sleep infinity
システムはredis-client
の作成を確認します ポッド。
6. kubectl exec
を使用してクライアントポッドに入ります 。
kubectl exec --tty -i redis-client --namespace default -- bash
クライアントコンソールが表示されます。
7.次のredis-cli
を使用します Redisマスターインスタンスにアクセスするコマンド:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
マスターインスタンスのコンソールが表示されます。
8.レプリカにアクセスするには、同じコマンドを使用しますが、ターゲットを変更します。
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. PING
を使用します サーバーとの接続をテストするコマンド。
PING
PONG
応答は、サーバーがリッスンしていることを確認します。