Provisioning, Redis / standalone

Jeonghak Choยท2025๋…„ 6์›” 8์ผ

Provisioning

๋ชฉ๋ก ๋ณด๊ธฐ
40/44

๐Ÿ“— ๊ฐœ์š” - Redis - K8s

๐Ÿณ๏ธโ€๐ŸŒˆ [๊ถ๊ธˆํ•œ์ ]

  • Redis ์ตœ์†Œ์‚ฌ์–‘์œผ๋กœ ์„ค์น˜ํ•˜๊ธฐ (Harbor์—์„œ ์‚ฌ์šฉ, ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ)

๐Ÿ”—[๋ชฉ์ฐจ]


1๏ธโƒฃ ์ค€๋น„

Redis StorageClass ์ž‘์„ฑ

  • sc ์ •์˜
apiVersion: storage.k8s.io/v1
kind: StorageClass
reclaimPolicy: Delete  
metadata:
  name: dev-redis-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
  • sc ์ƒ์„ฑ
k apply -f dev-redis-sc.yml

Redis ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ

  • ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ (slave1)
sudo mkdir /tmp/dev-redis-data1
sudo chown -R 1001:1001 /tmp/dev-redis-data1

ls -ld /tmp/dev-redis-data1

drwxr-xr-x 2 1001 1001 4096 Jun  7 03:27 /tmp/dev-redis-data1

Redis PV ๊ตฌ์„ฑ

StorageClass ์ง€์ •ํ•˜๋Š” ๊ฒƒ์— ์œ ์˜ํ•œ๋‹ค.

  • PV ์ •์˜
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis1
  labels:
    type: local
spec:
  storageClassName: dev-redis-local-storage
  persistentVolumeReclaimPolicy: Delete
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/dev-redis-data1"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [slave1]}
  • pv ์ƒ์„ฑ
k apply -f dev-redis-pv.yaml

persistentvolume/dev-redis-pv1 created

k get pv

NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                                 STORAGECLASS               REASON   AGE
dev-redis-pv1    1Gi        RWO            Delete           Available                                         dev-redis-local-storage             23s

Redis ์ฐจํŠธ ๋‹ค์šด๋กœ๋“œ

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm pull oci://registry-1.docker.io/bitnamicharts/redis --untar

Pulled: registry-1.docker.io/bitnamicharts/redis:21.1.11
Digest: sha256:a6fa363f7698b02ebec9be1c101a44e4dc5ad68d3e94b78d52e65ceef598d18d

cd redis

2๏ธโƒฃ ์„ค์ •

Redis ์‚ฌ์šฉ์ž Values ํŒŒ์ผ ์ƒ์„ฑ

cp values.yaml dev-redis-values.yaml
  • dev-redis-values.yaml ํŒŒ์ผ ํŽธ์ง‘
  • ์•„๋ž˜ ๋‚ด์šฉ ๋‚จ๊ธฐ๊ณ  ์‚ญ์ œ
architecture: standalone

auth:
  enabled: false

master:
  persistence:
    enabled: true
    storageClass: "dev-redis-local-storage"
    size: 2Gi
  resources:
    requests:
      cpu: 50m
      memory: 64Mi
    limits:
      cpu: 100m
      memory: 128Mi

replica:
  replicaCount: 1
  persistence:
    enabled: true
    storageClass: "dev-redis-local-storage"
    size: 2Gi
  resources:
    requests:
      cpu: 50m
      memory: 64Mi
    limits:
      cpu: 100m
      memory: 128Mi
metrics:
  enabled: false

3๏ธโƒฃ ์„ค์น˜

Redis ์„ค์น˜ (Distributed)

helm install my-redis . -n my-dev --create-namespace -f dev-redis-values.yaml --set volumePermissions.enabled=true

NAME: my-redis
LAST DEPLOYED: Sat Jun  7 12:38:55 2025
NAMESPACE: my-dev
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 21.1.11
APP VERSION: 8.0.2

Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.

** Please be patient while the chart is being deployed **

Redis® can be accessed via port 6379 on the following DNS name from within your cluster:

    my-redis-master.my-dev.svc.cluster.local



To connect to your Redis® server:

1. Run a Redis® pod that you can use as a client:

   kubectl run --namespace my-dev redis-client --restart='Never'  --image docker.io/bitnami/redis:8.0.2-debian-12-r3 --command -- sleep infinity

   Use the following command to attach to the pod:

   kubectl exec --tty -i redis-client \
   --namespace my-dev -- bash

2. Connect using the Redis® CLI:
   redis-cli -h my-redis-master

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace my-dev svc/my-redis-master 6379:6379 &
    redis-cli -h 127.0.0.1 -p 6379

Redis POD ํ™•์ธ

k get po -n my-dev

NAME                READY   STATUS    RESTARTS       AGE
my-redis-master-0   1/1     Running   4 (110s ago)   2m46s

Redis ์ฐจํŠธ ๋ฒ„์ „

helm ls -n my-dev

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
my-redis        my-dev          1               2025-06-07 12:38:55.8338876 +0900 KST   deployed        redis-21.1.11           8.0.2

4๏ธโƒฃ ๊ฒ€์ฆ

Redis ์„œ๋น„์Šค ํฌํŠธ ํ™•์ธ

k get svc -n my-dev

NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
my-redis-headless   ClusterIP   None           <none>        6379/TCP   3m12s
my-redis-master     ClusterIP   10.100.8.241   <none>        6379/TCP   3m12s

Redis PV, PVC ํ™•์ธ

k get pvc,pv -n my-dev

NAME                                                 STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS    AGE
persistentvolumeclaim/redis-data-my-redis-master-0   Bound    redis1   2Gi        RWO            local-storage   3m42s

NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                 STORAGECLASS    REASON   AGE
persistentvolume/redis1   2Gi        RWO            Delete           Bound    my-dev/redis-data-my-redis-master-0   local-storage            31m

PING ํ…Œ์ŠคํŠธ

kubectl exec -it my-redis-master-0 -n my-dev -- redis-cli ping

PONG

Redis CLI ์ ‘์†

kubectl exec -it my-redis-master-0 -n my-dev -- redis-cli

127.0.0.1:6379>

์˜คํผ๋ ˆ์ด์…˜

# Key ์“ฐ๊ธฐ
SET mykey "hello redis"

# Key ์ฝ๊ธฐ
GET mykey

# Key ์‚ญ์ œ
DEL mykey

# ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
EXISTS mykey

# ๋ชจ๋“  ํ‚ค ๋ณด๊ธฐ (์ฃผ์˜: ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉ ์ฃผ์˜)
KEYS *
  • ๊ฒฐ๊ณผ
127.0.0.1:6379> SET mykey "hello redis"
OK
127.0.0.1:6379> GET mykey
"hello redis"
127.0.0.1:6379> DEL mykey
(integer) 1
127.0.0.1:6379> EXISTS mykey
(integer) 0
127.0.0.1:6379> KEYS *
(empty array)

์ฐธ๊ณ 

์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด

# helm ์‚ญ์ œ ํ›„ ์žฌ ์ƒ์„ฑ
helm delete my-redis -n my-dev
helm install my-redis . -n my-dev -f dev-redis-values.yaml --create-namespace --set volumePermissions.enabled=true

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ  - Released ์ƒํƒœ์˜ pv Available๋กœ ๋ณ€๊ฒฝ 
rm -rf /tmp/dev-redis-data1/*
kubectl patch pv dev-redis-data1 -p '{"spec":{"claimRef": null}}'

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ - PV ์ƒ์„ฑ
k apply -f dev-redis-pv.yaml

# persistentVolumeReclaimPolicy: Retain ์ผ ๊ฒฝ์šฐ - pv ์ „์ฒด ์‚ญ์ œ
k delete -f dev-redis-pv.yaml

# PVC  ์‚ญ์ œ
k delete pvc redis-data-my-redis-master-0 -n my-dev

0๊ฐœ์˜ ๋Œ“๊ธ€