본문 바로가기
Orchestration/Kubernetes

K8sGPT 사용하여 Kubernetes 문제 해결하기

by wlsdn3004 2024. 7. 3.
728x90
반응형

 

 

K8SGPT란?

K8sGPT는 Kubernetes 환경에서 GPT-3와 같은 자연어 처리 모델을 사용하여 클러스터 문제를 진단하고 해결 방법을 간단한 문장으로 제공해 주는 도구이다. K8SGPT 분석기에 SRE 경험이 코드화되어 있으며 가장 관련성이 높은 정보를 추출하여 제공해 준다. Kubernetes 환경에서는 다양한 문제가 발생하기 때문에 GPT 모델의 강력한 처리 능력을 활용해서 다양한 문제들을 보다 빠르고 효율적으로 해결할 수 있다.

 

이번 글에서는 Kubernetes 환경에 K8sGPT를 설치하고 사용하는 실습을 다룬다.

 

구성 환경

  • Amazon EKS v1.28.8

구성 버전

  • Helm cli : 3.8.2
  • K8sGPT Helm Chart : 0.1.6
  • K8sGPT Helm APP : 0.0.26

전제 조건

  • ChatGPT 계정
  • EKS 클러스터

 

먼저 아래 주소로 들어가 ChatGPT API 키를 발급한다.

 

EKS에 Helm Chart를 사용하여 k8sgpt operator를 설치한다.

# repo 등록
$ helm repo add k8sgpt https://charts.k8sgpt.ai/ 

# repo 업데이터
$ helm repo update

# k8sgpt 설치
$ helm install k8sgpt k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace

 

앞전에 생성한 ChatGPT API 키를 이용하여 secret을 생성한다.

# chatgpt API 키 환경변수 설정
$ export OPENAI_TOKEN="sk...."

# chatgpt API 키 환경변수 사용하여 secret 생성
$ kubectl create secret generic k8sgpt-sample-secret --from-literal=openai-api-key=$OPENAI_TOKEN -n k8sgpt-operator-system

 

다음과 같이 위에서 생성한 secret을 지정하여 K8sGPT CRD를 생성한다.

해당 리소스가 각 문제마다 "results.core.k8 sgpt.ai"라는 리소스를 생성하여 문제를 관리한다.

$ kubectl apply -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
  name: k8sgpt-sample
  namespace: k8sgpt-operator-system
spec:
  ai:
    enabled: true
    model: gpt-3.5-turbo
    backend: openai
    secret:
      name: k8sgpt-sample-secret
      key: openai-api-key
    # anonymized: false
    # language: english
  noCache: false
  repository: ghcr.io/k8sgpt-ai/k8sgpt
  version: v0.3.8
EOF

 

클러스터에 오류를 발생시키기 위해 다음 Pod를 생성한다.

해당 Pod는 이미지가 존재하지 않기 때문에 "ImagePullBackOff" 오류로 동작하지 않는 Pod이다.

$ kubectl apply -f - << EOF
apiVersion: v1
kind: Pod
metadata:
  name: broken-pod
  namespace: default
spec:
  containers:
    - name: broken-pod
      image: nginx:1.a.b.c
      livenessProbe:
        httpGet:
          path: /
          port: 81
        initialDelaySeconds: 3
        periodSeconds: 3
EOF

 

배포된 Pod를 확인해 보면 다음과 같이 이미지 오류 상태로 남아있다.

$ kubectl get po
NAME                                       READY   STATUS         RESTARTS   AGE
broken-pod                                 0/1     ImagePullBackOff   0          13s

 

몇 분 후 다음과 같이 확인해 보면 해당 Pod에 대해 K8sGPT 리소스에 의해 results 리소스가 생성된 걸 확인할 수 있다.

$ kubectl get results.core.k8sgpt.ai  -n k8sgpt-operator-system
NAME                                KIND          BACKEND 
defaultbrokenpod                    Pod           openai

 

'describe' 명령어로 자세히 조회해 보면 다음과 같이 문제에 대한 solution 메세지를 확인할 수 있다.

$ kubectl describe results.core.k8sgpt.ai -n k8sgpt-operator-system  defaultbrokenpod
Name:         defaultbrokenpod
Namespace:    k8sgpt-operator-system
# ...
Spec:
  Backend:  openai
  Details:  Error: The Kubernetes is experiencing a back-off while pulling the image "nginx:1.a.b.c".

Solution:
1. Verify the image name and version for typos or invalid characters.
2. Check the network connection to ensure it is stable.
3. Restart the Kubernetes deployment or pod to trigger a fresh image pull.
  Error:
    Text:         Back-off pulling image "nginx:1.a.b.c"
  Kind:           Pod
  Name:           default/broken-pod
  Parent Object:
#...

해당 문제를 해결 후 확인해 보면 results 리소스가 사라진 걸 확인할 수 있다.

 

마무리

K8sGPT를 잘 활용한다면 문제 해결 시간을 단축하는 데 큰 도움을 받을 수 있다. 아직 성숙도 면에서 부족한 점이 많아 보이지만, 2023년 12월 19일 샌드박스 프로젝트로 CNCF에 승인되어 앞으로 빠르게 성장할 것으로 기대된다.

반응형

댓글