K8S 部署redis cluster分片集群 —— 筑梦之路

131 篇文章 7 订阅
115 篇文章 3 订阅

环境说明:

redis版本: 5.0

部署所需的yaml文件内容:

apiVersion: v1
kind: Service
metadata:
  namespace: test
  name: redis-service
  labels:
    app: redis
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: 6379
      protocol: TCP
      nodePort: 26379
    - name: cluster
      port: 16379
      targetPort: 16379
      protocol: TCP
  #clusterIP: None
  type: NodePort
  selector:
    app: redis
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: test
  name: redis-cluster
spec:
  serviceName: redis-service
  selector:
    matchLabels:
      app: redis 
  replicas: 6
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:5.0
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        ports:
            - name: redis
              containerPort: 6379
              protocol: TCP
            - name: cluster
              containerPort: 16379
              protocol: TCP
        command: ["/etc/redis/fix-ip.sh", "redis-server", "/etc/redis/redis.conf"]
        volumeMounts:
          - name: redis-conf
            mountPath: /etc/redis
          - name: redis-data
            mountPath: /data
        resources:
          limits:
            cpu: 0.5
            memory: 1Gi
          requests:
            cpu: 0.1
            memory: 1Gi
      volumes:
      - name: redis-conf
        configMap:
          name: redis-cluster-conf
          items:
            - key: redis.conf
              path: redis.conf
            - key: fix-ip.sh
              path: fix-ip.sh
          defaultMode: 0755
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: managed-nfs-storage
      resources:
        requests:
          storage: 2Gi
---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: test
  labels:
    name: redis
  name: redis-cluster-conf
# maxmemory 设置为 limit.memory 80%
data:
  fix-ip.sh: |
    #!/bin/sh
    CLUSTER_CONFIG="/data/nodes.conf"
    if [ -f ${CLUSTER_CONFIG} ]; then
      if [ -z "${POD_IP}" ]; then 
        echo "Unable to determine Pod IP address!"
        exit 1
      fi
      echo "Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}"
      sed -i.bak -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${CLUSTER_CONFIG}
    fi
    exec "$@"
  redis.conf: |
    port 6379
    cluster-enabled yes
    cluster-config-file nodes.conf
    repl-ping-slave-period 10
    repl-timeout 60
    cluster-node-timeout 15000
    maxmemory 966367641
    maxmemory-policy noeviction 
    appendonly yes
    appendfsync everysec 
    tcp-keepalive 60
    protected-mode no
    requirepass admin123
    masterauth  admin123

 镜像使用官方的就行

# 建立集群

kubectl exec -it redis-cluster-0 -n xxx -- redis-cli -a admin@123 --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis -n trs -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' |awk  '{$7 = ""; print $0}')

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 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 中的一个节点名称。可以根据实际情况进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值