在 K8S 中快速部署 Redis Cluster & Redisinsight

Redis Cluster

部署

使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install -n redis staging bitnami/redis-cluster

查看随机生成的 Redis 密码

记住 helm chart deployment 将为 Redis cluster 生成一个随机密码。您可以通过以下命令行查看密码:

export REDIS_PASSWORD=$(kubectl get secret --namespace redis staging-redis-cluster -o jsonpath="{.data.redis-password}" | base64 --decode)

自定义 values.yaml

为什么要自定义?因为默认的 Redis cluster helm chart 配置可能不是您用例的最佳配置。

官方默认配置:

制作 values.yaml 的本地副本。您可以修改 values.yaml 中的内容,并通过运行以下命令将配置更改应用到 Redis cluster

helm upgrade -n redis -f values.yaml staging

values.yaml 中有很多配置可以自定义。下面是一个简单示例:

cluster:
  init: true
  ## nodes:是包括副本在内的节点总数。
  ## 这意味着将有 3 个主节点和 3 个副本节点
  ##(由于 replicas 默认设置为 1,每个主节点将有 1 个副本)。
  ## 因此,nodes = numberOfMasterNodes + numberOfMasterNodes * replicas
  nodes: 6
  replicas: 1

Redisinsight

通过 Redisinsight 访问管理 Redis 集群

尽管我们非常乐意使用 redis-cli 命令行工具与 Redis 集群进行交互,而且效率很高。但使用 Web UI 来实现同样的效果更加直观和高效。我们选择使用由 RedisLab 开发的 redisinsightWeb UI 可以作为 Deployment 部署到 K8S 中。 以下是 RedisLab 官方文档提供的稍微修改过的版本。主要区别在于增加了 PVC(持久卷声明),这样配置就不会因为重启而丢失:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redisinsight-pv-claim
  labels:
    app: redisinsight
    namespace: redis
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
    storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redisinsight
  namespace: redis
  labels:
    app: redisinsight
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: redisinsight
    template:
      metadata:
        labels:
          app: redisinsight
      spec:
        containers:
        - name:  redisinsight
          image: redislabs/redisinsight:1.9.0
          imagePullPolicy: IfNotPresent
          securityContext:
            runAsUser: 0
          volumeMounts:
          - name: db
            mountPath: /db
          ports:
          - containerPort: 8001
            protocol: TCP
        volumes:
        - name: db
          persistentVolumeClaim:
            claimName: redisinsight-pv-claim

将上述 YAML 保存到 redisinsight.yaml 中,通过运行以下命令将其部署到 K8S 中:

kubectl apply -f redisinsight.yaml

部署完成后,运行端口转发:

kubectl port-forward deployment/redisinsight -n redis 8001

然后,您可以通过在 Web 浏览器中打开 http://localhost:8001 来访问 redisinsight Web UI。 您可以在 UI 中单击 Connect to a Redis Database 按钮,将显示以下弹出窗口:

Host将是 K8S 控制台中可用的 redis cluster serviceIP值。Port 为默认的 redis 端口 6379Username 默认值为 defaultName 可以是你选择的任何名字。如前一节所述,需要通过kubectl 命令行从 config map 中检索密码。点击 ADD REDIS DATABASE 按钮后,它会提示你选择所有或任何一个 Redis cluster 成员作为种子节点连接到集群。你可以选择全部或其中任何一个。一旦连接配置完成,你应该能够访问一个功能齐全的 web UI 来查看和管理你刚刚安装的Redis cluster

正如您在上面的屏幕截图中看到的那样,我们刚刚配置的 Redis 集群中有 3 个主节点和 3 个从节点。它还显示每个分区中有多少 key 以及正在使用多少 memory

更多

在 K8S 中快速部署 Redis Cluster & Redisinsight

公众号:黑客下午茶
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Kubernetes部署 Redis Cluster 集群,可以按照以下步骤进行: 1. 创建 Redis ConfigMap 首先,需要创建一个 Redis 配置文件 ConfigMap。可以使用以下命令创建: ``` kubectl create configmap redis-conf --from-file=redis.conf ``` 其,`redis.conf` 是 Redis 配置文件的名称。可以根据实际情况进行修改。 2. 创建 Redis StatefulSet 接下来,可以创建 Redis StatefulSet。可以使用以下 YAML 文件作为模板: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: labels: app: redis-cluster spec: containers: - name: redis image: redis:6.0.9 ports: - containerPort: 6379 name: client - containerPort: 16379 name: gossip volumeMounts: - name: config mountPath: /usr/local/etc/redis/redis.conf subPath: redis.conf command: - sh - -c - | if [ -n "${POD_NAME}" ]; then sed -i "s/%cluster-name%/redis-cluster/g" /usr/local/etc/redis/redis.conf sed -i "s/%node-name%/${POD_NAME}/g" /usr/local/etc/redis/redis.conf fi volumes: - name: config configMap: name: redis-conf volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi ``` 在上述 YAML 文件,`replicas` 字段指定了 Redis 集群的节点数,`volumeClaimTemplates` 字段指定了每个节点的数据卷大小。另外,还需要注意以下几点: - `serviceName` 字段需要与 `metadata.name` 字段相同。 - `selector.matchLabels` 字段需要与 `metadata.labels` 字段相同。 - `command` 字段用于修改 Redis 配置文件的节点名称和集群名称。 3. 创建 Redis Service 最后,需要创建 Redis Service。可以使用以下 YAML 文件作为模板: ``` apiVersion: v1 kind: Service metadata: name: redis-cluster labels: app: redis-cluster spec: ports: - name: client port: 6379 targetPort: 6379 - name: gossip port: 16379 targetPort: 16379 clusterIP: None selector: app: redis-cluster ``` 在上述 YAML 文件,`clusterIP` 字段需要设置为 `None`,以便创建一个 Headless Service,让每个 Redis 节点可以通过 DNS 解析到自己的 IP 地址。 4. 部署 Redis Cluster 完成以上步骤后,可以使用以下命令部署 Redis Cluster: ``` kubectl apply -f redis-cluster.yaml ``` 其,`redis-cluster.yaml` 是包含 Redis StatefulSet 和 Redis Service 的 YAML 文件。可以根据实际情况进行修改。 部署完成后,可以使用以下命令查看 Redis Cluster 的状态: ``` kubectl exec -it redis-cluster-0 -- redis-cli cluster nodes ``` 其,`redis-cluster-0` 是 Redis Cluster 的一个节点名称。可以根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值