ํ•ด๋‹น ๋ฌธ์„œ์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „: v1.33

Kubernetes v1.33 ๋ฌธ์„œ๋Š” ๋” ์ด์ƒ ์ ๊ทน์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์Œ. ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ๋ฌธ์„œ๋Š” ์ •์  ์Šค๋ƒ…์ƒท์ž„. ์ตœ์‹  ๋ฌธ์„œ๋ฅผ ์œ„ํ•ด์„œ๋Š”, ๋‹ค์Œ์„ ์ฐธ๊ณ . ์ตœ์‹  ๋ฒ„์ „.

์ปจํ”ผ๊ทธ๋งต์„ ์‚ฌ์šฉํ•ด์„œ Redis ์„ค์ •ํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ปจํ”ผ๊ทธ๋งต(ConfigMap)์„ ์‚ฌ์šฉํ•ด์„œ Redis๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์‹ค์„ธ๊ณ„ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ปจํ”ผ๊ทธ๋งต์„ ์‚ฌ์šฉํ•ด์„œ ํŒŒ๋“œ ์„ค์ •ํ•˜๊ธฐ ํƒœ์Šคํฌ๋กœ ๋นŒ๋“œ๋ฅผ ํ•œ๋‹ค.

๋ชฉ์ 

  • Redis ์„ค์ •๊ฐ’์œผ๋กœ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ƒ์„ฑ๋œ ์ปจํ”ผ๊ทธ๋งต์„ ๋งˆ์šดํŠธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” Redis ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์„ค์ •์ด ์ž˜ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ณ , kubectl ์ปค๋งจ๋“œ-๋ผ์ธ ํˆด์ด ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ๊ฐ€ ์ ์–ด๋„ 2๊ฐœ ํฌํ•จ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ๋งŒ์•ฝ, ์•„์ง ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด, minikube๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฒ„์ „ ํ™•์ธ์„ ์œ„ํ•ด์„œ, ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ kubectl version.

์‹ค์„ธ์ƒ ์˜ˆ์ œ: ์ปจํ”ผ๊ทธ๋งต์„ ์‚ฌ์šฉํ•ด์„œ Redis ์„ค์ •ํ•˜๊ธฐ

์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด์„œ, ์ปจํ”ผ๊ทธ๋งต์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Redis ์บ์‹œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์šฐ์„ , ๋น„์–ด ์žˆ๋Š” ์„ค์ •์œผ๋กœ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•œ๋‹ค.

cat <<EOF >./example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-redis-config
data:
  redis-config: ""
EOF

์œ„์—์„œ ์ƒ์„ฑํ•œ ์ปจํ”ผ๊ทธ๋งต์„ Redis ํŒŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์™€ ํ•จ๊ป˜ ์ ์šฉํ•œ๋‹ค.

kubectl apply -f example-redis-config.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml

Redis ํŒŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ๋‚ด์šฉ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋‹ค์Œ์˜ ์‚ฌํ•ญ์„ ์—ผ๋‘์— ๋‘”๋‹ค.

  • config ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณผ๋ฅจ์€ spec.volumes[1] ์— ์˜ํ•ด์„œ ์ƒ์„ฑ๋œ๋‹ค.
  • spec.volumes[1].configMap.items[0] ๋‚ด๋ถ€์˜ key ์™€ path ๋Š” config ๋ณผ๋ฅจ์— redis.conf ๋ผ๋Š” ํŒŒ์ผ๋ช…์œผ๋กœ ์ง€์ •๋œ example-redis-config ์ปจํ”ผ๊ทธ๋งต์˜ redis-config ํ‚ค๋ฅผ ๋…ธ์ถœ์‹œํ‚จ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  config ๋ณผ๋ฅจ์€ spec.containers[0].volumeMounts[1] ์— ์˜ํ•ด์„œ /redis-master ์— ๋งˆ์šดํŠธ๋œ๋‹ค.

์ด ๋‚ด์šฉ์€ ์œ„์˜ example-redis-config ์ปจํ”ผ๊ทธ๋งต์˜ data.redis-config ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋“œ ์•ˆ์— ์žˆ๋Š” /redis-master/redis.conf ํŒŒ์ผ์˜ ๋‚ด์šฉ์œผ๋กœ ๋…ธ์ถœ์‹œํ‚ค๋Š” ์ˆœํšจ๊ณผ(net effect)๋ฅผ ๋‚ธ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis:5.0.4
    command:
      - redis-server
      - "/redis-master/redis.conf"
    env:
    - name: MASTER
      value: "true"
    ports:
    - containerPort: 6379
    resources:
      limits:
        cpu: "0.1"
    volumeMounts:
    - mountPath: /redis-master-data
      name: data
    - mountPath: /redis-master
      name: config
  volumes:
    - name: data
      emptyDir: {}
    - name: config
      configMap:
        name: example-redis-config
        items:
        - key: redis-config
          path: redis.conf

