환경 변수 설정
개별 환경 변수 설정
Kubernetes에서 환경변수(ConfigMap과 Secret)는 애플리케이션 구성 및 비밀 정보를 관리하는 두 가지 핵심 리소스이다. 이 두 리소스는 애플리케이션 컨테이너에서 환경 변수를 설정하거나, 파일 시스템에 매핑하거나, 명령줄 인자로 제공할 수 있는 데이터를 저장하는 데 사용된다.
Kubernetes 환경에선 Pod를 생성할 때 Pod내에서 사용할 환경변수를 미리 지정해줄 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
env:
- name: DATABASE_HOST
value: "redis.example.com"
- name: DATABASE_PORT
value: "6379"
단일 Pod를 구성할 때에는 추가적인 리소스를 필요하지 않기 때문에 해당 방법은 간단함 측면에서 좋을 수 있다.
하지만 여러 Pod 또는 애플리케이션에서 동일한 환경 변수를 설정해야 할 때 각 Pod 정의마다 중복해서 작성해야 하고, 또 변경이 있다면 제각각 적용해줘야 한다. 즉 유연성과 재사용성이 떨어질 수 있다. 또 가독성 측면에서 yaml 파일 자체의 길이가 길어질 수 있으므로 좋지 못하다.
그럴 떄 사용할 수 있는게 바로 Configmap이다.
Configmap을 이용한 환경 변수 설정
ConfigMap은 환경 설정 값을 중앙에서 관리할 수 있는 쿠버네티스 리소스이다. 여러 Pod나 컨테이너가 ConfigMap에서 값을 가져와 사용할 수 있으므로, 관리 효율성이 높아진다.
ConfigMap은 YAML 파일을 통해 정의하거나 kubectl 명령어로 생성할 수 있다.
YAML 파일을 통한 Configmap 생성
먼저 redis_config.yaml 파일을 작성한다.
apiVersion: v1
kind: ConfigMap
metadata:
name: redis_config
data:
DATABASE_HOST: "redis.example.com"
DATABASE_PORT: "6379"
그 다음 YAML 파일을 사용하여 Configmap Resource를 생성해준다.
kubectl apply -f redis_config.yaml
Kubectl command로 Configmap 생성
--from-literal 옵션을 사용하여 키=값 쌍을 설정한다.
kubectl create configmap redis_config --from-literal=DATABASE_HOST=redis.example.com --from-literal=DATABASE_PORT=6379
위 두 방식으로 만든 Configmap은 모두 다음 명령어로 확인 가능하다.
kubectl get configmap
Pod에서 Configmap 사용
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
envFrom:
- configMapRef:
name: redis_config
Configmap과 개별 환경 변수 설정 비교
항목 | Configmap | 개별 환경 변수 설정 |
관리 방식 | 중앙 집중식 관리, 여러 Pod에서 재사용 가능 | 각 Pod 정의에서 개별적으로 설정 |
재사용성 | 여러 Pod에서 참조 가능 | 재사용 불가, Pod마다 중복 설정 필요 |
구성 변경 | ConfigMap만 수정하면 적용됨 | 모 든 Pod 정의에서 각각 수정 필요 |
환경 변수 관리 복잡성 | 환경 변수가 많아도 일관성 있게 관리 가능 | 변수가 많아지면 관리가 어려워짐 |
pod 업데이트 | 재배포 없이 환경 변수 값 변경 가능 | 환경 변수를 변경하려면 Pod를 다시 배포해야 함 |
Secrets
앞의 환경변수 예제에서는 노출되어도 상관없는 정보를 저장한다. db open port, db name 등 하지만 외부에 노출되어선 안되는 정보를 어떻게 환경변수처럼 사용할 수 있을까? 그 때 사용되는 것이 바로 Secret이다.
Secret은 비밀번호, API 키, 인증서와 같은 민감한 정보를 저장하는 데 사용된다. Secret은 기본적으로 Base64로 인코딩되며, 암호화된 방식으로 저장될 수 있다.
YAML 파일을 통한 Secret 생성
먼저 redis_secret.yaml 파일 작성한다.
다만 직접 value 값을 base64로 인코딩해서 저장해야 한다는 번거로움이 존재한다.
apiVersion: v1
kind: Secret
metadata:
name: redis-secret
type: Opaque
data:
redis-password: c29tZXBhc3N3b3Jk # "somepassword"를 base64로 인코딩한 값
그 후 kubectl 명령어로 secret resource를 생성한다.
kubectl apply -f redis-secret.yaml
Kubectl command로 Secret 생성
kubectl create secret generic redis-secret --from-literal=redis-password=somepassword
위 명령어는 redis-password라는 키에 "somepassword" 값을 저장한 Secret을 생성한다. 이 값은 자동으로 Base64로 인코딩되어 저장된다.
Pod에서 Secret 사용
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
envFrom:
- secretRef:
name: redis-secret
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Drain, Cordon and Uncordon (0) | 2024.10.23 |
---|---|
Kubernetes InitContainer (0) | 2024.10.23 |
Kubernetes Metrics Server 구축 (0) | 2024.10.20 |
Kubernetes 환경에서의 Monitoring (3) | 2024.10.20 |
Kubernetes Static Pod & Control Plane (0) | 2024.10.18 |