컨피그맵을 사용해서 Redis 설정하기
이 페이지에서는 컨피그맵(ConfigMap)을 사용해서 Redis를 설정하는 방법에 대한 실세계 예제를 제공하고, 컨피그맵을 사용해서 컨테이너 설정하기 태스크로 빌드를 한다.
목적
- Redis 설정값으로 컨피그맵을 생성한다.
- 생성된 컨피그맵을 마운트하고 사용하는 Redis 파드를 생성한다.
- 설정이 잘 적용되었는지 확인한다.
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음의 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
버전 확인을 위해서, 다음 커맨드를 실행kubectl version
.
- 예시는
kubectl
1.14 이상 버전에서 동작한다. - 컨피그맵을 사용해서 컨테이너 설정하기를 이해한다.
실세상 예제: 컨피그맵을 사용해서 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].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
다음 내용
- 컨피그맵 배우기.