No menu items!
No menu items!
More

    Truy cập Redis Cluster thông qua RedisInsight

    Mặc dù một số người hoàn toàn hài lòng và hiệu quả khi sử dụng tiện ích redis-cli để tương tác với Redis Cluster, nhưng tôi cũng thấy việc sử dụng giao diện web giúp tôi hiểu rõ hơn và làm việc hiệu quả hơn. Có một số giao diện web mã nguồn mở có sẵn, nhưng tôi đã chọn sử dụng RedisInsight được phát triển bởi RedisLab. Giao diện web này có thể triển khai vào Kubernetes (K8S) dưới dạng một Deployment. Dưới đây là phiên bản có một số sửa đổi so với tài liệu chính thức từ RedisLab. Sự khác biệt chính là đã thêm một PVC (persistent volume claim), để các cấu hình không bị mất sau khi khởi động lại:

    • Giới thiệu: Redis Cluster là một hệ thống Redis được triển khai trên nhiều node, cho phép mở rộng và tăng tính sẵn sàng của dịch vụ Redis. Để tương tác với Redis Cluster thông qua giao diện web, bạn có thể sử dụng RedisInsight, một công cụ được phát triển bởi RedisLab.
    • Triển khai RedisInsight trên Kubernetes: Để triển khai RedisInsight trên Kubernetes, bạn cần tạo một Kubernetes Deployment. Tuy nhiên, để đảm bảo rằng các cấu hình không bị mất khi bạn khởi động lại RedisInsight, bạn cần sử dụng một PVC. PVC sẽ lưu trữ dữ liệu cấu hình của RedisInsight.
    • Cấu hình Deployment: Bạn có thể sử dụng một tệp YAML để cấu hình Deployment. Đoạn manifest sau đây là một phiên bản cơ bản của cấu hình Deployment với PVC:
    cat > redisinsight.yaml << 'OEF'
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: redisinsight-pv-claim
      namespace: redis-cluster
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: longhorn
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redisinsight
      namespace: redis-cluster
      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
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redisinsight-service
      namespace: redis-cluster
    spec:
      type: NodePort
      ports:
        - name: http-redisinsight
          port: 8001
          protocol: TCP
          targetPort: 8001
          nodePort: 32207
      selector:
        app: redisinsight
    OEF

    Đoạn manifest trên tạo một Deployment có một container RedisInsight, sử dụng hình ảnh redislabs/redisinsight:latest. Nó cũng định nghĩa một PVC có tên redisinsight-data để lưu trữ dữ liệu cấu hình và một service sử dụng NodePort để cho phép kết nối từ bên ngoài vào RedisInsight.

    Sau khi bạn đã tạo cả Deployment và PVC, bạn có thể triển khai RedisInsight lên Kubernetes bằng lệnh kubectl apply -f redisinsight.yaml.

    $ kubectl apply -f redisinsight.yaml
    persistentvolumeclaim/redisinsight-pv-claim unchanged
    service/redisinsight-service unchanged

    Khi triển khai thành công, bạn có thể truy cập RedisInsight thông qua trình duyệt web tại địa chỉ IP hoặc tên miền của Kubernetes. RedisInsight sẽ cho phép bạn tương tác với Redis Cluster của bạn thông qua giao diện web thân thiện và dễ sử dụng.

    Mình đang có 1 con Haproxy nên mình sẽ dùng Haproxy lắng nghe port 32207 trên các worker và forward ra ngoài bằng port 8001 bằng đoạn config như dưới.

    frontend redisInsight
        bind *:8001
        mode tcp
        option tcplog
        default_backend redisInsight
    
    backend redisInsight
        mode tcp
        balance roundrobin
        server k8s-worker1 192.168.13.214:32207 check
        server k8s-worker2 192.168.13.215:32207 check
        server k8s-worker3 192.168.13.216:32207 check
        server k8s-worker4 192.168.13.217:32207 check
        server k8s-worker5 192.168.13.218:32207 check

    Khởi động lại Haproxy.

    systemctl restart haproxy
    

    Dùng trình duyệt truy cập vào url http://<ip_haproxy>:8001 và chọn I already have a database (vì mình đã có 1 Redis DB).

    Chọn Connect to a Redis Database.

    Truyền thông tin Redis DB.

    Bạn sẽ thấy các node trong Redis Cluster, bạn có thể lựa chọn các pod mà bạn cần hoặc chọn hết cũng được, tùy nhu cầu của bạn.

    Thêm DB thành công.

    Bấm vào DB vừa thêm, bạn sẽ có nhiều thông tin hơn. Hãy tự khám phá nó nhé.

    Nếu bạn sử dụng Nginx Ingress thì có thể sử dụng manifest này.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: redisinsight-pv-claim
      namespace: redis-cluster
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-rbd-sc-delete
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redisinsight
      namespace: redis-cluster
      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
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: redisinsight-service
      namespace: redis-cluster
    spec:
      type: ClusterIP
      ports:
        - name: http-redisinsight
          port: 8001
          protocol: TCP
          targetPort: 8001
      selector:
        app: redisinsight
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: redisinsight-ingress
      namespace: redis-cluster
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      ingressClassName: nginx
      rules:
        - host: redis.hoanghd.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: redisinsight-service
                    port:
                      number: 8001

    Kết quả triển khai.

    $ kubectl get ingress,svc,po -n redis-cluster
    NAME                                             CLASS   HOSTS               ADDRESS          PORTS   AGE
    ingress.networking.k8s.io/redisinsight-ingress   nginx   redis.hoanghd.com   192.168.13.190   80      10m
    
    NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    service/redisinsight-service   ClusterIP   10.104.129.174   <none>        8001/TCP   13m
    
    NAME                                READY   STATUS    RESTARTS   AGE
    pod/redisinsight-7fb54667b6-tq886   1/1     Running   0          13m

    Sử dụng url http://redis.hoanghd.com đã khai báo ở ingress truy cập trên trình duyệt, ta có kết quả.

    Như vậy, bạn đã triển khai RedisInsight trên Kubernetes sử dụng PVC để lưu trữ cấu hình và có thể tương tác với Redis Cluster của mình thông qua giao diện web.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email