Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 63일차

DEV_BLOG 2022. 6. 19. 22:44

수강 인증샷

 

ConfigMap API Resource와 관련된 내용의 클립을 수강하는식으로 챌린지를 진행하였다. Configmap이 파드에 환경변수나 볼륨 형태로 전달하는 용도임을 알게되었고 imperative/declarative 방식으로 configmap을 생성하는 법에 대해 확인할 수 있었다.  어느덧 9주차가 저물고 챌린지의 끝이 눈앞에 보인다..ㅎㅎ;; 다음 포스팅으로는 Secret API Resource과 관련된 포스팅을 할 예정이다.

 

 

 

 

컨피그맵(ConfigMap)

  • 설정 정보를 환경변수 혹은 볼륨의 형태로 파드에 전달하기위한 목적으로 사용
  • 파드에서 직접 환경변수를 관리하지 않고 ConfigMap을 분리하여 목적에 따라 설정 데이터를 다르게 주입 가능

 

ConfigMap의 사용방법

  • ConfigMap의 값을 컨테이너의 환경변수로 사용
  • ConfigMap의 값을 파드 볼륨으로 마운트하여 사용

실습링크는 하단의 링크에 해당한다.

https://github.com/tedilabs/fastcampus-devops/tree/main/3-docker-kubernetes/10-k8s-configmap

$ cd no
$ kubectl apply -f deployment.yaml
$ kubectl exec -it deploy/mysql bash

# deployment.yaml에서 devops로 만들어준 데이터베이스 내용을 확인해본다.
$ mysql -h localhost -u root -p
mysql> show databases;

# 제거
$ kubectl delete -f deployment.yaml

cd ..
cd env-from
cat configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  MYSQL_ROOT_PASSWORD: fastcampus
  MYSQL_DATABASE: devops

특이점은 대부분의 오브젝트들은 spec이라는key를 가지고있었지만 이번 경우에는 data라는 key를 가지고있다.

이것을 deployment의 환경변수로 전달하고자 한다. deployment.yaml의 envFrom-configMapRef의 내용으로 들어가게 된다.

 

 

 

$ kubectl apply -f confignamp.yaml
$ kubectl apply -f deployment.yaml

# 축약어 cm 확인
$ kubectl api-resources | grep configamp

$ kubectl describe cm mysql-config

$ kubectl exec -it deploy/mysql bash

# 명령어 잘 전달되었는지 확인
$ # echo $MYSQL_ROOT_PASSWORD
$ # echo $MYSQL_DATABASE

 

이 경우에도 동일하게 devops db가 존재함을 확인할 수 있다.

 

 

 

$ kubectl delete -f deployment.yaml

$ cd ../env-value-from

$ cat deployment.yaml

...(생략)
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      name: mysql
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              name: mysql-config
              key: MYSQL_ROOT_PASSWORD



$ cat configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  MYSQL_ROOT_PASSWORD: fastcampus
  MYSQL_DATABASE: devops

이번엔 envfrom이 아니라 env를 사용하고, value가 아니라 valueFrom을 사용한다. configmap을 참조하는 것이 아니라 configmap내의 key를 참조한다.

 

 

 

configmap에서 Rootpassword만 참조하였기에 mysql database를 주입하지 않아 devops 데이터베이스를 초기화하지 않은 모습이다.

 

 

 

#볼륨으로 마운트

$ cd ../volume

$ cat deployment.yaml

 

 

volumeMouonts: /tmp/config 위치에 mysql-config라는 볼륨을 명시하여라.

 

volumes : 해당 파드가 사용하게될 볼륨 목록 정리

⇒name: volume 이름정의

⇒하위옵션: 볼륨 드라이버 옵션 설정 (configMap 볼륨을 사용하여 mysql configmap을 참조하도록 설정)

 

mysql-config에 해당하는 configmap이 디렉토리로 마운트되면 하위의 key-value 값이 file의 형태로 만들어진다. (filename : data)

 

 

해당 디렉토리에 가보면 MYSQL_DATABASE와 MYSQL_ROOT_PASSWORD 라는 이름으로 파일이 만들어진 것을 확인할 수 있다.

 

 

 

 

kubectl ConfigMap 생성 명령어 (imperative한 방식)

# my-config 이름의 ConfigMap 생성
$ kubectl create configmap my-config

# my-config 이름의 ConfigMap 생성
$ kubectl create configmap my-config --from-file config.yaml

# my-config 이름의 ConfigMap 생성 - 로컬의 config.yaml 파일의 내용을 config라는 키로 저장
$ kubectl create configmap my-config --from-file config=config.yaml

# my-config 이름의 ConfigMap YAML 출력 - 로컬의 config.yaml 파일의 내용을 config라는 키로 저장
$ kubectl create configmap my-config --from-file config=config.yaml --dry-run -o yaml

 

 

dry-run 옵션은 가짜로 실행하라는 의미이다. 명령어의 결과를 클러스터에 반영하지 말고 어떤결과를 내는지 확인할때 유용하다.

-o yaml 은 yaml 형태로 출력함을 의미한다.

그 외에 “—from-literal key=value “ 같은 옵션을 주게되면 key-value 값이 등록된다.

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.