패스트캠퍼스 캐시백 챌린지 63일차
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 값이 등록된다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.