「クラウドネイティブ」Redis on K8s オーケストレーションの導入解説と実践的な運用

「クラウドネイティブ」Redis on K8s オーケストレーションの導入解説と実践的な運用

1. 概要

REmote DIctionary Server (Redis) は、Salvatore Sanfilippo によって作成されたキー値ストレージ システムです。これはクロスプラットフォームの非リレーショナル データベースです。

Redis には、マスタースレーブモード、Sentinel モード、クラスターモードの 3 つのクラスターモードがあります。この記事では、これら 3 つのモードの展開とオーケストレーションについて紹介し、実装します。

2. Redis マスタースレーブモードオーケストレーションとデプロイメントの実践的な操作

アドレス: https://artifacthub.io/packages/helm/bitnami/redis

1) チャートパッケージをダウンロードする

 helmリポジトリbitnamiを追加しますhttps://charts.bitnami.com/bitnami

helm pull bitnami / redis --version 17.3.7

tar - xf redis - 17.3.7.tgz

2) イメージを構築する

ここではイメージを再構築せず、リモート イメージにタグを付けてローカル ハーバー リポジトリにプッシュし、イメージのダウンロードを高速化します。画像の作成方法がわからない場合は、プライベートメッセージを送信するか、メッセージを残してください。

 docker pull docker .io / bitnami / redis : 7.0.5 - debian - 11 - r7

# タグ
docker タグ docker .io / bitnami / redis : 7.0 .5 - debian - 11 - r7 myharbor .com / bigdata / redis : 7.0 .5 - debian - 11 - r7

# イメージをローカルの Harbor リポジトリにプッシュします
docker push myharbor .com / bigdata / redis : 7.0.5 - debian - 11 - r7

3) YAMLレイアウトを変更する

  • redis/テンプレート/マスター/pv.yaml

次の内容を含む新しい pv.yaml ファイルを追加します。

 { { -範囲.Values ​​.master .persistence .local } }
---
APIバージョン: v1
種類:永続ボリューム
メタデータ:
名前: { { .name } }
ラベル:
名前: { { .name } }
仕様:
ストレージクラス名: { { $ .Values ​​.master .persistence .storageClass } }
容量
ストレージ: { { $ .Values ​​.master .persistence .size } }
アクセスモード:
-一度だけ読み書き可能
地元
パス: { { .path } }
ノードアフィニティ:
必須
ノードセレクタ用語:
-一致する表現:
-キー: kubernetes.io/ホスト名
演算子:

- { { 。ホスト} }
---
{ { -終わり} }
  • redis/テンプレート/レプリカ/pv.yaml

次の内容を含む新しい pv.yaml ファイルを追加します。

 { { -範囲.Values ​​.replica .persistence .local } }
---
APIバージョン: v1
種類:永続ボリューム
メタデータ:
名前: { { .name } }
ラベル:
名前: { { .name } }
仕様:
ストレージクラス名: { { $ .Values ​​.replica .persistence .storageClass } }
容量
ストレージ: { { $ .Values ​​.replica .persistence .size } }
アクセスモード:
-一度だけ読み書き可能
地元
パス: { { .path } }
ノードアフィニティ:
必須
ノードセレクタ用語:
-一致する表現:
-キー: kubernetes.io/ホスト名
演算子:

- { { 。ホスト} }
---
{ { -終わり} }
  • redis/values.yaml
グローバル:
レディス:
パスワード: "123456"

...

画像
レジストリ: myharbor.com
リポジトリ: bigdata / redis
タグ: 7.0 .5 - debian - 11 - r7

マスター
カウント: 1
持続性:
有効: true
サイズ: 8Gi
ストレージクラス: "local-redis-storage"
地元
-名前: redis - 0
ホスト: "local-168-182-110"
パス: "/opt/bigdata/servers/redis/data/data1"

レプリカ:
レプリカ数: 2
持続性:
有効: true
サイズ: 8Gi
ストレージクラス: "local-redis-storage"
地元
-名前: redis - 1
ホスト: "local-168-182-111"
パス: "/opt/bigdata/servers/redis/data/data1"
-名前: redis - 2
ホスト: "local-168-182-112"
パス: "/opt/bigdata/servers/redis/data/data1"

4) 展開を開始する

 # ストレージディレクトリを作成する
