# Helm 安装 Redis 集群

* 具有默认 sc 存储，如果没有则设置 persistenceEnabled: false



> 参考: https://operatorhub.io/operator/redis-operator&#x20;
>
> 参考: https://ot-redis-operator.netlify.app/docs/overview/

```bash
helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/
helm install redis-operator ot-helm/redis-operator --namespace ot-operators --create-namespace --version 0.19.2
kubectl describe --namespace ot-operators pods
kubectl get pods -n ot-operators
```

### 创建 redis-cluster 默认认证用户

```bash
kubectl create secret generic redis-secret \
  --from-literal=redis-password="T3BzdHJlZUAxMjM0Cg=" --namespace ot-operators
```

### 安装 redis-cluster 测试集群

```bash
helm install redis-cluster ot-helm/redis-cluster \
  --set redisCluster.clusterSize=3 \
  --set redisCluster.redisSecret.secretName=redis-secret \
  --set redisCluster.redisSecret.secretKey=redis-password \
  --set redisExporter.enabled=true \
  --namespace ot-operators  --version 0.16.5
```

### 临时在 kube-public 命名空间下启动客户端测试

```bash
kubectl run -it --rm --image=redis --restart=Never redis-client -n kube-public -- /bin/bash
```



### 集群内部访问

```bash
redis-cluster-leader-svc-0.ot-operators.svc.cluster.local:6379
redis-cluster-leader-svc-1.ot-operators.svc.cluster.local:6379
redis-cluster-leader-svc-2.ot-operators.svc.cluster.local:6379
```



同 VPC 下访问

要从同一 VPC 内访问 Redis 集群，请使用 nodeRedisSvc.yaml 文件中定义的 NodePort 服务。每个服务对应一个Redis领导节点，可以通过其各自的NodePort访问

* **redis-cluster-leader-svc-0**: Connect using `svc-ip:30025`
* **redis-cluster-leader-svc-1**: Connect using `svc-ip:30026`
* **redis-cluster-leader-svc-2**: Connect using `svc-ip:30027`

Ensure the `svc-ip` corresponds to the IP address of the node hosting the Kubernetes services.

```bash
root@test-jys:/tmp/test-redis# cat nodeRedisSvc.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis-cluster-leader-svc-0
  name: redis-cluster-leader-svc-0
  namespace: ot-operators
spec:
  ports:
  - name: redis-client
    port: 6379
    protocol: TCP
    targetPort: 6379
    nodePort: 30025
  selector:
    statefulset.kubernetes.io/pod-name: redis-cluster-leader-0
  type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis-cluster-leader-svc-1
  name: redis-cluster-leader-svc-1
  namespace: ot-operators
spec:
  ports:
  - name: redis-client
    port: 6379
    protocol: TCP
    targetPort: 6379
    nodePort: 30026
  selector:
    statefulset.kubernetes.io/pod-name: redis-cluster-leader-1
  type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis-cluster-leader-svc-2
  name: redis-cluster-leader-svc-2
  namespace: ot-operators
spec:
  ports:
  - name: redis-client
    port: 6379
    protocol: TCP
    targetPort: 6379
    nodePort: 30027
  selector:
    statefulset.kubernetes.io/pod-name: redis-cluster-leader-2
  type: NodePort
```

