
미션 #3. Configmap, Secret 응용과제
3개월 전
문제 1
Configmap의 환경변수들을 Secret을 사용해서 작성하고, App에서는 같은 결과가 나오도록 확인해 보세요.
방법 1: dashborad에서 생성
# Secret 리소스 정의
apiVersion: v1
kind: Secret
metadata:
namespace: anotherclass-123 # Secret이 생성될 네임스페이스
name: api-tester-1231-properties # Secret 이름
labels: # 리소스 식별 레이블
part-of: k8s-anotherclass # 소속 프로젝트
component: backend-server # 구성 요소(백엔드 서버)
name: api-tester # 애플리케이션 이름
instance: api-tester-1231 # 인스턴스 식별자
version: 1.0.0 # 버전 정보
managed-by: dashboard # 관리 도구
stringData: # 암호화되지 않은 상태로 값을 입력 (쿠버네티스가 자동으로 base64 인코딩)
spring_profiles_active: "dev" # 스프링 프로필 설정
application_role: "ALL" # 애플리케이션 역할
postgresql_filepath: "/usr/src/myapp/datasource/dev/postgresql-info.yaml" # PostgreSQL 설정 파일 경로
방법 2: kubectl 명령어로 생성(YAML 파일)
# 인라인 YAML을 사용하여 Secret 생성
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
namespace: anotherclass-123 # Secret이 생성될 네임스페이스
name: api-tester-1231-properties # Secret 이름
labels: # 리소스 식별 레이블
part-of: k8s-anotherclass # 소속 프로젝트
component: backend-server # 구성 요소
name: api-tester # 애플리케이션 이름
instance: api-tester-1231 # 인스턴스 식별자
version: 1.0.0 # 버전 정보
managed-by: dashboard # 관리 도구
data: # base64로 인코딩된 값을 직접 지정
spring_profiles_active: $(echo -n "dev" | base64 -w0) # base64로 인코딩된 스프링 프로필
application_role: $(echo -n "ALL" | base64 -w0) # base64로 인코딩된 애플리케이션 역할
postgresql_filepath: $(echo -n "/usr/src/myapp/datasource/dev/postgresql-info.yaml" | base64 -w0) # base64로 인코딩된 파일 경로
EOF
문제 2
반대로 Secret의 DB정보를 Configmap으로 만들어보고 App을 동작시켜 보세요.
방법 1: dashborad에서 생성
# PostgreSQL 정보를 담은 ConfigMap 생성
apiVersion: v1
kind: ConfigMap
metadata:
namespace: anotherclass-123 # ConfigMap이 위치할 네임스페이스
name: api-tester-1231-postgresql # ConfigMap 이름
labels: # 리소스 식별 레이블
part-of: k8s-anotherclass # 소속 프로젝트
component: backend-server # 구성 요소
name: api-tester # 애플리케이션 이름
instance: api-tester-1231 # 인스턴스 식별자
version: 1.0.0 # 버전 정보
managed-by: dashboard # 관리 도구
data:
# 여러 줄의 YAML 데이터를 ConfigMap에 포함 (파이프 문자 | 사용)
postgresql-info.yaml: |
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123" # 주의: ConfigMap은 암호화되지 않으므로 중요 정보는 Secret 사용 권장
방법 2: Deployment에 ConfigMap 볼륨 마운트하기
# kubectl edit 명령어로 Deployment를 직접 수정
kubectl edit -n anotherclass-123 deployments.apps api-tester-1231
# Deployment 리소스 업데이트
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: anotherclass-123 # Deployment가 위치한 네임스페이스
name: api-tester-1231 # Deployment 이름
spec:
template:
spec:
nodeSelector:
kubernetes.io/hostname: k8s-master # 특정 노드에 배포
containers:
- name: api-tester-1231 # 컨테이너 이름
image: 1pro/api-tester:v1.0.0 # 컨테이너 이미지
volumeMounts: # 볼륨 마운트 설정
- name: configmap-datasource # 마운트할 볼륨 이름(아래 volumes 항목과 일치해야 함)
mountPath: /usr/src/myapp/datasource/dev # 컨테이너 내부 마운트 경로
volumes: # Pod 레벨 볼륨 정의
- name: configmap-datasource # 볼륨 이름
configMap: # ConfigMap을 볼륨으로 사용
name: api-tester-1231-postgresql # 사용할 ConfigMap 이름
ConfigMap을 볼륨으로 마운트하면 ConfigMap의 각 키가 파일로 생성
위 예시에는
/usr/src/myapp/datasource/dev/postgresql-info.yaml
파일 생성
댓글을 작성해보세요.