mkdir / opt / bigdata / servers / redis / data / data1

# まず構文をチェックする
ヘルムリント./redis

# インストールを開始する
helm で redis をインストールします。/redis -n redis --create-namespace

注記

改訂: 1
テストスイート:なし
注記:
チャート名: redis
チャートバージョン: 17.3.7
アプリバージョン: 7.0.5

**チャート展開されるまでしばらくお待ちください**

Redis® は、クラスター内から次の DNS 名アクセスできます

redis -読み取り/書き込み操作用のマスター.redis .svc .cluster .local (ポート6379 )
redis -読み取り専用操作用のレプリカ.redis .svc .cluster .local (ポート6379 )



パスワードを取得するには、次を実行します:

REDIS_PASSWORD をエクスポートします $ ( kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)

Redis® サーバーに接続するには:

1.クライアントとして使用できる Redis® ポッドを実行します

kubectl run --namespace redis redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command --sleep infinity

ポッドに接続するには、次のコマンドを使用します

kubectl exec --tty -i redis-client \
--namespace redis --bash

2. Redis® CLI を使用して接続します
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis -マスター
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis -レプリカ

クラスターの外部からデータベースに接続するには、次のコマンドを実行します

kubectl ポート転送--namespace redis svc/redis-master 6379:6379 &
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h 127.0 .0 .1 - p 6379

5) テスト検証

 kubectl get pods  svc - n redis - wide を実行します。 

 # マスターにログインし、読み取りと書き込みが可能
kubectl exec - it redis -マスター- 0 - n redis -- redis-cli -h redis-master -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)

# スレーブにログイン、読み取り専用
kubectl exec - it redis -マスター- 0 - n redis -- redis-cli -h redis-replicas -a $(kubectl get secret --namespace redis redis -o jsonpath="{.data.redis-password}" | base64 -d)

6) アンインストール

 helm アンインストール redis - sentinel - n redis - sentinel
# nsを削除
kubectl削除ns redis -センチネル--force
# PVを削除
kubectl で pvを削除します`kubectl で pv を取得します| grep ^ redis -| awk '{print $1}' ` --force

