본문 바로가기

Kubernetes

Kubernetes Namespace 설계에 관해

 

 

클러스터 구성 후 실제 사용에 들어가기 전 네임스페이스를 설계해야 하는데 어떠한 점을 고려해야 할지 적어본다.

  • 네임스페이스 이름에 환경을 넣어야하는가?
  • 네임스페이스는 어떠한 단위로 나눠야 좋을까?

네임스페이스 이름에 환경을 넣어야하는가?

Yes, 실수 방지를 위해 넣는편이 좋다고 생각함.

클러스터를 구분한다고 하더라도 네임스페이스 이름에 환경을 넣어 다시 한 번 주의를 환기시킬 필요가 있다.

쿠버네티스 사용 시 자신도 모르는 사이 혹은 알면서도 프로덕션 환경에서 작업 혹은 테스트를 하게 되는 경우가 종종 있는데 네임스페이스에 환경을 넣어 모르고 실수 하는 것은 방지할 수 있다.

 

굳이 단점을 뽑자면 Manifest 파일 내에 각 환경을 변수처리하여 네임스페이스 뒤에 붙여주는 수고로움이 있다는 점. 

 

네임스페이스는 어떠한 단위로 나눠야 좋을까?

나눠질 수 있는 기준은 많겠지만 일반적으로 다음과 같은 항목이 자주 사용된다.

  • 구분 없음
  • 환경
  • 서비스(API)

구분 없음 : 한 조직이 쿠버네티스를 테스트 하는 단계에 적합. 실제 서비스 및 개발 단계에 들어가면 많은 불편 사항을 초래할 가능성이 높음.

 

환경 : dev, staging, qa, production 등 각 목적에 맞게 네임스페이스를 구분하는 경우. 회사 전체가 동일 환경을 공유함. 전체 인원이 소규모 팀(20인 미만)이라면 큰 불편 없이 사용할 수 있다. 컨텍스트 전환을 자주 하지 않아도 되는 장점이 있음. 반대로 리소스 검색 시 동시에 많은 결과값이 나와 불편할 수 있다.

각 팀이 같은 이름의 API 혹은 서비스를 갖고 있는 경우 Namespace를 환경으로 구분한다면 문제가 된다.

A팀의 mypage-dev, B팀의 mypage-dev가 있다면 mypage-a-dev, mypage-b-dev로 바꿀 것이 아닌 팀 단위로 네임스페이스를 구분할 것을 고려해볼 타이밍이다. 아니면 API 이름을 바꾸든가 그런데 API 이름 바꾸는 것이 생각보다 번거롭다는 점. 

 

팀 :  어느 정도 규모를 갖춘 회사인 경우 팀 + 환경의 조합으로 네임스페이스를 구성할 수 있다. 타 팀에 의해 리소스가 변경되는 것을 RBAC을 통해 방지 할 수 있다.

예) fashion-dev, fashion-prod, fashion-qa 등

ResourceQuota 등을 팀 별로 관리해야 함. 전체 클러스터 구성 시 필요한 사항. 개인적으론 팀 + 환경으로 구분된 네임스페이스를 오랜 기간 사용했었고 익숙했어서 큰 불편을 느끼진 못했다. 이 당시 API개수는 15~20여개 pod, service, deployment, ingress, networkpolicy, role, service account 등 다양한 리소스를 관리해야 하기에 Manifest 파일의 개수는 점점 늘어나 복잡도 증가.

이 후에 API 단위로 네임스페이스를 구성한 환경에서 일했을 땐 잦은 컨텍스트 변경이 불편하게 느껴짐.

 

서비스(API) : 각 서비스 별로 관리하고 싶은 경우 서비스 + 환경과 같은 조합을 택할 수 있다.

예) web-dev, web-prod, web-qa, search-api-dev, search-api-qa, search-api-prod 등

너무 세분화된 그룹핑은 오히려 관리를 어렵게 하는 측면이 있다고 생각함. ResourceQuota 관리 시 팀 단위보다 복잡.

장점을 생각해보자면 서비스 별로 좀 더 엄격하게 격리(물리적 분리 아니라는 점)된다는 점.

 

적절한 네임스페이스 크기를 설정함으로써 얻을 수 있는 관리상의 이점이 있기에 잘 고려해야함.

 

SRE 및 DevOps 관점에서 조금 더 이야기 하자면 

너무 세분화 된 namespace는 대쉬보드 구성 시 손이 많이가서 불편

CI/CD 파이프라인 구성 시 네임스페이스 별로 작업을 해야하니 작업량 증가. 물론 자동화되어 있는 프로세스라면 큰 차이 없겠지만. 모든 SRE 및 DevOps 팀이 자동화 해놓지는 않았다는 점

 

혹시 이 밖에도 고려하는 부분이 있다면 댓글로 적어주세요. 

 

감사합니다. 

'Kubernetes' 카테고리의 다른 글

Helm(헬름) - 배포판, 로컬 비교하기, diff, values, manifest  (0) 2023.02.02
CKA 취득 후기  (0) 2023.01.27