在k8s中用于部署redis主的节点打上污点,如果redis不用单独节点部署不需要执行次步

kubectl taint node nodename  node=redis-master:NoSchedule

在k8s中用于部署redis从的节点打上污点,如果redis不用单独节点部署不需要执行次步

kubectl taint node nodename  node=redis-slave:NoSchedule

redis主configmap

apiVersion: v1
data:
  redis.conf: |
    bind 0.0.0.0
    protected-mode yes              
    port 6379                       
    tcp-backlog 1024                
    timeout 0                       
    logfile "/data/redis.log" 
    requirepass 'SXDOi-%HcEBJZ89'
    rename-command CONFIG REDIS-CONFIG
    rename-command FLUSHDB REDIS-FLUSHDB
    rename-command FLUSHALL REDIS-FLUSHALL
    save 900 1
    save 300 10
    save 120 300000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    
    dbfilename dump.rdb
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes

    maxmemory 28gb
    maxmemory-policy volatile-lru
    maxmemory-samples 5
    lazyfree-lazy-eviction yes
    maxclients 6000000
    
    io-threads 8
    io-threads-do-reads yes
    repl-backlog-size 1gb
    repl-diskless-sync yes

    activerehashing yes
    hz 10
    tcp-keepalive 300
kind: ConfigMap
metadata:
  name: redis-master-cm

redis主headless svc

apiVersion: v1
kind: Service
metadata:
  name: redis-master-headless
  labels:
    app: redis-master-headless
spec:
  ports:
  - name: redis-master1
    port: 6379
    protocol: TCP
    targetPort: 6379
  selector:
    name: redis-master
  type: ClusterIP
  clusterIP: None

redis主deployment,其中nodeName: n01指定n01节点部署redis主,根据自己业务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    name: redis-master
  name: redis-master
spec:
  replicas: 1
  selector:
    matchLabels:
      name: redis-master
  serviceName: redis-master-headless
  template:
    metadata:
      labels:
        name: redis-master
    spec:
      tolerations:
      - key: "node"         
        operator: "Equal"   
        value: "redis-master"      
        effect: "NoSchedule"
      nodeName: n01
      containers:
      - args:
        - /usr/local/bin/redis-server
        - /etc/redis.conf
        image: redis:7.4.2
        imagePullPolicy: IfNotPresent
        name: redis-master
        ports:
        - containerPort: 6379
          name: redis-master
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/redis.conf
          name: redis-master-cm
          subPath: redis.conf
        - mountPath: /data
          name: redis-master-data
      restartPolicy: Always
      volumes:
      - configMap:
          defaultMode: 420
          name: redis-master-cm
        name: redis-master-cm
      - name: redis-master-data
        hostPath:
          type: DirectoryOrCreate
          path: /data/redis

redis主svc,用于外部访问,内部访问用headless svc

apiVersion: v1
kind: Service
metadata:
  name: redis-master-svc
  labels:
    app: redis-master-svc
spec:
  ports:
  - name: redis-master2
    nodePort: 30679
    port: 6379
    protocol: TCP
    targetPort: 6379
  selector:
    name: redis-master
  type: NodePort

redis从configmap,masterauth指定主库的密码,requirepass 指定从库密码

apiVersion: v1
data:
  redis.conf: |
    bind 0.0.0.0
    protected-mode yes              
    port 6379                       
    tcp-backlog 1024                
    timeout 0                       
    logfile "/data/redis.log"
    replicaof  redis-master-headless 6379
    replica-read-only yes
    masterauth 'SXDOi-%HcEBJZ89'
    requirepass 'SXDOi-%HcEBJZ89'
    rename-command CONFIG REDIS-CONFIG
    rename-command FLUSHDB REDIS-FLUSHDB
    rename-command FLUSHALL REDIS-FLUSHALL
    save 900 1
    save 300 10
    save 120 300000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    
    dbfilename dump.rdb
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes

    maxmemory 28gb
    maxmemory-policy volatile-lru
    maxmemory-samples 5
    lazyfree-lazy-eviction yes
    maxclients 6000000
    
    io-threads 8
    io-threads-do-reads yes
    repl-backlog-size 1gb
    repl-diskless-sync yes

    activerehashing yes
    hz 10
    tcp-keepalive 300
kind: ConfigMap
metadata:
  name: redis-slave-cm

redis从headless svc

apiVersion: v1
kind: Service
metadata:
  name: redis-slave-headless
  labels:
    app: redis-slave-headless
spec:
  ports:
  - name: redis-slave1
    port: 6379
    protocol: TCP
    targetPort: 6379
  selector:
    name: redis-slave
  type: ClusterIP
  clusterIP: None

redis从deployment,其中nodeName: n02指定n02节点部署redis从,根据自己业务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    name: redis-slave
  name: redis-slave
spec:
  replicas: 1
  selector:
    matchLabels:
      name: redis-slave
  serviceName: redis-slave-headless
  template:
    metadata:
      labels:
        name: redis-slave
    spec:
      tolerations:
      - key: "node"         
        operator: "Equal"   
        value: "redis-slave"      
        effect: "NoSchedule"
      nodeName: n02
      containers:
      - args:
        - /usr/local/bin/redis-server
        - /etc/redis.conf
        image: redis:7.4.2
        imagePullPolicy: IfNotPresent
        name: redis-slave
        ports:
        - containerPort: 6379
          name: redis-slave
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/redis.conf
          name: redis-slave-cm
          subPath: redis.conf
        - mountPath: /data
          name: redis-slave-data
      restartPolicy: Always
      volumes:
      - configMap:
          defaultMode: 420
          name: redis-slave-cm
        name: redis-slave-cm
      - name: redis-slave-data
        hostPath:
          type: DirectoryOrCreate
          path: /data/redis

redis从svc,用于外部访问,内部访问用headless svc

apiVersion: v1
kind: Service
metadata:
  name: redis-slave-svc
  labels:
    app: redis-salve-svc
spec:
  ports:
  - name: redis-slave2
    nodePort: 30679
    port: 6379
    protocol: TCP
    targetPort: 6379
  selector:
    name: redis-slave
  type: NodePort