redis cluster k8s部署

本文详细介绍了如何使用Kubernetes在容器环境中部署Redis集群,包括创建ConfigMap、Headless Service、StatefulSet,以及初始化Redis集群的过程。通过示例YAML文件和命令行操作,展示了完整的部署步骤。

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

1创建Configmap

配置文件redis.conf如下:

appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
port 6379
 
kubectl create configmap redis-conf --from-file=redis.conf -n redis

2创建Headless service

headless-service.yml如下:

apiVersion: v1
kind: Service
metadata:
  name: redis-service
  labels:
    app: redis
spec:
  ports:
  - name: redis-port
    port: 6379
  clusterIP: None
  selector:
    app: redis
    appCluster: redis-cluster
kubectl create -f headless-service.yml -n redis

3创建Redis 集群节点

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: redis-app
spec:
  serviceName: "redis-service"
  replicas: 6
  template:
    metadata:
      labels:
        app: redis
        appCluster: redis-cluster
    spec:
      terminationGracePeriodSeconds: 20
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - redis
              topologyKey: kubernetes.io/hostname
      containers:
      - name: redis
        image: "redis:3.2.8"
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"
          - "no"
        resources:
          requests:
            cpu: "100m"
            memory: "100Mi"
        ports:
            - name: redis
              containerPort: 6379
              protocol: "TCP"
            - name: cluster
              containerPort: 16379
              protocol: "TCP"
        volumeMounts:
          - name: "redis-conf"
            mountPath: "/etc/redis"
          - name: "redis-data"
            mountPath: "/var/lib/redis"
      volumes:
      - name: "redis-conf"
        configMap:
          name: "redis-conf"
          items:
            - key: "redis.conf"
              path: "redis.conf"
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: rook-block2
      resources:
        requests:
          storage: 200Mi

kubectl create  -f    redis-statefulset.yaml -n redis

 

4初始化Redis集群

kubectl run -i --tty ubuntu --image=ubuntu --restart=Never /bin/bash
apt-get update
apt-get install -y vim wget python2.7 python-pip redis-tools dnsutils
pip install redis-trib==0.5.1
 

 

redis-trib.py create \
`dig +short redis-app-0.redis-service.redis.svc.cluster.local`:6379 \
`dig +short redis-app-1.redis-service.redis.svc.cluster.local`:6379 \
`dig +short redis-app-2.redis-service.redis.svc.cluster.local`:6379

redis-trib.py replicate \
--master-addr `dig +short redis-app-0.redis-service.redis.svc.cluster.local`:6379 \
--slave-addr `dig +short redis-app-3.redis-service.redis.svc.cluster.local`:6379

redis-trib.py replicate \
--master-addr `dig +short redis-app-1.redis-service.redis.svc.cluster.local`:6379 \
--slave-addr `dig +short redis-app-4.redis-service.redis.svc.cluster.local`:6379

redis-trib.py replicate \
--master-addr `dig +short redis-app-2.redis-service.redis.svc.cluster.local`:6379 \
--slave-addr `dig +short redis-app-5.redis-service.redis.svc.cluster.local`:6379

 

[root@dev7 redis-cluster]# kubectl exec -it redis-app-2 -n redis /bin/bash
root@redis-app-2:/data# redis-cli -c
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:3
cluster_my_epoch:3
cluster_stats_messages_sent:1879
cluster_stats_messages_received:1879

 

5创建用于访问Service

piVersion: v1
kind: Service
metadata:
  name: redis-access-service
  labels:
    app: redis
spec:
  ports:
  - name: redis-port
    protocol: "TCP"
    port: 6379
    targetPort: 6379
  type: NodePort
  selector:
    app: redis
    appCluster: redis-cluster

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值