k8s搭建集群模式的redis

本文介绍了一种在Kubernetes(K8s)上半自动搭建Redis集群的方法,通过配置YAML文件并执行命令实现集群搭建及验证。文章详细展示了如何通过特定的配置文件设置密码、端口等参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、该搭建方式属于半自动搭建集群模式的redis,有个手动操作的过程

使用以下yaml文件,在k8s集群中执行kubectl apply -f redis.yaml  需要添加nodeselector的需要自行添加,需要修改密码和端口的可以直接修改configmap中的内容。

---
apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    app: redis
spec:
  selector:
    app: redis
    appCluster: redis-cluster
  ports:
  - name: redis
    port: 6379
  clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-conf
data:
  redis.conf: |
    appendonly yes
    cluster-enabled yes
    cluster-config-file /var/lib/redis/nodes.conf
    cluster-node-timeout 5000
    dir /var/lib/redis
    requirepass 123456
    port 6379
---
apiVersion: v1
kind: Service
metadata:
  name: redis-access
  labels:
    app: redis
spec:
  selector:
    app: redis
    appCluster: redis-cluster
  ports:
  - name: redis-access
    protocol: TCP
    port: 6379
    targetPort: 6379
  
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  serviceName: redis
  replicas: 6
  selector:
    matchLabels:
      app: redis
      appCluster: redis-cluster     
  template:
    metadata:
      labels:
        app: redis
        appCluster: redis-cluster
    spec:
      terminationGracePeriodSeconds: 20
      imagePullSecrets:
      - name: default
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - redis
              topologyKey: kubernetes.io/hostname
      containers:
      - name: redis
        image: hub.yun.vali.com.cn/charts/redis-redis:5.0.10
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"
          - "no"
        resources:
          requests:
            cpu: "100m"
            memory: "200Mi"
        ports:
        - containerPort: 6379
          name: redis
          protocol: TCP
        - containerPort: 16379
          name: cluster
          protocol: TCP
        volumeMounts:
        - name: conf
          mountPath: /etc/redis
        - name: data
          mountPath: /var/lib/redis
      volumes:
      - name: conf
        configMap:
          name: redis-conf
          items:
          - key: redis.conf
            path: redis.conf
      - name: data
        emptyDir: {}

拿到所有的pod的ip地址,登录任何一个pod中执行下面的命令,创建集群模式的redis
其中的密码和端口是在上面的configmap设置的,可以按需修改。ip地址都是pod的ip地址

redis-cli --cluster create  192.168.5.159:6379 192.168.3.209:6379 192.168.5.160:6379 192.168.3.210:6379 192.168.5.161:6379 192.168.3.211:6379  --cluster-replicas 1 -a 123456


 kubectl exec -it redis-0 -n vali-service sh

验证集群状态。登录任意一个redis pod执行以下命令,

 # redis-cli -c -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

查看集群信息

127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:418
cluster_stats_messages_pong_sent:427
cluster_stats_messages_sent:845
cluster_stats_messages_ping_received:422
cluster_stats_messages_pong_received:418
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:845

基操:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set pingsan tech
-> Redirected to slot [9276] located at 192.168.3.209:6379
OK
192.168.3.209:6379> get hello    #这里发生了节点ip切换,是正常的
-> Redirected to slot [866] located at 192.168.5.159:6379
"world"
192.168.5.159:6379> #这里发生了节点ip切换,是正常的

经过以上步骤,集群模式的redis就搭建好了,应用客户端可直接通过service “redis-access”进行访问

 kubectl get svc -n vali-service |grep redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值