安裝Redis-cluster在K8S上

Hachibye
7 min readMar 25, 2024

--

Install Redis-cluster on K8S

首先要大概理解(Volumes)、持久卷(Persistent Volumes)、儲存類別(Storage Classes)的概念

由於Redis-Cluster的方式需要配置Storage Classes
而Storage Classes需要Provisioner,所以本篇文章以此為出發點

必備條件:
一台擁有NFS的NAS主機
一個已經架好的K8S集群

以下皆在K8S的Master node上操作

1.安裝nfs-subdir-external-provisioner

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner — version 4.0.17 — namespace nfs — set nfs.server=<你的nas地址> — set nfs.path=<你的nas掛載目錄>

排錯指南:

  • **卡在containercreating
kubectl get pod
kubectl describe pod

看見類似於下列之報錯:
Output: mount: /var/lib/kubelet/pods/********/volumes/kubernetes.io~nfs/nfs-subdir-external-provisioner-root: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.

解決方法:

  • 檢查nas的NFS是否開啟
  • 在每台K8S節點上裝 sudo apt install nfs-common
檔案服務裡面的NFS設置
共用資料夾裡面的NFS權限設置

2.裝好就能建立一個pvc.yaml測試

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-claim
namespace: nfs
spec:
accessModes:
- ReadWriteMany
#這裡指定了sc為nfs-client待會會用到
storageClassName: nfs-client
resources:
requests:
storage: 2Gi
#套用上面寫的pvc.yaml
kubectl apply -f pvc.yaml
#查看建立好的pvc
kubectl get pvc -n nfs

3.開始配置redis-cluster

#安裝helm
sudo apt-get install helm
#將來源加入helm
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami
#導出values.yaml進行客製化配置
helm show values bitnami/redis-cluster>./values.yaml

參數說明

password: 可以設置密碼

nodes: 6 可以設置節點數

replicas: 1 可以設置副本數

nodePorts: 可以設置是否暴露端口

persistence: 底下的 storageClass: 需要設置為跟上面對齊的「nfs-client」

4.開始安裝redis-cluster

helm install redis -f values.yaml oci://registry-1.docker.io/bitnamicharts/redis-cluster

如果要免密的話可在values.yaml中設置或帶上參數 — set usePassword=false

#檢查
helm ls -n default
kubectl get pod -n default | grep redis
kubectl get endpoints,services | grep redis
#卸載
helm uninstall redis -n default

查看pod運行狀態為running之後

進入容器的方法有三種:

#通過pod名稱直接進入容器內的redis
kubectl exec - stdin - tty redis-redis-cluster-0 -n default - redis-cli
#進入容器再進入redis的原始方法
kubectl get pod -n default
kubectl exec -it redis-redis-cluster-0 -n default bash
redis-cli -h 127.0.0.1 -p 密碼
#外部進入容器redis的方法
kubectl get svc -n default
#查看到服務的容器內ip之後
redis-cli -h 10.xx.xx.xx -p 6379 -a 密碼

進入redis之後就能下redis-cli的指令了

CLUSTER INFO
CLUSTER NODES
MEMORY INFO

5.安裝redis-insight來輔助使用

apiVersion: apps/v1
kind: Deployment
metadata:
name: redisinsight
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redisinsight
template:
metadata:
labels:
app: redisinsight
spec:
containers:
- name: redisinsight
image: redislabs/redisinsight:1.12.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8001
volumeMounts:
- name: db
mountPath: /db
volumes:
- name: db
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: redisinsight-service
namespace: default
spec:
type: NodePort
ports:
- port: 80
targetPort: 8001
nodePort: 31888
selector:
app: redisinsight
#查看服務是否起來
kubectl get pod -n default | grep redis
#查看對外端口是否為31888
kubectl get svc -n default | grep redis

訪問之後就能進行redis-cluster的連結

這裡一樣是使用容器內ip,10.xx.xx.xx的ip來配置

連結成功之後就能測試使用redis並觀察惹

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet