๐ ๊ฐ์ - Redis - K8s
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
apiVersion: storage.k8s.io/v1
kind: StorageClass
reclaimPolicy: Delete
metadata:
name: dev-redis-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
k apply -f dev-redis-sc.yml
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
StorageClass ์ง์ ํ๋ ๊ฒ์ ์ ์ํ๋ค.
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]}
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
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
cp 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
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
k get po -n my-dev
NAME READY STATUS RESTARTS AGE
my-redis-master-0 1/1 Running 4 (110s ago) 2m46s
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
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
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
kubectl exec -it my-redis-master-0 -n my-dev -- redis-cli ping
PONG
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