본문 바로가기

AI Feed
Tech & Product/AI, 더 깊게

AI Pub 개발자가 소개하는: Kubernetes Admission Controller

안녕하세요, 에디터 TN입니다. 이번 달 [AI, 더 깊게] 에서는 AI Pub의 기반이 되는 쿠버네티스에 대해 알아보겠습니다. TEN에서 제공하는 AI Pub은 쿠버네티스(Kubernetes) 기반 플랫폼입니다. AI의 라이프사이클을 기준으로, AI Pub Dev는 개발과 학습, AI Pub Ops는 배포 및 운영에 초점이 맞춰져 있습니다.

AI Pub Dev는 클라우드 및 온프레미스 클러스터에서 다수의 AI 연구자가 GPU 자원을 활용하고 관리 및 모니터링할 수 있는 플랫폼입니다. AI 워크로드의 오케스트레이션과 팀 및 클러스터 전반의 하드웨어 리소스 관리 및 가상화를 자동화하며, GPU 오케스트레이션 기능을 통해 GPU를 더욱 효율적으로 사용할 수 있습니다.

AI Pub Ops는 AI 서비스를 생성, 배포, 중지, 삭제하는 기능을 GUI로 제공하여 AI 운영 업무를 지원합니다. GPU 1개를 100분할 하여 1% 단위로 AI 서비스에 할당할 수 있습니다. 그 결과 AI 서비스에 대한 최적의 리소스 운용이 가능하고 서비스 운영 비용을 절감할 수 있습니다.

 

 

쿠버네티스(Kubernetes)는 그 범용성과 활용도에 비해, 사전에 공부해야 할 것이 많은 플랫폼이기도 합니다. AI를 개발하는 사람들조차 쿠버네티스를 십분 활용하지 못하는 경우도 종종 볼 수 있습니다. 물론, 이런 분들을 위해 AI Pub이 존재합니다. 두 플랫폼은 수작업이 요구되었던 Kubernetes 기반의 AI 관련 기능들을 효율적으로 사용할 수 있도록 하고 있기 때문입니다. 하지만 AI Pub으로 쿠버네티스 기반 업무를 쉽게 할 수 있다고 해도, AI와 관련된 각 분야 개발자나 기획자는 쿠버네티스에 대해서 좀 더 알 필요가 있습니다. [AI, 더 쉽게]에서 쿠버네티스 도구를 소개할 때 쿠버네티스에 대해 간단히 언급한 적이 있었습니다. 그 콘텐츠를 아래에서 확인하실 수 있습니다.

👉 쿠버네티스, 오픈소스 도구로 더 알차게 쓰는 법!

 

 

 

[ 쿠버네티스와 오케스트레이션 ]

아시겠지만, 이 이미지 속 화물 컨테이너를 오케스트레이션한다는 의미는 아닙니다.

쿠버네티스는 컨테이너 오케스트레이션 플랫폼입니다. 오케스트라에서 지휘자가 각 악단을 조율하듯이, 쿠버네티스는 컨테이너화된 어플리케이션을 조율하여 자동화시킵니다. 이러한 오케스트레이션의 특징을 잘 비춰주는 것이 사용자가 원하는 상태를 정의하고, 쿠버네티스가 그 상태를 유지하도록 하는 선언형(Declarative) 접근법입니다. 

이러한 선언형 방식은 명령형(Imperative) 접근 방식과는 다릅니다. 명령형은 주요 관심사가 ‘원하는 상태를 어떻게(how) 만드는가’이지만 선언형은 ‘원하는 상태’에 초점을 맞춥니다. 쿠버네티스에서는 명령형과 선언형 접근 방식 모두 지원합니다. 사용자는 kubectl을 이용해 CLI 환경에서 명령어를 사용할 수 있고, 앞서 언급한 yaml 파일로 리소스 스펙을 정의할 수 있습니다.

 

 

 

[ 쿠버네티스의 요청 처리 ]

출처: https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/

쿠버네티스 API 서버는 사용자로부터 요청을 받아서 특정 작업을 수행하게 됩니다. 요청의 발생부터 작업 반영까지의 프로세스에서 여러 단계를 거치게 됩니다. 먼저, 해당 요청에 대해 인증/인가 과정을 거칩니다. 이후, Admission Controller가 해당 요청에 대해 사전에 정의된 규칙에 따라 수정 및 검증 작업을 수행합니다. 검증을 통과한 요청은 API 서버에게 전달되며, API 서버는 요청에 대한 작업을 수행하여 클러스터에 필요한 작업을 수행하게 됩니다.

 

 

 

[ 쿠버네티스에는 어떤 컨트롤러가 있을까 ]

