ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클라우드: 쿠버네티스 컨피그맵(Configmap) 실습하기
    K8S 2021. 3. 31. 01:13

    대부분의 어플리케이션은 설정값을 가지고 있다. 

     

    예를 들어, Nginx 웹서버의 경우, nginx.conf파일에 설정값을 보관하며

     

    이처럼 설정값을 저장하는 방법에 대한 쿠버네티스 오브젝트가 컨피그맵이다.

     

    이번 포스팅은 컨피그맵을 이용하여 설정사항들을 저장하는 다양한 방법에 대해서 알아본다.

     

    < Configmap 생성하기 >

    create configmap명령어를 이용하여 다음과 같이 log-level-configmap이라는 이름의 컨피그 맵을 생성한다.

     

    --from-literal이라는 옵션을 통해 LOG_LEVEL을 key로 하고, DEBUG을 value으로 하는 키-값 한쌍을 생성한다.

     

    kubectl create configmap log-level-configmap --from-literal LOG_LEVEL=DEBUG

     

    kubectl get configmap

     

    또는 다음과 같이 cm으로 컨피그맵을 확인할 수 있다. 

     

     

     

     

    만약 두 쌍의 key-value을 만들고 싶다면 다음과 같이 --from-literal을 한번 더 써준다.

     

    kubectl create configmap start-k8s --from-literal k8s=kubernetes --from-literal container=docker
    

     

     

    < Configmap을 포드에 적용하기 >

     

    configmap을 포드에 적용하는 방법은 크게 두가지로 나뉜다.

     

    1. 컨피그맵의 값을 컨테이너의 환경변수로 사용하는 경우

    2. 컨피그맵의 값을 포드 내부의 파일로 마운트해서 사용하는 경우이다.

     

    두가지 방법에 대해서 알아보자.

     

    1. 컨피그맵을 환경변수로써 사용하기

    먼저 컨테이너의 환경변수로 사용하는 경우부터 살펴보자

     

    (1) configmap 키-값 모두 적용하기 

     

    다음과 같은 yaml파일을 생성해준다.

     

    < all-env-from-configmap.yaml >

    envFrom과 configMapRef에 주목하자.

     

    이는 log-level-configmap이라는 이름의 컨피그 맵과

    start-k8s라는 컨피그맵의 모든 key value값을 환경변수로 설정하는 코드이다.

     

    이제 위에서 위에서 정의한 포드를 생성해준 후 환경변수를 확인한다.

     

    kubectl exec container-env-example env

     

    log-level-configmap의 키 값과

    start-k8의 키 값이 올바르게 환경변수로 설정되어 있음을 알 수 있다.

     

     

     

     

    (2) configmap 키-값 선택적으로 적용하기 

     

    다음과 같이 yaml 파일을 생성해준다.

     

    < selective-en-from-configmap.yaml >

     

    컨테이너에 새롭게 등록할 환경 변수 이름을 ENV_KEYNAME_1, ENV_KEYNAME_2라고 한 후

    ENV_KEYNAME_1에는 log-level-configmap 컨피그맵의 LOG_LEVEL 키 값을 사용하고

    ENV_KEYNAME_2에는 start-k8s 컨피그맵의 k8s 키 값만을 사용한다.

     

     

    포드를 생성해주었을 때 다음과 같은 환경변수를 갖는다.

     

     

    start-k8s를 선택해주었음에도 불구하고, key=k8만 해주었기 때문에

    container=docker은 적용되지 않는 것을 알 수 있다.

     

    2. 컨피그 맵을 파일로 마운트하기

     

    nginx.conf, mysql.conf 등과 같이 설정파일을 통해서 설정값을 읽어오고 싶을 때

    컨피그맵을 파일을 마운트시켜서 사용한다.

     

    다음과 같이 yaml파일을 만들어준다.

     

    <volume-mount-configmap.yaml>

     

    파일을 마운트시켜 사용하기 위해서는 볼륨을 생성하여 컨피그맵을 지정해주어야 한다.

     

    start-k8s 컨피그맵을 지정한 configmap-volume 볼륨을 생성한 후 /etc/config에 마운트한다.

     

    (키 값이 파일의 이름, 키에 대한 값이 파일의 내용으로 저장된다.)

     

     

     

    위에서 만든 yaml을 이용하여 포드를 생성해준후, 

     

    포드의 컨테이너 내부 etc/config 파일을 열어본다.

     

    kubectl exec configmap-volume-pod ls /etc/config

     

     

    config 디렉토리 내부에 container 파일과 k8s파일이 존재하는 것을 알 수 있다.

     

    < 파일로부터 컨피그 맵 생성하기 >

     

    (1) 파일자체를 컨피그맵으로 지정하기

     

    컨피그맵을 볼륨으로 포드에 제공할 때는 대부분 설정파일 자체를 컨피그맵으로 지정하는 경우가 많다.

     

    파일로부터 컨피그맵을 생성하려면 --from-file옵션을 이용한다.

     

    다음과 같이 설정파일로 사용할 파일을 만들어 준다.

     

    < index.html >

     

    create configmap 커맨드와 --from-file 옵션을 이용하여 컨피그맵을 생성한다.

     

    kubectl create configmap index-file --from-file index.html

     

    다음과 같이 파일을 이용하여 컨피그맵을 생성하였다.

     

     

     

     

    (2) 여러개의 키값으로 구성된 파일을 컨피그맵으로 가져오기

     

    다음과 같이 여러개의 키값을 가진 파일을 하나 생성한다.

     

    < multiple-keyvalue.env >

     

    이번에는 --form-env-file 옵션을 이용하여 컨피그맵을 생성한다.

     

    kubectl create configmap from-envfile --from-env-file multiple-keyvalue.env

     

    다음과 같이 여러개의 키를 갖는 컨피그 맵이 생성되었음을 알 수 있다.

     

     

    < 파일로 만들어 컨피그맵 배포하기 >

     

    컨피그맵을 만들어 yaml 파일을 배포해야 할때 -o yaml 커맨드를 이용한다.

     

    kubectl create configmap my-configmap --from-literal mykey=myvalue\
    --dry-run -o yaml > my-configmap.yaml
    

     

    yaml 파일을 생성하고, 이를 다음과 같이 apply 해본다.

     

     

    용찬호 개발자님의 "시작하세요! 도커/쿠버네티스"를 참고했습니다.

    반응형

    댓글

Designed by Tistory.