redis을 쿠버네티스에 배포 연습 다음과 같은 두가지 사용 패턴이 있다.
- 단독 서버로 redis를 사용하는경우
 - replicatioh을 사용하는 경우
 
단독 서버를 사용해보자.
docker hub에 있는 기본 redis는 환경변수가 많이 안다. 그리고 설정 파일위치를 못찾겠어서 bitnami/redis 를 사용한다.
환경변수가 많아서 설정하기가 쉽다.
---
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: redis
  labels:
    app: redis
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.0.79
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: prod
  name: redis
  labels:
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: 'bitnami/redis:latest'
          ports:
            - containerPort: 6379
          env:
            # - name: ALLOW_EMPTY_PASSWORD
            #   value: "yes"
            - name: REDIS_PASSWORD
              value: your-password
비밀번호 있이 사용이 가능해졋다. 비번이 필요없으면 ALLOW_EMPTY_PASSWORD를 사용하자.
사용해보자.
docker run -it --rm redis redis-cli -h 192.168.0.79 -a your-password
set mykey myvalue
> OK
get mykey
> "myvalue"
replication
1개의 마스터와 2개의 슬레이브로 구성
vi redis.yml
---
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: redis-master
  labels:
    app: redis-master
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.0.100
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis-master
---
apiVersion: v1
kind: Service
metadata:
  namespace: prod
  name: redis-slave
  labels:
    app: redis-slave
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.0.101
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis-slave
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: prod
  name: redis-master
  labels:
    app: redis-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-master
  template:
    metadata:
      labels:
        app: redis-master
    spec:
      containers:
        - name: redis-master
          image: 'bitnami/redis:latest'
          ports:
            - containerPort: 6379
          env:
            - name: REDIS_PASSWORD
              value: your-password
            - name: REDIS_REPLICATION_MODE
              value: master
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: prod
  name: redis-slave
  labels:
    app: redis-slave
spec:
  replicas: 2
  selector:
    matchLabels:
      app: redis-slave
  template:
    metadata:
      labels:
        app: redis-slave
    spec:
      containers:
        - name: redis-slave
          image: 'bitnami/redis:latest'
          ports:
            - containerPort: 6379
          env:
            - name: REDIS_PASSWORD
              value: your-password
            - name: REDIS_REPLICATION_MODE
              value: slave
            - name: REDIS_MASTER_HOST
              value: redis-master
            - name: REDIS_MASTER_PASSWORD
              value: your-password
k apply -f redis.yml
서비스가 2개이다 master ,slave slave는 2개의 파드가 번갈아가면서 대답한다.
테스트해보자.
docker run -it --rm redis redis-cli -h 192.168.0.100 -a your-password
set mykey myvalue
> OK
get mykey
> "myvalue"
slave에서 체크
docker run -it --rm redis redis-cli -h 192.168.0.101 -a your-password
keys *
> 1) "mykey"
잘된다
이제 write는 master에 read는 slave를 쓰면된다.