Crossplane은 Kubernetes를 컨트롤 플레인으로 사용해서 클라우드 리소스를 관리하는 프로젝트입니다. 다시 말하면 AWS, GCP, Azure 같은 클라우드 프로바이더에서 서버, 블록 스
Crossplane은 Kubernetes를 컨트롤 플레인으로 사용해서 클라우드 리소스를 관리하는 프로젝트입니다. 다시 말하면 AWS, GCP, Azure 같은 클라우드 프로바이더에서 서버, 블록 스토리지, 데이터베이스 등을 띄워서 관리할 때 Kubernetes 클러스터에 Custom Resource를 배포해서 관리하게 하는 것입니다. Kubernetes를 많이 사용하더라도 대부분은 수십개의 CR을 배포해서 운영하는게 일반적이지만 Crossplane을 쓰게 된다면 수백개의 CR이 필요하게 됩니다. 이를 위해서 Kubernetes가 수백개의 클러스터가 생겼을 때 어떤 부분이 병목이 되는지 찾아가면서 성능 개선을 해나간 과정을 정리한 글입니다. 클라인트 측 문제 - CR마다 API 엔드포인트를 하나씩 가지게 되므로 모든 API 엔드포인트를 찾아내려고 수백개의 HTTP 요청이 만들어지게 됩니다. - 클라이언트에 rate limt이 있어서 이를 조정했습니다. - 클라이언트에 캐시 파일을 조회할 때 성능 문제가 있어서 이를 개선했습니다. - 차후에는 전체 API를 한번에 배포할 수 있도록 API를 제공하고 클라이언트 rate limit 서버에서 Queue와 트래픽 흘리기로 보호조치를 할 예정이라고 합니다. 서버측 문제 - CRD를 새로 등록하면 OpenAPI 스키마를 생성하는데 이때문에 성능 문제가 생겨서 OpenAPI 스키마를 미리 만들지 않고 요청일 들어올 때 만들도록 수정했습니다. - etcd 클라이언트에서 zap 로거를 CRD 마다 생성하게 되어 CRD마다 4MiB의 메모리를 사용한다는 것을 발견 하나의 로거를 공유하도록 수정했습니다.