[Docker] 쿠버네티스 리소의 관리와 설정

업데이트:

7.1 네임스페이스: 리소스를 논리적으 구분하는 장벽

  • 포드, 레플리카셋, 디플로이먼트, 서비스 등과 같은 쿠버네티스 리소스들이 묶여있는 하나의 가상 공간 또는 그룹
  • 여러 개의 네임스페이스를 사용하면 마치 하나의 클러스터에서 여러 개의 가상 클러스터를 동시에 사용하는 것처럼 느껴짐

네임스페이스 기본 개념 이해

  • 기본적으로 3개의 네임스페이스 존재
    • defalut
      • 자동으로 사용하도록 설정되는 네임스페이스
    • kube-system
      • 쿠버네티스 클러스터 구성에 필수적인 컴포넌트들과 설정값 등이 존재하는 네임스페이스
    • kube-public
  • 여러명이 동시에 사용해야 하는 경우 사용자마자 네임스페이스를 별도로 생성해 사용하도록 설정 가능
  • 용도에 따라 여러 네임스페이스 생성 가능
    • 모니터링, 로드 밸런싱 인그레스 등
  • 네임스페이스의 리소스들은 논리적으로만 구분된 것일 뿐 물리적으로 격리된 것이 아님
    • 서로 다른 네임스페이스에서 생성된 포드가 같은 노드에 존재할 수도 있음
  • 네임스페이스는 라벨보다 더욱 넓은 용도로 사용 가능
    • ResourceQuota라는 오브젝트를 통해 특정 네임스페이스에서 생성되는 포드의 자원 사용량 제한 가능
    • 애드미션 컨트롤러라는 기능을 이용해 특정 네임스페이스에 생성되는 포드에는 사이드카 컨테이너를 붙이도록 설정 가능

네임스페이스의 서비스에 접근하기

  • 같은 네임스페이스 내의 서비스에 접근할때에는 서비스 이름만으로 접근할 수 있음
    • 다른 네임스페이스에 존재하는 서비스에는 서비스 이름만으로 접근할 수 없음
  • 다른 네임스페이스에 존재하는 서비스에 접근하기 위해서는 <서비스 이름="">.<네임스페이스 이름="">.svc 처럼 서비스 이름 뒤에 네임스페이스 이름을 붙여야 됨

네임스페이스에 종속되는 쿠버네티스 오브젝트와 독립적인 오브젝트

  • 포드, 서비스, 레플리카셋, 디플로이먼트는 네임스페이스 단위로 구분 가능
  • 반면에 노드와 같이 쿠버네티스 클러스터에서 사용되는 저수준의 오브젝트는 네임스페이스에 의해 구분되지 않음

7.2 컨피그맵, 시크릿: 설정값을 포드에 전달

  • YAML 파일과 설정값을 분리할 수 있는 컨피그맵과 시크릿이라는 오브젝트 제공
    • 컨피그맵에는 설정값 저장
    • 시크릿에는 노출되어서는 안 되는 비밀값 저장

7.2.1 컨피그맵

컨피그맵 사용 방법 익히기

  • 네임스페이스에 속하기 때문에 네임스페이스별로 컨피그맵 존재

컨피그맵의 값을 컨테이너의 환경 변수로 사용

  • 컨피그맵의 값을 포드의 컨테이너 환경 변수로 가져옴
  • 컨피그맵에 저장된 키-값 데이터가 컨테이너의 환경 변수의 키-값으로서 그대로 사용됨
  • 애플리케이션이 시스템 환경 변수로부터 설정값을 가져온다면 이 방법 사용하는 것이 좋음
  • 컨피그맵이나 시크릿의 값을 변경해도 자동으로 재설정되니 않음, 디플로이먼트의 포드를 다시 생성해야함

컨피그맵의 값을 포드 내부의 파일로 마운트해 사용

  • 컨피그맵의 값을 포드 컨테이너 내부의 특정 파일로 마운트
  • 애플리케이션이 nignx.conf 등의 파일을 통해 설정값을 읽어 들인다면 이 방법을 사용하는 것이 좋음
  • 컨피그맵을 사용하기 위해 볼륨을 사용함
  • 컨피그맵이나 시크릿을 변경하면 파일의 내용 또한 자동으로 갱신 됨
    • 단 이미 실행 중인 애플리케이션의 설정이 자동으로 변경되지는 않음

파일로부터 컨피그맵 생성하기

  • 설정 파일 자체를 컨피그맵으로 사용
    • ex. nginx.conf, mqsql.conf
  • 내용을 통째로 컨피그맵에 저장한 뒤 이를 볼륨 파일로 포드 내부에 제공
  • 여러 개의 키-값 형태의 내용으로 구성된 설정 파일을 한꺼번에 컨피그맵으로 가져올 수도 있음

YAML 파일로 컨피그맵 정의하기

  • YAML 파일의 내용을 출력해 파일로 사용
  • 키-값 데이터가 너무 많아지면 YAML 파일의 길리가 불필요하게 길어짐
  • kustotmize 기능을 사용하면 더욱 편하게 컨피그맵 생성 가능

7.3 시크릿

  • 컨피그맵과 동일하게 사용 가능
  • 컨피그맵과 달리 타입이 존재
    • 목적에 따라 종류 선택

이미지 레지스트리 접근을 위한 docker-registry 타입의 시크릿 사용하기

  • docker login 명령어로 로그인에 성공했을 때 도커 엔진이 자동으로 생성하는 ~/.docker/config.json 파일을 그대로 시크릿으로 가져오기
  • docker-registry 타입 시크릿 직접 생성하기
    • kubernetes.io/dockerconfigjson 타이븡로 설정됨
    • 디플로이먼트 또는 포드 등에서 사설 레지스트리로부터 이미지를 받아올 떄 사용 가능

TLS 키를 저장할 수 있는 tls 타입의 시크릿 사용하기

  • TLS 연결에 사용되는 공개키, 비밀키 등을 쿠버네티스에 자체적으로 저장할 수 있도록 tls 타입 지원
  • 포드 내부의 애플리케이션이 보안 연결을 위해 인증서나 비밀키 등을 가져와야 할 때 시크릿의 값을 포드에 제공하는 방식으로 사용
  • tls 타입으로 시크릿 생성

좀 더 쉽게 컨피그맵과 시크릿 리소스 배포하기

  • YAML 파일로 배포하려면 시크릿의 데이텉를 YAML 파일과 함꼐 저장해 둬야 함
    • 데이터가 많아질수록 바람직하지 않음
  • kustomize 기능을 이용해 YAML 파일로부터 분리 가능
    • 파일의 속성을 별도로 정의해 재사용하거나 여러 YAML 파일을 하나로 묶는 등 다양한 용도로 사용할수 있는 기능

태그:

카테고리:

업데이트:

댓글남기기