쿠버네티스 설정 정보를 저장하는 리소스
쿠버네티스 컨테이너를 정의할 때, ENTRYPOINT 와 CMD 둘 다 재정의 할 수 있다.
kind: Pod
spec:
containers:
- image: some/image
command: ["/bin/command"]
args: ["arg1","arg2","arg3"]
command
는 컨테이너 안에서 실행되는 실행파일args
는 실행파일에 전달되는 인자를 의미환경 변수는 파드 레벨이 아닌 컨테이너 레벨로 정의한다. 그래서 아래 파드 yaml 파일 처럼 환경 변수를 컨테이너 정의해 포하해서 전달한다.
apiVersion: v1
kind: Pod
metadata:
name: fortune2s
spec:
containers:
- image: luksa/fortune:env
env:
- name: INTERVAL
value: "30"
name: html-generator
또한 다음과 같이 변수 값에서 다른 환경 변수를 참조 가능하다.
env:
- name: FIRST_VAR
value: "foo"
- name: SECOND_VAR
value: "$(FIRST_VAR)bar"
이렇게 되면 "$(FIRST_VAR)bar" 는 foobar 로 읽힌다
하지만 이것은 개발로 치면 하드코딩이다. 값을 가져오는 것 자체는 효율적이지만 운영과 개발 등 나눠져 있는 환경을 위해 서로 분리된 파드 정의가 필요하다
그럴때 사용하는 것이 Configmap
이다
쿠버네티스에서는 설정 옵션을 컨피그맵이란 설정을 키벨류로 구성된 맵형 오브젝트로 분리할 수 있다.
애플리케이션 컨테이너가 포함되어 있는 파드는 컨피그맵을 이름으로 참조하기 때문에 각 환경에 맞는 설정을 사용할 수 있다.
configmap을 생성하고 사용하는 방법은 여러가지가 있다
첫번째는 우리에게 익숙한 kubectl 명령어를 사용해 변수를 넣어 configmap 을 생성하는 것이다
kubectl create configmap sample-config --from-literal=sleep-interval=25
위의 명령어를 사용하면 sleep-interval=25 라는 변수가 생성된다
여러개의 키벨류를 넣고 싶으면 아래처럼 해주면 된다
kubectl create configmap sample-config --from-literal=sleep-interval=25 --from-literal=mystate=sleeping
또한 yaml 파일 기반으로 생성할 수도 있다
kubectl get configmap sample-config -o yaml > sample-config.yaml
로 yaml 파일을 추출한 뒤
삭제하고(kubectl delete -f) 생성(kubectl create -f) 해보자
apiVersion: v1
data:
sleep-interval: "25"
kind: ConfigMap
metadata:
creationTimestamp: "2021-09-15T13:25:53Z"
name: sample-config
namespace: default
resourceVersion: "1694720"
uid: 2e02fc38-92a8-4d4b-b5d4-5ff61e0e524f
또한 이렇게 일일히 값을 줄 수도 있지만 파일을 참조하게 하여 바라보게 컨피그맵을 생성할 수 있다.
kubectl create configmap sample-file-config --from-file=file.conf
이러면 명령어를 실행한 디렉토리에서 file.conf 를 찾아서 적용한다
또는 디렉토리의 모든 파일도 아래의 명령어로 가져와 적용할 수 있다
kubectl create configmap my-config --from-file=/path/to/dir
위의 두개의 옵션을 섞어쓸 수도 있다