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