0
点赞
收藏
分享

微信扫一扫

k8s 部署Redis集群

一天清晨 2022-01-20 阅读 71
  1. 创建namespace
sudo kubectl create namespace redis-cluster
  1. 创建configmap
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-conf
  namespace: redis-cluster
data:
  redis.conf: |
    appendonly yes
    cluster-enabled yes
    cluster-config-file /var/lib/redis/nodes.conf
    dir /var/lib/redis
    port 6379
  1. 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv0
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis0"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv1
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis1"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv2
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis2"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv3
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis3"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv4
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis4"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv5
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis5"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv6
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis6"
    server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv7
spec:
  storageClassName: redis-storage-class
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: "/redis7"
    server: 192.168.43.205
  1. 创建head-less service
    StatefulSet需建立headlessService
apiVersion: v1
kind: Service
metadata:
  name: redis-headless-server
  namespace: redis-cluster
  labels:
    app: redis-cluster-app
spec:
  ports:
  - name: redis-port
    port: 6379
  clusterIP: None
  selector:
    app: redis-cluster-app
  1. 创建statefulset
    –cluster-announce-ip $(MY_POD_IP) 可在pod重启集群自动恢复时带入新ip
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis-app
  namespace: redis-cluster
spec:
  selector:
    matchLabels:
      app: redis-cluster-app
  serviceName: "redis-cluster-app"
  replicas: 6
  template:
    metadata:
      labels:
        app: redis-cluster-app
    spec:
      containers:
      - name: redis
        image: "redis:6.0.6"
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"
          - "no"
          - "--cluster-announce-ip"
          - " $(MY_POD_IP)"
        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"
        env:
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      volumes:
      - name: "redis-conf"
        configMap:
          name: "redis-conf"
          items:
            - key: "redis.conf"
              path: "redis.conf"
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "redis-storage-class"
      resources:
        requests:
          storage: 1Gi
  1. 创建redis cluster
kubectl get pods -l app=redis-cluster-app -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster #取得redis pod ip
kubectl -n redis-cluster exec -it redis-app-0 -- redis-cli --cluster create --cluster-replicas 1 \
$(kubectl get pods -l app=redis-cluster-app -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster ) 

7 创建service

apiVersion: v1
kind: Service
metadata:
  name: redis-service
  namespace: redis-cluster
  labels:
    app: redis-cluster-app
spec:
  ports:
  - name: redis-port
    protocol: "TCP"
    port: 6379
    targetPort: 6379
  selector:
    app: redis-cluster-app

参考
https://www.tpisoftware.com/tpu/articleDetails/2011

举报

相关推荐

k8s部署redis cluster集群

在K8s上部署Redis 集群

K8S集群部署

k8s集群部署

安装部署k8s集群

0 条评论