회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
쿠버네티스는 계속 고도화되고 있어서 이를 분석하고 조치하는 것은 다양한 기반 지식을 필요로 합니다. 작년에 이어 올해도 인기 있는 인공지능(AI, Artificial Intelligence)을 이용해서 쿠버네티스를 분석하고 이에 맞는 조치를 할 수 있습니다.
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
쿠버네티스는 계속 고도화되고 있어서 이를 분석하고 조치하는 것은 다양한 기반 지식을 필요로 합니다. 작년에 이어 올해도 인기 있는 인공지능(AI, Artificial Intelligence)을 이용해서 쿠버네티스를 분석하고 이에 맞는 조치를 할 수 있습니다.
해당 프로젝트의 이름은 K8sGPT로, 이미 요즘IT에서 대략 1년 전 “ChatGPT로 쿠버네티스 관리하는 방법”이라는 글을 통해 소개된 적이 있습니다. 간단한 사용성에 대해서 소개하는 글이었는데, 이 글에서 그에 더해 추가적으로 설명하고자 하는 것은 다음과 같습니다.
앞서 K8sGPT를 통한 쿠버네티스 AIOps의 가능성 1부에서는 K8sGPT에서 지난 1년간 보여준 변화를 소개했습니다. 이번 글에서는 공개된 AI 제공자를 사용하는 게 아닌 ‘나만의 AI 제공자를 사용하는 법’을 소개하고 K8sGPT의 미래 전망에 대해 나름대로의 생각을 공유하도록 하겠습니다.
기업의 데이터라면 어떤 종류든 유출되는 것이 매우 민감한 문제일 수 있습니다. 이에 따라 k8sGPT도 --anonymize 옵션을 통해서 민감한 정보가 유출되지 않도록 지원하지만, 그럼에도 불구하고 공개된 AI 제공자를 사용하는 것 자체에 우려가 있습니다.
--anonymize Anonymize data before sending it to the AI backend. This flag masks sensitive data, such as Kubernetes object names and labels, by replacing it with a key. However, please note that this flag does not currently apply to events. |
따라서 기업 입장에서는 기업에서 접근하고 관리할 수 있는 AI 제공자를 구성하고 사용할 필요가 있는데, 이를 위해서 K8sGPT는 localai라는 제공자를 설정할 수 있습니다. 이름은 local이지만 이를 활용하면 본인의 AI 서비스를 제공하는 위치에 있는 API에 호출해서 결과를 가지고 오는 구조 이므로 꼭 local 국한되지 않습니다.
자세한 내용은 실습을 통해서 확인하겠습니다!
앞서 발행된 K8sGPT를 통한 쿠버네티스 AIOps의 가능성 1부에 이어, 2부를 진행한다면, 가장 먼저 필요한 작업은 기능을 확장했던 trivy를 비활성화 시키는 것입니다. v0.3.28까지는 기능을 확장한 경우 필터를 사용하지 않으면 정상적으로 사용하기 어렵습니다.
따라서 우선 활성화시킨 trivy를 비활성(deactivate)화 시키겠습니다.
비활성화한 후에 현재 활성화된 기능이 있는지 확인합니다.
K8sGPT에 나만의 AI 제공자를 구성하기 위해서는 우선 로컬에 LLM 모델이 구성 및 실행되어 있어야 합니다. 여기서 꼭 로컬일 필요는 없으나, K8sGPT가 요청할 수 있는 곳에 AI API가 동작하고 있어야 합니다. 이를 이해하기 위해서 간단히 K8sGPT가 어떻게 동작하는지를 다음의 그림으로 표현하였습니다.
지금까지의 과정에서는 공개된 AI 서비스 제공자(google, cohere 등)가 설명을 진행해줬고, 이를 공개된 AI 서비스 제공자가 아닌 내가 직접 구성한 AI 서비스 제공자로 바꾸는 것이 핵심입니다. 이를 위해 K8sGPT는 localai라는 제공자를 가지고 있으며, 해당 제공자는 API 주소을 입력하면 여기에 질의하여 해당 결과를 반환해 줍니다.
이 과정을 진행하기 위해서 가장 먼저 필요한 것은 AI 서비스 제공자를 만드는 것입니다. 이것은 매우 복잡할 수도 있으나, 간단한 테스트를 위해서 저희가 필요한건 AI 모델의 실행과 해당 모델에게 요청할 수 있는 API 주소 2가지 입니다.
이 2가지를 손쉽게 구현할 수 있는 도구로는 ollama가 있습니다. ollam는 로컬 환경에 대규모 언어 모델(LLM, Large Language Models)을 손쉽게 구현할 수 있도록 도와줍니다.
우선 다음의 사이트를 통해서 현재 로컬 환경에 맞는 ollama를 설치합니다.
설치를 완료했다면 다음과 같이 ollam를 실행할 수 있게 됩니다.
ollama를 통해서 LLM를 실행하는 방법은 크게 2가지가 있습니다. (만약 도커에 익숙하시다면 유사한 느낌이 드실 겁니다.)
첫 번째는 모델을 내려받고 저장할 수 있는 pull입니다. pull 명령을 통해서 모델을 내려받는 과정은 매우 간단하고 쉽습니다.
내려받은 모델은 다음의 위치에 저장됩니다.
내려받은 모델은 ollama list를 통해서 확인이 가능합니다.
내려받을 수 있는 대표 모델은 다음과 같습니다.
Model | Parameters | Size | Download |
Llama 2 | 7B | 3.8GB | ollama run llama2 |
Mistral | 7B | 4.1GB | ollama run mistral |
Dolphin Phi | 2.7B | 1.6GB | ollama run dolphin-phi |
Phi-2 | 2.7B | 1.7GB | ollama run phi |
Neural Chat | 7B | 4.1GB | ollama run neural-chat |
Starling | 7B | 4.1GB | ollama run starling-lm |
Code Llama | 7B | 3.8GB | ollama run codellama |
Llama 2 Uncensored | 7B | 3.8GB | ollama run llama2-uncensored |
Llama 2 13B | 13B | 7.3GB | ollama run llama2:13b |
Llama 2 70B | 70B | 39GB | ollama run llama2:70b |
Orca Mini | 3B | 1.9GB | ollama run orca-mini |
Vicuna | 7B | 3.8GB | ollama run vicuna |
LLaVA | 7B | 4.5GB | ollama run llava |
Gemma | 2B | 1.4GB | ollama run gemma:2b |
Gemma | 7B | 4.8GB | ollama run gemma:7b |
(출처: ollama github 페이지)
위의 모델 이외에도 ollama 라이브러리 사이트를 통해서 검색도 가능합니다.
두 번째는 모델을 내려받고 실행할 수 있는 run입니다. 이때 모델을 이미 내려받은 상태라면 내려받는 과정이 없이 바로 실행됩니다. 가장 작은 모델 중에 하나인 gemma:2b를 실행하겠습니다.
이렇게 해서 모델이 실행되고 나면, openai 포맷으로 API 요청을 할 수 있습니다. 테스트를 위해서 새로운 창을 열고 curl 명령을 통해서 실행합니다.
API 요청을 할 수 있는 LLM 모델 구성, 그리고 실행이 매우 손쉽게 완료되었습니다.
localai에 등록하는 과정도 또한 매우 쉽습니다. (인증은 1부에서 소개한 다음의 링크를 참고하세요.)
ollama를 통해서 실행된 모델에 접근하기 위한 주소인 http://localhost:11434/v1를 --baseurl에 입력하고, ollama를 통해서 실행한 모델인 gemma:2b 이름을 넣습니다.
그리고 등록된 localai 서비스 제공자를 확인합니다.
이제 실제로 쿠버네티스 클러스터를 localai를 통해서 분석해 볼 차례입니다.
2B밖에 안되는 모델인 것을 고려했을 때 결과가 나쁘지 않게 나옵니다. 한국어로 답변을 줄 수 있는지 확인해 보겠습니다. 한국어로는 출력되지 않고 약간 내용이 바뀐 것을 확인할 수 있습니다.
다른 모델은 어떤 답변을 제공하는지 확인해 보는 게 좋을 것 같습니다. 현재 실습 가능한 모델 중에 매개변수가 가장 큰 것 중에 하나인 llama2:70b 모델을 동작시키겠습니다. 모델을 바꾸기 위해서는 다른 모델을 우선 로드(load) 해야 합니다.
</명령>
노트: load 시에 모델이 없는 경우는?
llama2:70b는 기존에 내려받아 두었기 때문에 load 명령이 실행되었던 것이고, 없는 모델을 load 한다면 다음과 같이 오류가 발생하게 됩니다.
새로운 모델을 load했다면 이번에는 localai에 llama2:70b를 다시 등록해야 합니다. 따라서 기존에 등록한 localai를 지우고 다시 등록합니다.
등록이 완료되었다면, 다시 localai에 설명을 요청합니다.
한국어로도 물어봅니다. 내용이 약간 바뀌었을 뿐 한국어는 여전히 지원되지 않는 것을 확인할 수 있습니다.
마지막으로 localai를 사용한 상호 작용 모드의 경우는 어떤지 확인해 보겠습니다.
이와 같이 한국어 지원은 다소 어려운 부분이 있지만, localai를 통해서 공개된 AI 서비스에 질의하지 않고도 현재 상황에 대해 설명을 받을 수 있는 것을 확인하였습니다.
ollama를 통해서 실행된 모델 별로 얻을 수 있는 내용의 특장점은 추후에 다시 알아보기로 하겠습니다.
K8sGPT는 현재 쿠버네티스 클러스터에 존재하는 여러 가지 문제 가능성을 분석해주는 훌륭한 도구입니다. 이러한 분석을 위해 다양한 AI 서비스 제공자를 선택할 수 있고, 또한 단순히 쿠버네티스 클러스터 분석뿐만 아니라 기능을 통합해서 확장할 수 있도록 지원하고 있습니다. 다만 상호 작용 모드에서 제한적으로 동작하고, 한국어와 같이 사용률이 높지 않은 경우에는 모델에서 지원하지 않는 경우가 많아서 사용에 약간 제약이 있을 수 있습니다.
그럼에도 불구하고 K8sGPT라는 프로젝트는 매우 빠르게 성장하고 있고, 커뮤니티의 의견을 적극적으로 받아들여 많은 기능들이 빠르게 추가되고 있습니다. 기업이 공개된 AI제공자를 사용함으로써 정보가 공개되는 것을 우려하는 부분도 localai를 통해서 해소할 수 있을 것으로 보이며, localai를 응용해 다양한 기업 환경에 맞는 모델을 직접 K8sGPT에서 사용하도록 설정할 수도 있을 것입니다.
따라서 K8sGPT는 현재 LLM의 추세와 맞물려 2024년 현재에 가장 인기 있는 주제 중에 하나가 될 것으로 보입니다.. 이대로만 발전한다면 상호 작용 모드 또한 현재와 같이 다소 제한이 있는 형태가 아닌, 사용자가 원하는 다양한 정보를 얻을 수 있는 형태로 변화할 것으로 예상됩니다.
작가
조훈(CNCF 앰버서더)
시스템/네트워크 IT 벤더의 경험 이후, 메가존 GCP 클라우드 팀에서 쿠버네티스와 연관된 모든 프로젝트에 대한 Tech Advisor 및 Container Architecture Design을 제공하고 있다. 페이스북 ‘IT 인프라 엔지니어 그룹’의 운영진을 맡고 있으며, 오픈 소스 컨트리뷰터로도 활동한다. 지식 공유를 위해 인프런/유데미에서 앤서블 및 쿠버네티스에 관한 강의를 하기도 한다. 책 <컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커> 등 3권을 썼다. CNCF(Cloud Native Computing Foundation) 앰버서더로서 쿠버네티스 생태계가 더 활발하게 퍼질 수 있도록 기여하고 있다.
심근우
LG유플러스 CTO부문에서 대고객 비즈니스 시스템의 DevOps를 담당하는 UcubeDAX팀의 팀장으로 일하고 있다. 퍼블릭 클라우드와 프라이빗 클라우드에 걸친 쿠버네티스 클러스터를 안정적으로 운영하기 위해 노력하고 있으며, 특히 주니어 DevOps 엔지니어들의 육성에 큰 관심을 가지고 있다.
문성주
체커(CHEQUER) 사의 DevOps Engineer로서 쿠버네티스의 멀티 클러스터 관리 방법론과 쿠버네티스 구현체(CAPI, OCI)에 대한 명세와 컨테이너 리소스 격리 방법에 대한 연구를 병행하고 있다. 이런 연구 활동을 기반으로 쿠버네티스 볼륨 테스트 파트에 컨트리뷰션했다. 본업은 쿠버네티스 오퍼레이터와 같은 CRD(커스텀 리소스)를 개발해 현업에서 쿠버네티스를 좀 더 편리하게 사용할 수 있도록 돕는 일이다. 또한, 페이스북 그룹 ‘코딩이랑 무관합니다만'과 ‘IT 인프라 엔지니어 그룹'의 운영진을 맡고 있다.
이성민
미국 넷플릭스(Netflix) 사의 Data Platform Infrastructure 팀에서 사내 플랫폼 팀들과 데이터 사용자들을 어우르기 위한 가상화 및 도구들을 개발하는 일들을 하고 있다. 과거 컨테이너와 쿠버네티스에 큰 관심을 두고 ingress-nginx를 비롯한 오픈 소스에 참여했으며, 현재는 데이터 분야에 일하게 되면서 stateful 한 서비스들이 컨테이너화에서 겪는 어려움을 보다 근본적으로 해결하기 위한 많은 노력을 하고 있다.
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.