์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™•์ธํ•œ๋‹ค.

kubectl get pod/redis configmap/example-redis-config

๋‹ค์Œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

NAME        READY   STATUS    RESTARTS   AGE
pod/redis   1/1     Running   0          8s

NAME                             DATA   AGE
configmap/example-redis-config   1      14s

example-redis-config ์ปจํ”ผ๊ทธ๋งต์˜ redis-config ํ‚ค๋ฅผ ๊ณต๋ž€์œผ๋กœ ๋‘” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ž.

kubectl describe configmap/example-redis-config

redis-config ํ‚ค๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis-config:

kubectl exec ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ๋“œ์— ์ ‘์†ํ•˜๊ณ , ํ˜„์žฌ ์„ค์ • ํ™•์ธ์„ ์œ„ํ•ด์„œ redis-cli ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

kubectl exec -it redis -- redis-cli

maxmemory ๋ฅผ ํ™•์ธํ•œ๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory

๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

1) "maxmemory"
2) "0"

์œ ์‚ฌํ•˜๊ฒŒ, maxmemory-policy ๋ฅผ ํ™•์ธํ•œ๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory-policy

์ด๊ฒƒ๋„ ๊ธฐ๋ณธ๊ฐ’์ธ noeviction ์„ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

1) "maxmemory-policy"
2) "noeviction"

์ด์ œ example-redis-config ์ปจํ”ผ๊ทธ๋งต์— ๋ช‡ ๊ฐ€์ง€ ์„ค์ •๊ฐ’์„ ์ถ”๊ฐ€ํ•ด ๋ณธ๋‹ค.

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-redis-config
data:
  redis-config: |
    maxmemory 2mb
    maxmemory-policy allkeys-lru    

๊ฐฑ์‹ ๋œ ์ปจํ”ผ๊ทธ๋งต์„ ์ ์šฉํ•œ๋‹ค.

kubectl apply -f example-redis-config.yaml

์ปจํ”ผ๊ทธ๋งต์ด ๊ฐฑ์‹ ๋œ ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

kubectl describe configmap/example-redis-config

๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ์„ค์ •๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru

์„ค์ •์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด, kubectl exec ๋ฅผ ํ†ตํ•œ redis-cli ๋กœ Redis ํŒŒ๋“œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•œ๋‹ค.

kubectl exec -it redis -- redis-cli

maxmemory ๋ฅผ ํ™•์ธํ•œ๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory

๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

1) "maxmemory"
2) "0"

์œ ์‚ฌํ•˜๊ฒŒ, maxmemory-policy ๋„ ๊ธฐ๋ณธ ์„ค์ •์ธ noeviction ์„ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory-policy

์œ„์˜ ๋ช…๋ น์€ ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

1) "maxmemory-policy"
2) "noeviction"

ํŒŒ๋“œ๋Š” ์—ฐ๊ด€๋œ ์ปจํ”ผ๊ทธ๋งต์—์„œ ๊ฐฑ์‹ ๋œ ๊ฐ’์„ ์ธ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์„ค์ •๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค. ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค.

kubectl delete pod redis
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml

์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ค์ •๊ฐ’์„ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ณธ๋‹ค.

kubectl exec -it redis -- redis-cli

maxmemory ๋ฅผ ํ™•์ธํ•œ๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory

์ด๊ฒƒ์€ ์ด์ œ ๊ฐฑ์‹ ๋œ ๊ฐ’์ธ 2097152๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

1) "maxmemory"
2) "2097152"

์œ ์‚ฌํ•˜๊ฒŒ, maxmemory-policy ๋„ ๊ฐฑ์‹ ๋˜์–ด ์žˆ๋‹ค.

127.0.0.1:6379> CONFIG GET maxmemory-policy

์ด๊ฒƒ์€ ์›ํ•˜๋Š” ๊ฐ’์ธ allkeys-lru ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

1) "maxmemory-policy"
2) "allkeys-lru"

์ƒ์„ฑ๋œ ์ž์›์„ ์‚ญ์ œํ•˜์—ฌ ์ž‘์—…์„ ์ •๋ฆฌํ•œ๋‹ค.

kubectl delete pod/redis configmap/example-redis-config

๋‹ค์Œ ๋‚ด์šฉ

์ตœ์ข… ์ˆ˜์ • February 11, 2024 at 2:18 AM PST: [ko] Update configure-redis-using-configmap.md (c9daa3a6d1)