rm - fr / opt / bigdata /サーバー/ redis /データ/ data1 /*

3. Redis Sentinel モードのオーケストレーションとデプロイメントの実践的な操作

マスタースレーブモードの欠点は、可用性が高くないことです。マスターに障害が発生すると、Redis は外部書き込み操作を提供できなくなるため、Sentinel が誕生しました。

1) イメージを構築する

ここでもイメージが再構築されます。イメージの構築方法がわからない場合は、コメントの下にメッセージを残してください。ここでは、リモート イメージをローカル ハーバーにプッシュするだけです。

 docker pull docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6
# タグ
docker タグ docker.io/bitnami/redis-sentinel:7.0.5-debian-11-r6 myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r6
# 押す
docker push myharbor.com/bigdata/redis-sentinel:7.0.5-debian-11-r6

2) YAMLレイアウトを変更する

  • redis-sentinel/値.yaml
レプリカ:
# replica .replicaCountは sentinel .quorumと同じです
レプリカ数: 3
ストレージクラス: "local-redis-storage"
地元
-名前: redis - 0
ホスト: "local-168-182-110"
パス: "/opt/bigdata/servers/redis/data/data1"
-名前: redis - 1
ホスト: "local-168-182-111"
パス: "/opt/bigdata/servers/redis/data/data1"
-名前: redis - 2
ホスト: "local-168-182-112"
パス: "/opt/bigdata/servers/redis/data/data1"

センチネル:
有効: true
画像
レジストリ: myharbor.com
リポジトリ: bigdata / redis - sentinel
タグ: 7.0 .5 - debian - 11 - r6
定足数: 3
  • redis-sentinel/テンプレート/レプリカ/pv.yaml

次の内容を含む新しい pv.yaml ファイルを追加します。

 { { -範囲.Values ​​.sentinel .persistence .local } }
---
APIバージョン: v1
種類:永続ボリューム
メタデータ:
名前: { { .name } }
ラベル:
名前: { { .name } }
仕様:
ストレージクラス名: { { $ .Values ​​.sentinel .persistence .storageClass } }
容量
ストレージ: { { $ .Values ​​.sentinel .persistence .size } }
アクセスモード:
-一度だけ読み書き可能
地元
パス: { { .path } }
ノードアフィニティ:
必須
ノードセレクタ用語:
-一致する表現:
-キー: kubernetes.io/ホスト名
演算子:

- { { 。ホスト} }
---
{ { -終わり} }

3) 展開を開始する

 # ストレージディレクトリを作成する
mkdir -p /opt/bigdata/servers/redis/data/data1

helm で redis-sentinel をインストールします。/redis-sentinel -n redis-sentinel --create-namespace

注記

名前: redis - sentinel
最終配備: 2022年114金曜日22:42:52
名前空間: redis - sentinel
ステータス:展開済み
改訂: 1
テストスイート:なし
注記:
チャート名: redis
チャートバージョン: 17.3.7
アプリバージョン: 7.0.5

**チャート展開されるまでしばらくお待ちください**

Redis® には、クラスター内から次の DNS 名ポート6379経由でアクセスできます

読み取り専用操作の場合は redis - sentinel .redis - sentinel .svc .cluster .local

読み取り/書き込み操作の場合はまず上記と同じドメイン名を使用してポート26379利用可能な Redis® Sentinelクラスターにアクセスします。



パスワードを取得するには、次を実行します:

REDIS_PASSWORD をエクスポートします $ ( kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d)

Redis® サーバーに接続するには:

1.クライアントとして使用できる Redis® ポッドを実行します

kubectl run --namespace redis-sentinel redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image myharbor.com/bigdata/redis:7.0.5-debian-11-r7 --command --sleep infinity

ポッドに接続するには、次のコマンドを使用します

kubectl exec --tty -i redis-client \
--namespace redis-sentinel --bash

2. Redis® CLIを使用して接続します
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis - sentinel - p 6379 # 読み取り専用操作
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h redis - sentinel - p 26379 # Sentinel アクセス

クラスターの外部からデータベースに接続するには、次のコマンドを実行します

kubectl ポート転送--namespace redis-sentinel svc/redis-sentinel 6379:6379 &
REDISCLI_AUTH = "$REDIS_PASSWORD" redis - cli - h 127.0 .0 .1 - p 6379

チェック

 kubectl get pods  svc - n redis - sentinel - wide を実行します。

4) 模擬故障テスト

 # チェック
kubectl exec - it redis - sentinel - node - 0 - n redis - sentinel -- redis-cli -h redis-sentinel -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) レプリケーション情報

障害をシミュレートしてマスターポッドを強制終了する

 kubectl ポッド redis -センチネル-ノード- 0 - n redis -センチネルを削除します

マスターノードを再度確認すると、マスターノードが他のノードに切り替わっています。

読み書きの再テスト

 # マスターノードにログインする
kubectl exec -it redis - sentinel - node - 0 - n redis - sentinel --redis-cli -h redis-sentinel-node-2.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) を実行します。

# スレーブノードにログインする
kubectl exec -it redis - sentinel - node - 0 - n redis - sentinel --redis-cli -h redis-sentinel-node-0.redis-sentinel-headless -a $(kubectl get secret --namespace redis-sentinel redis-sentinel -o jsonpath="{.data.redis-password}" | base64 -d) を実行します。

5) アンインストール

 helm アンインストール redis-sentinel -n redis
# nsを削除
kubectl ns redis を削除します --force
# PVを削除
kubectl で pv を削除します `kubectl で pv を取得します|grep ^redis-|awk '{print $1}'` --force

rm -fr /opt/bigdata/servers/redis/data/data1/*

4. Redis クラスターモードのオーケストレーションとデプロイメントの実践的な操作

クラスターモードは、センチネルモードとマスタースレーブモードを組み合わせたものと言えます。クラスターはマスタースレーブ機能とマスター再選出機能を実現できるため、レプリカ 2 つとシャード 3 つを構成する場合、6 つの Redis インスタンスが必要になります。 Redis データは一定のルールに従ってクラスター内の異なるマシンに分散されるため、データの量が多すぎる場合は、拡張のために新しいマシンを追加できます。

1) チャートパッケージをダウンロードする

 helmリポジトリbitnamiを追加しますhttps://charts.bitnami.com/bitnami

helm pull bitnami / redis -クラスター--version 8.2.7

tar - xf redis -クラスター- 8.2 .7 .tgz

2) イメージを構築する

ここではイメージを再構築せず、リモート イメージにタグを付けてローカル ハーバー リポジトリにプッシュし、イメージのダウンロードを高速化します。画像の作成方法がわからない場合は、プライベートメッセージを送信するか、メッセージを残してください。

 docker pull docker .io / bitnami / redis -クラスター: 7.0 .5 - debian - 11 - r9

# タグ
docker タグ docker .io / bitnami / redis - cluster : 7.0 .5 - debian - 11 - r9 myharbor .com / bigdata / redis - cluster : 7.0 .5 - debian - 11 - r9

# イメージをローカルの Harbor リポジトリにプッシュします
docker push myharbor .com / bigdata / redis -クラスター: 7.0 .5 - debian - 11 - r9

3) YAMLレイアウトを変更する

  • redis-cluster/テンプレート/pv.yaml

次の内容を含む新しい pv.yaml ファイルを追加します。

 { { -範囲.Values ​​.persistence .local } }
---
APIバージョン: v1
種類:永続ボリューム
メタデータ:
名前: { { .name } }
ラベル:
名前: { { .name } }
仕様:
ストレージクラス名: { { $ .Values ​​.persistence .storageClass } }
容量
ストレージ: { { $ .Values ​​.persistence .size } }
アクセスモード:
-一度だけ読み書き可能
地元
パス: { { .path } }
ノードアフィニティ:
必須
ノードセレクタ用語:
-一致する表現:
-キー: kubernetes.io/ホスト名
演算子:

- { { 。ホスト} }
---
{ { -終わり} }
パスワード: "123456"

...

画像
レジストリ: myharbor.com
リポジトリ: bigdata / redis -クラスター
タグ: 7.0 .5 - debian - 11 - r9

...

持続性:
ストレージクラス: "local-redis-cluster-storage"
地元
-名前: redis -クラスター- 0
ホスト: "local-168-182-110"
パス: "/opt/bigdata/servers/redis-cluster/data/data1"
-名前: redis -クラスター- 1
ホスト: "local-168-182-110"
パス: "/opt/bigdata/servers/redis-cluster/data/data2"
-名前: redis -クラスター- 2
ホスト: "local-168-182-110"
パス: "/opt/bigdata/servers/redis-cluster/data/data3"
-名前: redis -クラスター- 3
ホスト: "local-168-182-111"
パス: "/opt/bigdata/servers/redis-cluster/data/data1"
-名前: redis -クラスター- 4
ホスト: "local-168-182-111"
パス: "/opt/bigdata/servers/redis-cluster/data/data2"
-名前: redis -クラスター- 5
ホスト: "local-168-182-111"
パス: "/opt/bigdata/servers/redis-cluster/data/data3"
-名前: redis -クラスター- 6
ホスト: "local-168-182-112"
パス: "/opt/bigdata/servers/redis-cluster/data/data1"
-名前: redis -クラスター- 7
ホスト: "local-168-182-112"
パス: "/opt/bigdata/servers/redis-cluster/data/data2"
-名前: redis -クラスター- 8
ホスト: "local-168-182-112"
パス: "/opt/bigdata/servers/redis-cluster/data/data3"

クラスター:
初期化:
# マスター 1 台とスレーブ 2 台 (3 つのグループ)
ノード数: 9
レプリカ 2

4) 展開を開始する

 # ストレージディレクトリを作成する
mkdir -p /opt/bigdata/servers/redis-cluster/data/data{1..3}

helm で redis-cluster をインストールします。/redis-cluster -n redis-cluster --create-namespace

注記

注記:
チャート名: redis-cluster
チャートバージョン: 8.2.7
アプリバージョン: 7.0.5** チャートが展開されるまでしばらくお待ちください**


パスワードを取得するには、次を実行します:
REDIS_PASSWORD=$(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) をエクスポートします。

Kubernetes クラスター内からのみアクセス可能な Redis® クラスターをデプロイしました。情報: クラスターを作成するジョブが作成されます。Redis® クラスターに接続するには:

1. クライアントとして使用できる Redis® ポッドを実行します。
kubectl 実行 --namespace redis-cluster redis-cluster-client --rm --tty -i --restart='Never' \
--env REDIS_PASSWORD=$REDIS_PASSWORD \
--image myharbor.com/bigdata/redis-cluster:7.0.5-debian-11-r9 -- bash

2. Redis® CLI を使用して接続します。

redis-cli -c -h redis-cluster -a $REDIS_PASSWORD

チェック

 kubectl get pods  svc - n redis -クラスター全体

5) 故障シミュレーションテスト

 kubectl exec -it redis - cluster - 0 - n redis - cluster --redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsnotallow="{.data.redis-password}" | base64 -d) クラスター情報

kubectl exec - it redis - cluster - 0 - n redis - cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) クラスターノード

マスターノードの1つを削除する

 kubectl ポッド redis -クラスター- 1 - n redis -クラスターを削除します

# ノードのステータスを再度確認する
kubectl exec - it redis - cluster - 0 - n redis - cluster -- redis-cli -c -h redis-cluster -a $(kubectl get secret --namespace "redis-cluster" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d) クラスターノード

6) アンインストール

 helm アンインストール redis -クラスター- n redis -クラスター
# nsを削除
kubectl削除ns redis -クラスター--force
# PVを削除
kubectl で pvを削除します`kubectl で pv を取得します| grep ^ redis -クラスター-| awk '{print $1}' ` --force

rm - fr / opt / bigdata / servers / redis - cluster / data / data { 1 .. 3 } /*

Git アドレス: https://gitee.com/hadoop-bigdata/redis-on-k8s​

<<:  Alibaba Cloudの「Automotive Cloud」がYunqiカンファレンスでデビューしました。 Xpeng、FAW、Great Wall、Horizo​​nなどはすべてクラウドに移行しました

>>:  Kubecon 2022 概要: Kubernetes は産業化に向けて前進

推薦する

顧客がクラウドプロバイダーに求める2つのこと

多くの企業顧客は使用しているクラウド製品を気に入っていますが、ベンダーに対して不満を抱いている場合が...

【乾物】APPプロモーションノート:100日間のチャンネルプロモーションまとめ!

始める前に、アプリを宣伝するさまざまな方法について聞いていました。お金をかけずにチャンネルを構築でき...

周紅一:製品を開発するには、まず自分自身を「バカモード」に切り替える必要があります

Qihoo 360 CEO 周紅毅唯一自慢できることは、ネット上で最も多くの失敗をし、最も多くの批判...

vinahost: カンボジア VPS/カンボジア クラウド サーバー、月額 38 ドルから、トラフィック無制限

2008 年に設立されたベトナムのホスティング会社である vinahost は、ベトナム、タイ (機...

Kubernetes ログ転送で直面する 4 つの課題

[51CTO.com クイック翻訳] Kubernetes を使用しており、ログ記録を行う必要がある...

Weiboマーケティングで成功するには習得すべきいくつかの効果的な方法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo は、企業のニ...

分散キャップ定理と基底理論の簡単な分析!

[[346602]]導入理論計算機科学において、CAP 定理 (ブリューワーの定理とも呼ばれる) ...

電子商取引が欧州の伝統的小売業者に影響:賃料は下落を余儀なくされる

北京時間2月19日早朝、欧州最大の不動産ファンド運用会社アクサ・リアル・エステートは月曜日、今後数年...

中小企業にとってのクラウド コンピューティングのメリット トップ 10

10 の魅力的なメリットを確認し、移行を成功させるために適切なクラウド サービス プロバイダーを選択...

Zji: 香港サーバー (cn2+bgp ネットワーク)、40% 割引、月額 570 元、e5-2650/32g メモリ/480gSSD/15M 帯域幅

今月、zji は香港の葵湾データセンターの独立サーバーを特別割引で提供しており、生涯 40% 割引と...

プレーンテキストリンクは権限を譲渡できますか?

以前、プレーンテキストリンクが現在の検索エンジン最適化においてまだ有用であるかどうかについて書かれた...

すべてのネットユーザーへ: SolusVMパネルの特別なセキュリティ警告

最近、SolUSVMは一連の高リスクの脆弱性に襲われ、現在、公式のSolUSVMがパッチをリリースす...

企業がWeiboマーケティングを実施し、迅速に製品プロモーション効果を達成できるよう支援します。

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo は現代のイン...

rfchost-香港 100M 直接接続/SunnyVision データセンター/VPS 評価付き

rfchost.com は最近、香港の VPS、KVM 仮想化、solusvm パネル、SunnyV...