두 객체는 모두 Pod에 외부 변수를 추가해주는 기능을 가지고 있다. 두 객체의 차이점은 Secret은 데이터를 암호화해서 저장한다는 것이다. 데이터를 컨테이너에서 사용할 때 복호화한다.
cm, configmap, configmaps
secret, secrets
객체에 값을 직접 지정해서 configMap이나 secret을 만드는 방식이다.
data 속성의 값으로 key: value형태의 데이터를 지정한다. value에는 반드시 string값이 들어가야 한다.
config와 마찬가지로 key: value형태의 데이터를 지정한다. value값은 반드시 Base64로 인코딩된 값을 넣어야 한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-01
data:
user: dev
---
apiVersion: v1
kind: Secret
metadata:
name: sec-01
data:
Key: aGVsbG8=
---
apiVersion: v1
kind: Pod
metadata:
name: pod-cm
labels:
type: web
spec:
containers:
- name: container
image: ksp7331/sp-app:1.2
envFrom:
- configMapRef:
name: cm-01
- secretRef:
name: sec-01
위와 같이 설정할 경우 pod-cm의 환경변수 값에 user=dev, Key=hello가 들어가게 된다.
파일을 이용해서 configMap이나 secret을 만드는 방식이다.
kubectl create configmap 명령어로 configMap을 생성할 수 있다.
> echo "World" >> file-c.txt
> kubectl create configmap cm-file --from-file=./file-c.txt
> kubectl describe cm/cm-file
Name: cm-file
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
BinaryData
====
file-c.txt: 16 bytes
위와 같이 파일을 이용해 configMap을 만들면 파일 이름이 key이고 파일 내용이 value인 configMap이 만들어진다.
kubectl create secret generic 명령어로 secret을 생성할 수 있다.
> echo "Hello" >> file-s.txt
> kubectl create secret generic sec-file --from-file=./file-s.txt
> kubectl describe secret/sec-file
Name: sec-file
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
file-s.txt: 16 bytes
configMap을 volume으로 mount해서 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: pod-mount
spec:
containers:
- name: container
image: ksp7331/sp-app:1.1
volumeMounts:
- name: file-volume
mountPath: /mount
volumes:
- name: file-volume
configMap:
name: cm-file
위와 같이 pod를 생성한 후 pod에 들어가보면 configMap을 만드는데 사용했던 파일이 있는것을 확인할 수 있다.