[Docker] 쿠버네티스 리소의 관리와 설정
업데이트:
7.1 네임스페이스: 리소스를 논리적으 구분하는 장벽
- 포드, 레플리카셋, 디플로이먼트, 서비스 등과 같은 쿠버네티스 리소스들이 묶여있는 하나의 가상 공간 또는 그룹
- 여러 개의 네임스페이스를 사용하면 마치 하나의 클러스터에서 여러 개의 가상 클러스터를 동시에 사용하는 것처럼 느껴짐
네임스페이스 기본 개념 이해
- 기본적으로 3개의 네임스페이스 존재
- defalut
- 자동으로 사용하도록 설정되는 네임스페이스
- kube-system
- 쿠버네티스 클러스터 구성에 필수적인 컴포넌트들과 설정값 등이 존재하는 네임스페이스
- kube-public
- defalut
- 여러명이 동시에 사용해야 하는 경우 사용자마자 네임스페이스를 별도로 생성해 사용하도록 설정 가능
- 용도에 따라 여러 네임스페이스 생성 가능
- 모니터링, 로드 밸런싱 인그레스 등
- 네임스페이스의 리소스들은 논리적으로만 구분된 것일 뿐 물리적으로 격리된 것이 아님
- 서로 다른 네임스페이스에서 생성된 포드가 같은 노드에 존재할 수도 있음
- 네임스페이스는 라벨보다 더욱 넓은 용도로 사용 가능
- 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 파일을 하나로 묶는 등 다양한 용도로 사용할수 있는 기능
댓글남기기