step15. 클러스터 가상화

생성일
Mar 6, 2022 02:42 AM
태그
네임스페이스를 사용하여 k8s 클러스터를 논리적으로 분할하는 방법, 즉 클러스터의 가상화에 대해 알아본다.
먼저 클러스터 가상화가 필요한 이유는? 주어진 자원을 가장 효과적으로 운영하기 위해서 하나의 k8s 클러스터를 운영, 개발용 등 여러개로 분할해서 사용한다.
 

네임 스페이스

네임스페이스를 사용하여 CPU 시간, 메모리 용량 드으이 리소스 할당과, 파드 네트워크 통신의 접근제어도 구분하여 설정할 수 있다.
 
kubectl create ns prod - prod 이름의 네임스페이스 생성
네임스페이스를 만들면 서비스 어카운트 default와 그에 대응하는 시크릿이 만들어진다.
 
 

시크릿과 컨피그맵

애플리케이션의 설정 정보나 패스워드와 같은 인증 정보는 컨테이너에 담지 말고 분리하여 네임스페이스에 저장하고 컨테이너가 읽도록 해야 한다. 그러면 테스트 환경과 프로덕션 환경별로 컨테이너를 별도로 빌드할 필요가 없게 된다. 이미지의 빌드 횟수를 줄이는 것은 의도치 않은 버그를 미연에 방지하는 것과 연결된다. 컨테이너의 불변성을 지키는 것이 중요하다.
네임스페이스에 저장한 설정 정보를 컨피그맵이라고 한다. 그리고 인증 정보와 같이 보안이 필요한 정보를 네임스페이스에 저장한 것을 시크릿이라 한다. 컨테이너에서는 이들 오브젝트 파일 시스템으로 마운트하여 파일로 읽거나 환경 변수로 참조할 수 있다.
 
 

시크릿

테스트환경에서 테스트를 통과한 애플리케이션의 이미지는 가능하면 다시 빌드하지 않고 운영환경에 배포하는 것이 좋다. 그러나 이미지 내부에 시크릿 정보가 담겨있으면 테스트환경의 시크릿을 운영환경의 시크릿으로 변경하기 위해 다시 빌드해야 한다. 이렇게 되면 컨테이너의 불변셩이라는 특징을 살릴 수 없으며 의도치 않은 문제가 발생할 수 있다.
이런 경우 테스트 환경과 운영 환경 각각의 네임스페이스에 시크릿을 만들어 ID와 비밀번호를 저장하도록 한다.
그리고 컨테이너에서는 등록된 시크릿을 환경 변수로 읽도록 구현한다. 그러면 응용 프로그램의 이미지를 다시 빌드할 필요 없이 배포하는 것이 가능하다.
 

메모리와 CPU 할당과 상한 지정

쿠버네티스에서는 네임스페이스마다 CPU나 메모리의 최소 요구량과 최대 사용 제한을 설정할 수 있다. 예를 들어, 2개의 프로젝트가 하나의 k8s 클러스터를 공유하는 경우, 각 프로젝트에 대한 네임스페이스를 만들고 리소스를 할당할 수 있다.
네임스페이스에 리소스를 할당하는 방법은 아래 두가지이다.
  • Resource Quota : 네임스페이스별 리소스의 총 사용량을 제한한다. 여기서의 리소스란 컨테이너의 CPU 시간과 메모리량을 말하며 기동 시에 확보하는 리소스의 합계량 및 상한값을 설정한다.
  • Limit Range : CPU와 메모리 각각의 요구량과 최대량의 기본값을 설정한다.
 
 

Loading Comments...