2024년 1월 26일

출처: 쿠버네티스 교과서(길벗)

컨테이너에서 애플리케이션을 실행할 때 대표적인 장점은 다양한 환경 간 차이를 원천적으로 없앨 수 있다는 점. 테스트 환경 ~ 운영 환경까지 전체 배포 절차가 컨테이너 하나로 이미지로 진행

모든 환경에서 완전히 동일한 바이너리가 사용. 따라서 테스트 서버에서 수동으로 설치하고 문서에 기재하는 것을 잊은 의존 모듈 때문에 운영환경에서만 배포가 실패하는 것 같은 일이 원천적으로 방지된다. 이를 위해 컨테이너에 환경별로 설정값을 주입

쿠버네티스에서 컨테이너에 설정값을 주입하는 데 쓰는 리소스는 컨피그맵(ConfigMap)과 비밀값(Secret) 두 가지다. 이 두 리소스는 포맷 제한 없이 데이터를 보유. 데이터는 클러스터 속에서 다른 리소스와 독립적인 장소에 보관된다. 파드 정의에서 컨피그맵과 비밀값의 데이터를 읽어 오도록 설정

파드에 데이터가 전달되는 과정에도 다양한 설정이 가능. 이 장은 설정 관리를 다룬다.

4.1. 쿠버네티스에서 애플리케이션에 설정이 전달되는 과정

컨피그맵과 비밀값 역시 다른 쿠버네티스 리소스와 마찬가지로 kubectl의 create 명령, YAML 포맷으로 기재된 정의를 읽어 생성 가능. 다른 리소스와 달리 컨피그맵과 비밀갑슨 스스로 어떤 기능을 하지는 않는다. 단지 적은 양의 데이터를 저장하는 것이 목적

이들 리소스는 파드로 전달되어 컨테이너 환경의 일부가 되는데, 이 상태에서 컨테이너가 컨피그맵이나 비밀값에 저장된 데이터를 읽을 수 있다. 컨피그맵과 비밀값을 사용해 보기 전에 먼저 설정값을 전달하는 가장 기본적인 수단인 환경 변수를 알아보자.

실습1

환경 변수는 리눅스와 윈도우 등 운영체제가 제공하는 핵심 기능. 환경 변수는 컴퓨터 단위로 설정되며 모든 애플리케이션이 이값을 읽을 수 있다. 아주 일반적으로 쓰기, 모든 컨테이너에서 쿠버네티스나 컨테이너 속 운영체제가 한 두가지 값을 설정.

# ch04 이동
cd ch04

# 설정값 없이 sleep 이미지로 파드 실행
kubectl apply -f sleep/sleep.yaml

별도의 설정 없이 컨테이너의 이미지만 지정한 간단한 파드 생성

# 파드 속 컨테이너에 설정된 몇 가지 환경 변수의 값을 확인
kubectl exec deploy/sleep -- printenv HOSTNAME KIAMOL_CHAPTER

printenv는 환경 변수의 값을 출력하는 리눅스 명령어. HOSTNAME 환경변수는 쿠버네티스가 
파드 이름을 값으로 모든 컨테이너에 설정. 하지만 KIAMOL-CHAPTER 환경 변수는 정의X
그래서 명령어 오류 코드와 함께 종료

Untitled

sleep-with-env.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  selector:
    matchLabels:
      app: sleep
  template:
    metadata:
      labels:
        app: sleep
    spec:
      containers:
        - name: sleep
          image: kiamol/ch03-sleep
          env:                        # 이 아래로 한경 변수 정의
          - name: KIAMOL_CHAPTER      # 새로운 환경 변수의 이름 정의
            value: "04"               # 새로운 환경 변수의 값 정의

환경 변수는 파드의 생애 주기 내내 변하지 않는다.