Cloud Native/K8s

k8s 이론: 구성

lys4321 2026. 2. 23. 18:58

구성 - ConfigMap

  • 설정 데이터를 저장하는 API 오브젝트
  • 컨테이너 내부 코드와 설정을 분리하기 위해 사용
  • ConfigMap 오브젝트 구조
    • data, binaryData 필드를 통해 데이터 담음
    • data 필드는 UTF-8 문자열을 입력하며 binaryData는 이진 데이터를 입력
    • data와 binaryData는 영숫자, '-', '_', '.'만 포함이 가능하며 data와 binaryData의 키는 서로 중복될 수 없다.
    • ConfigMap 이름은 유효한 DNS 서브도메인 형식
    • (+선택)ConfigMap을 불변(immutable)로 선언할 수도 있다.
  • Pod가 ConfigMap을 활용하는 방법
    • 환경변수
      • 컨테이너의 env, envFrom 필드를 이용해 ConfigMap의 특정 키를 환경변수로 주입해 사용가능
      • 볼륨으로 마운트하여 파일로 사용
        • ConfigMap을 볼륨에 지정하고 마운트해 파일 형태로 설정을 읽게 함
        • ConfigMap의 각 키는 filename에 매핑됨
      • 커맨드라인 인수나 컨테이너 명령 내에서 사용
      • 애플리케이션 내부에서 k8s API로 직접 읽기

구성 - Secret

  • 비밀번호나, 토큰, 키 같은 민감한 데이터를 저장하는 API 오브젝트
  • ConfigMap과 비슷하지만 Secret은 비밀 데이터를, ConfigMap은 설정 데이터를 관리
  • Secret 객체 안의 data, stringData 필드에 데이터를 담는다
    • data 에 담는 데이터는 base64로 인코딩된 문자열 입력 필요
    • stringData 에 담는 데이터는 평문 문자열 가능
  • Secret의 이름은 유효한 DNS 서브도메인 형식 이어야 함
  • Secret에는 크기 제한이 있음
  • type 필드를 사용해 종류를 지정할 수 있다.
    • 기본 타입은 Opaque
  • k8s에서 제공하는 빌트인 Secret 타입이 있다
    • kubernetes.io/service-account-token
      • 서비스 어카운트 토큰
    • kubernetes.io/dockerconfigjson
      • 컨테이너 이미지 레지스트리 인증 정보
    • kubernetes.io/basic-auth
      • 기본 인증 자격 증명
    • kubernetes.io/ssh-auth
      • SSH 인증용 키
    • kubernetes.io/tls
      • TLS 인증서와 키
  • 사용자 정의 타입의 Secret을 생성할 수 있다.
    • type 필드에 식별 문자열 입력
  • Pod 에서 Secret을 사용하는 방법
    • 볼륨으로 마운트하여 파일 형태로 사용
    • 환경 변수로 사용
    • 컨테이너 이미지 pull 시, 인증 정보로 사용
  • 주의
    • Secret 객체는 API 서버의 기본 저장소에(예 : etcd)에 암호화 없이 저장됨
      • Encryption at Rest (저장 시 암호화) 활성화
      • 최소 권한 원칙 기반의 접근제어(RBAC) 설정
      • 필요한 컨테이너에만 Secret을 노출하도록 설정
      • 외부 시크릿 저장소 사용 고려
        등을 통해 보안성을 강화
    • Secret가 마운트된 노드는 kubelet이 파일을 tmpfs위에 마운트하여 영구 스토리지에 남지 않게 함
      => Pod와 라이프사이클 동일

구성 - Pod 및 컨테이너 리소스 관리

  • k8s 에선 컨테이너가 사용하는 컴퓨트 자원을 리소스로 취급
    • linux 워크로드에선 huge page 메모리 블록 단위 리소스도 지정 가능
  • requests, limits 형태로 컨테이너 spec에 지정 가능
    => 스케줄링 및 런타임 격리에서 사용
  • 스케줄링과 리소스 격리에서의 동작 방식
    • Pod 생성 시, 스케줄러는 각 노드의 가용 자원과 요청한 리소스의 합을 비교해 Pod를 어니 노드에 둘지 결정
    • 컨테이너 런타임은 limits 를 기준으로 격리를 적용
    • 빈 디렉터리 볼륨 타입 중 emptyDir를 메모리기반(tmpfs)으로 사용하는 경우 사용량도 메모리 리소스 사용량에 포함
  • 리소스 단위와 표현방식
    • cpu
      • 소수점이 없는 수치로 지정
    • milli-cpu
      • 예시로 250m이나 0.5cpu 식으로 표현
    • 메모리
      • 바이트 단위로 지정되며 Gi, Ki 같은 접미사 사용가능

구성 - Liveness, Readiness, Startup Probe

  • k8s 는 컨테이너 상태 점검을 위해 Probe란 기술을 쓰며 종류로는 Liveness, Readiness, Startup 이 있다.
  • Liveness Probe
    • 컨테이너가 살아있는지 판단
    • 내부적으로 deadlock 에 빠지거나 응답하지 않는 경우 감지
    • 이를 반복 실패 시, 컨테이너는 재시작
    • Liveness 는 Readiness 의 성공여부를 기다리지 않는다.
  • Readiness Probe
    • 트래픽을 처리할 준비가 됬는지 판단
    • 이를 실패 시, Pod를 트래픽 대상에서 제외하지만 컨테이너는 재시작 하지 않음 그저 연결만 끊음
    • 컨테이너 라이프사이클 동안 주기적으로 실행
  • Startup Probe
    • 애플리케이션이 제대로 시작이 되었는지 판단
    • 이것이 성공할 때 까지 다른 Probe는 실행되지 않음
    • Pod 시작 시점에만 실행되는 Probe

'Cloud Native > K8s' 카테고리의 다른 글

k8s 이론: 스케줄링  (0) 2026.02.23
k8s 이론: 보안  (0) 2026.02.23
k8s 이론: 스토리지  (0) 2026.02.23
k8s 이론: 서비스, 로드밸런싱, 네트워킹  (0) 2026.02.23
k8s 이론: 워크로드  (0) 2026.02.23