쿠버네티스 클러스터에서도 기본적으로 사용되는 Admission Controller들이 있습니다. 쿠버네티스 객체에 대해 Default Property를 설정하거나 형식에 대한 검증, 보안 정책 적용 및 리소스 할당 제한 등의 역할을 수행합니다.

 

minikube의 kube-apiserver 참고

실제 쿠버네티스의 Admission Controller 몇 가지를 소개하겠습니다. Pod는 컨테이너로 구성되며, 해당 컨테이너의 이미지가 필요합니다. 쿠버네티스는 모든 파드가 이미지를 내려받는 정책(Image Pull Policy)을 강제합니다. 사용자가 Deployment 스펙에 Image Pull Policy를 명시하지 않더라도 Pod의 스펙에 ImagePullPolicy가 Always로 설정되어 있음을 확인할 수 있습니다. 이를 통해, 클러스터에서 컨테이너가 시작하기 전에 항상 이미지가 풀링 되어 사용할 수 있는 환경이 구성되게 됩니다. 이러한 과정은 AlwaysPullImages 라는 Mutating Admission Controller에 의해 적용됩니다.

다른 사례로, 사용자가 정의한 객체 스펙에 Namespace를 지정하였지만, 해당 Namespace가 존재하지 않을 수 있습니다. 이러한 경우, 쿠버네티스의 NamespaceExists라는 Validating Admission Controller가 요청에 정의된 Namespace가 없다면 해당 요청을 거절하도록 합니다. 이외에도 쿠버네티스는 다양한 Controller들을 기본적으로 사용하고 있으며, 쿠버네티스 웹에서 제공하고 있는 도큐먼트 페이지에서 확인할 수 있습니다.

👉 Kubernetes - What does each admission controller do?

 

 

 

[ Admission Controller, 어떻게 활용하면 좋을까 with Resource Group Controller ]

TEN의 Resource Group Controller GitHub 페이지 (출처: https://github.com/ten1010-io/resource-group-controller)

쿠버네티스에서는 kube-system, kube-public, kube-node-lease, default와 같은 네임스페이스를 통해서 클러스터 내의 오브젝트를 격리하도록 하고 있습니다. 이러한 격리 메커니즘을 통해서 리소스의 용도와 목적에 따라 관리할 수 있습니다. 하지만, 네임스페이스의 범위는 제한적입니다. 노드와 퍼시스턴트 볼륨 등과 같은 클러스터 범위의 오브젝트에 대해서는 격리 메커니즘을 적용할 수 없습니다.

TEN에서는 Admission Controller와 Custom Resource를 활용한 Resource Group Controller를 구현해 오픈소스로 공개하고 있습니다. Resource Group Controller를 통해 쿠버네티스 객체 할당 작업을 자동화하고 있습니다. 추상화된 Custom Resource에 네임스페이스와 타겟 노드를 정의하여 네임스페이스를 기반으로 특정 리소스가 특정 노드에만 할당되도록 합니다. Resource group controller는 TEN의 GitHub에서 확인하실 수 있습니다.

👉 TEN의 Resource Group Controller 오픈 소스 공개 GitHub 페이지

 

 

 

TEN은 AI 인프라 전문기업으로서, 여러 AI 기업이 AI로 가치를 실현하는 과정에서 참고하실 수 있도록 오픈 소스 소프트웨어를 종종 공개하고 있습니다. Resource Group Controller는 이번 달 콘텐츠 주제인 쿠버네티스와 연관되어 있어 소개해 드렸습니다만, 이외에도, Java Spring 스택 기반의 IAM(Identity and Access Management) 오픈 소스 소프트웨어인 Coaster Auth가 있습니다.

AI가 주목받고 있지만 오래 개발하고 연구한 분야는 아니기에, 오픈 소스 등 상호 정보 교환 및 성장이 필요합니다. 쿠버네티스와 같은 플랫폼도 많이 안정화되어 있지만, AI를 개발 및 배포, 운영하려는 과정에서 신규 사용자가 늘다 보니, 정보 탐색과 교류가 절실하지요. TEN이 그 과정에서 도움이 되기를 바랍니다.

 

 

 

- 6월의 [AI, 더 깊게] 콘텐츠는 TEN의 인공지능 플랫폼 개발팀 박준우 주임연구원의 도움으로 작성되었습니다.-

 

* 참고자료

1. Kubernetes - What does each admission controller do?:
 https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#what-does-each-admission-controller-do

2. Kubernetes - Dynamic Admission Control:
 https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/

3. Kubernetes - A Guide to Kubernetes Admission Controllers: 
 https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/
4. Kubernetes - Admission Controllers Reference:
 https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/