configmap?
configmap 개념
- Pod 내 Container로 띄운 application ( Redis, apache …) 에서 사용하는 설정 값을 configmap 이라는 독립적인 오브젝트로 분리함
- DEV용, TEST용, PROD용으로 configmap을 따로 관리하여 하나의 동일한 Container로 여러 환경에서 사용할 수 있음
- 수정 배포가 필요한 경우에도 Container 일일이 접속해서 수정하는 게 아니라 사용하는 Configmap을 수정하여 사용할 수 있음
configmap 사용현황
$ kubectl get configmap
NAME DATA AGE
kimdubi-test-redis-cluster-default 1 6d19h
kimdubi-test-redis-cluster-scripts 2 6d19h
- kimdubi-test-redis-cluster-default configmap은 redis.conf 의 내용을 담고 있음
- kimdubi-test-redis-cluster-scripts configmap은 redis health check 용으로 사용하는 script 의 내용을 담고 있음
configmap template을 살펴보자
kimdubi-test-redis-cluster-default
$ kubectl get configmap -o yaml kimdubi-test-redis-cluster-default
apiVersion: v1
data:
redis-default.conf:
"# Redis configuration file example.\n#\n# Note that in order
to read the configuration file, Redis must be\n# started with the file path as
first argument:\n#\n# .
.
.
.
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: kimdubi-test
meta.helm.sh/release-namespace: default
creationTimestamp: "2021-02-21T07:33:55Z"
labels:
app.kubernetes.io/instance: kimdubi-test
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: redis-cluster
helm.sh/chart: redis-cluster-4.3.0
name: kimdubi-test-redis-cluster-default
namespace: default
resourceVersion: "24610"
selfLink: /api/v1/namespaces/default/configmaps/kimdubi-test-redis-cluster-default
uid: bd69754d-bcda-4d8c-b8f7-08ece1567533
.data
- configmap에서 사용할 설정들을 정의하는 부분, 위에선 redis.conf 의 내용을 담고있음
kimdubi-test-redis-cluster-scripts
$ kubectl get configmap kimdubi-test-redis-cluster-scripts -o yaml
apiVersion: v1
data:
ping_liveness_local.sh: |-
export REDISCLI_AUTH=$REDIS_PASSWORD
response=$(
timeout -s 9 $1 \
redis-cli \
-h localhost \
-p $REDIS_PORT \
ping
)
if [ "$response" != "PONG" ] && [ "$response" != "LOADING Redis is loading the dataset in memory" ]; then
echo "$response"
exit 1
fi
ping_readiness_local.sh: |-
export REDISCLI_AUTH=$REDIS_PASSWORD
response=$(
timeout -s 9 $1 \
redis-cli \
-h localhost \
-p $REDIS_PORT \
ping
)
if [ "$response" != "PONG" ]; then
echo "$response"
exit 1
fi
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: kimdubi-test
meta.helm.sh/release-namespace: default
creationTimestamp: "2021-02-21T07:33:55Z"
labels:
app.kubernetes.io/instance: kimdubi-test
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: redis-cluster
helm.sh/chart: redis-cluster-4.3.0
name: kimdubi-test-redis-cluster-scripts
namespace: default
resourceVersion: "24609"
selfLink: /api/v1/namespaces/default/configmaps/kimdubi-test-redis-cluster-scripts
uid: 89b2319a-fd57-475f-9671-deb80023f6b8
.data
redis health check를 위한 ping_liveness_local.sh
redis 사용가능한 상태인지 check 를 위한 ping_readiness_local.sh
위 스크립트를 Pod에 제공하고 있음
livenessProbe: exec: command: - sh - -c - /scripts/ping_liveness_local.sh 5 failureThreshold: 5 initialDelaySeconds: 5 periodSeconds: 5 successThreshold: 1 timeoutSeconds: 5 readinessProbe: exec: command: - sh - -c - /scripts/ping_readiness_local.sh 1 failureThreshold: 5 initialDelaySeconds: 5 periodSeconds: 5 successThreshold: 1 timeoutSeconds: 1