데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AKS 운용관리 : 직접 만들어 본 툴 aks-resourcemanager

      broccoli 24.04.11
      1,280 6 0

      작년부터 AKS로 쿠버네티스 시작하기 라는 주제로 블로그를 작성해 오고 있다. AKS 운용관리를 또하나의 주제로 다루어 보려고 한다.

      운용관리라는 용어에 대해 다시 생각해 보았다. 특정 자산이나 리소스(IT 인프라 등)가 최대한 효율적으로 사용되도록 관리하는 활동이다.

      이는 IT 분야에서 주로 사용되며, 특정 시스템이나 서비스의 가용성, 성능, 보안 등을 유지하고 최적화하는 활동을 포함할 수 있다.


      AKS 리소스 관리

      AKS는 애플리케이션을 가동하기 위해 필요한 자원을 공급할 수 있는 인프라이다.

      K8s에서는 구성되는 객체들에 대해 리소스라는 표현으로 사용한다. K8s에서 '리소스'라는 표현은 클러스터 내에서 관리되는 모든 항목을 지칭하기 위해 사용된다.

      리소스는 쿠버네티스의 기본 구성 단위로, 쿠버네티스 API를 통해 생성, 수정, 삭제할 수 있는 객체를 의미한다.


      AKS 리소스 유형

      AKS를 포괄하는 K8s에서는 다음의 리소스를 일반적으로 유형으로 나누어 관리하고 있다. 리소스 유형별로 간단한 설명과 한 마디로 표현할 수 있는 역할로 구분해 볼 수 있다.

      리소스 유형

      설명

      역할

      컨트롤 플레인

      AKS 클러스터를 관리하는 중앙 집중식 API 서버

      관리자

      노드

      워크로드를 실행하는 물리적 또는 가상 머신

      컴퓨터

      노드 풀

      특정 구성을 공유하는 노드의 그룹

      집합

      Pod

      하나 이상의 컨테이너를 포함하는 최소 배포 단위

      컨테이너 집합

      배포 (Deployment)

      애플리케이션의 선언적 업데이트를 관리

      업데이트 관리자

      집합 (ReplicaSet)

      지정된 수의 Pod 복사본을 유지 관리

      복제본 관리자

      서비스 (Service)

      외부 또는 내부 트래픽을 Pod로 라우팅

      접근점

      인그레스 (Ingress)

      외부 요청을 서비스로 라우팅하는 HTTP/HTTPS 경로 관리자

      경로 관리자

      컨피그맵 (ConfigMap)

      애플리케이션 구성 데이터를 저장

      환경 설정

      시크릿 (Secret)

      민감한 정보(예: 비밀번호, 키)를 저장

      보안 데이터 저장소


      AKS 리소스 관리

      AKS를 구축하고 운용하는 과정에서 손쉽고, 자주 사용했던 툴이 아래의 K9s이다.

      image.png

      리소스 운용관리 측면에서는 Pod 중심의 정보를 제공한다.

      Pod가 속한 Node, Pod재기동 현황, CPU/MEM 점유울, 기동 유지시간 등을 볼 수 있다.

      Logs로 로그를 확인하거나 Describe를 통해 Pod에 발생한 이벤트로 확인가능하다.

      하지만, k9s는 쿠버네티스 클러스터를 관리하기 위한 터미널 기반의 UI 도구이다 보니 터미널 명령을 통해서 ctx(컨텍스트)를 변경할 수 있다.

      다수의 컨텍스트가 있을 경우 리소스 관리가 불편하다.

      또한, Pod 이외의 다양한 리소스를 터미널 명령어를 통해 전환해야 전체 리소스를 하나씩 볼 수 있다.


      AKS 리소스를 보기 위한 툴 만들기 아이디어

      편리하게 보기 위해 웹을 선택하기로 했다.

      웹으로 클릭해서 리소스를 볼 수 있다면 편리할 것이다. 파이썬의 streamlit을 활용하면 웹 구현이 간편하다.

      자신의 PC에 kube context를 위한 크리덴셜만 가지고 있으면 kubectl명령으로 리소스 정보 확인이 가능한 것에 착안하였다.

      참고로 ~/.kube/config 로 자신의 PC에 크리덴셜을 가져오면 PC에서 편리하게 AKS를 관리할 수 있다.


      AKS 리소스 관리 툴 빠르게 개발

      ChatGPT 를 사용하여 빠르게 개발할 수 있다.

      몇 가지 중요한 요구사항만 프롬프트로 전달하면 된다.

      - 리소스 대상의 선정 : Pods, Deployments, Services, Ingress, PV, PVC, Secrets 등

      - streamlit으로 동작, K8s리소스 관리, 사이드바에서는 kube context 선택, 탭형식으로 동작

      - 리소스 표시 스타일 : 검은색 배경에 흰색 글자

      * 실제 코드(aks_manager.py)는 github 링크를 참조 : https://github.com/jeonck/AKSResourceManager


      AKS 리소스 운용관리 툴 구현 완료

      완성된 코드를 ChatGPT에 입력하면 아래와 같이 코드에 대한 설명을 잘 해준다.

      이 코드는 Streamlit을 사용하여 Kubernetes 리소스를 관리하고 시각화하는 웹 애플리케이션을 생성합니다. 주요 기능과 구조는 다음과 같습니다:

      1. 앱 설정과 제목: Streamlit 앱의 페이지 레이아웃을 넓게 설정하고, 앱의 제목을 'AKS Resource Manager'로 설정합니다.

      2. Kubernetes 컨텍스트 가져오기: get_kube_contexts 함수는 kubectl config get-contexts -o name 명령을 실행하여

        사용 가능한 모든 Kubernetes 컨텍스트를 가져옵니다. 가져온 컨텍스트는 사이드바의 드롭다운 메뉴에서 선택할 수 있습니다.

      3. 리소스 탭 생성: 다양한 Kubernetes 리소스 유형(노드, 포드, 서비스 등)에 대한 탭을 생성합니다.

      4. Kubectl 명령 실행 및 출력 파싱: get_kubectl_output 함수는 주어진 kubectl 명령을 실행하고, 결과를 파싱하여 pandas DataFrame으로 변환합니다.

        LoadBalancers 리소스 유형의 경우, kubectl get svc 명령의 출력을 grep LoadBalancer 명령으로 파이핑하여 LoadBalancer 타입의 서비스만 필터링합니다.

      5. 리소스 유형에 따른 명령 실행: 각 탭에서는 해당 리소스 유형에 맞는 kubectl 명령을 실행하고, 결과를 DataFrame으로 표시합니다.

        데이터가 없는 경우 "No data available." 메시지를 표시합니다.

      이 코드는 Streamlit UI를 통해 사용자가 쉽게 다양한 Kubernetes 리소스를 조회하고 관리할 수 있도록 도와줍니다.

      사용자가 사이드바에서 다른 Kubernetes 컨텍스트를 선택하면, 앱이 해당 컨텍스트의 리소스 정보를 표시하도록 동적으로 업데이트됩니다.


      AKS 리소스 운용관리 툴 기동

      처음에는 Pyinstaller를 활용해 보려고 했으나, 역시나 종속성 문제들로 불편하였다.

      도커 컨테이너를 이용해서 간편하게 툴을 기동할 수 있다.

      1. Docker 파일 작성

      베이스 이미지 선택, 작업 디렉토리 설정, 애플리케이션 파일 복사, 의존성 설치(requirements.txt), kubectl 설치, 포트 설정, 애플리케이션 실행,

      # build : docker build -t aks_manager .
      # run : docker run -p 8501:8501 -v ~/.kube:/root/.kube aks_manager
      # run 기본 참조 : docker run -p 8501:8501 aks_manager
      
      # 기본 이미지 설정
      FROM python:3.8
      
      # 작업 디렉터리 설정
      WORKDIR /app
      
      # 현재 디렉터리의 내용을 컨테이너의 /app으로 복사
      COPY . /app
      
      # requirements.txt에 명시된 필요한 패키지들을 설치
      RUN pip install --no-cache-dir -r requirements.txt
      
      # kubectl 설치
      RUN apt-get update && apt-get install -y curl && \
          curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \
          chmod +x ./kubectl && \
          mv ./kubectl /usr/local/bin/kubectl
      
      # 컨테이너 외부로 노출할 포트 지정
      EXPOSE 8501
      
      # 컨테이너 시작 시 실행될 명령어
      CMD ["streamlit", "run", "aks_manager.py", "--server.port=8501"]

      주의사항:

      - docker build 명령어를 사용하여 Docker 이미지를 빌드하기 전에, 모든 필요한 파일이 현재 디렉토리에 존재하는지 확인해야 한다

      - docker run 명령어를 사용할 때, 필요에 따라 볼륨 마운트 옵션 -v ~/.kube:/root/.kube을 사용하여 로컬의 Kubernetes 구성 파일을 컨테이너와 공유할 수 있다.

      이를 통해 컨테이너 내부에서 kubectl 명령어를 사용하여 로컬 Kubernetes 클러스터를 관리할 수 있다.

      2. 컨테이너 빌드

      docker build -t aks_manager .

      3. 컨테이너 기동

      docker run -p 8501:8501 -v ~/.kube:/root/.kube aks_manager

      - 자신의 로컬PC의 kube context 를 읽어 올 수 있도록 기동 : 자신 PC의 디렉토리를 컨테이너로 마운트

      • Docker에서는 -v 또는 --volume 플래그를 사용하여 호스트 시스템의 디렉토리를 컨테이너로 마운트할 수 있다.

        이를 사용하면 로컬 시스템의 ~/.kube/config 파일을 컨테이너의 /root/.kube 디렉토리에 바인딩할 수 있다.


      AKS 리소스 운용관리 툴 화면

      코드에서 정의한 대로 사이드바에서는 코드에 명시된 대로 kube context를 선택할 수 있습니다.

      또한, 선택한 context에 따른 리소스를 유형별로 탭에서 선택하여 확인하실 수 있다.

      image.png


      정리

      AKS 리소스를 클릭만으로 context를 편리하게 변경하고, 리소스를 확인할 수 있는 툴을 만들어 보았다.

      - ChatGPT, streamlit, 컨테이너의 생산성이 한 몫을 했다.

      - 코드를 만드는 과정은 프롬프트를 통해서 해결했다. Top-Down으로 전체 그림을 그리고 세부 컴포넌트를 언급하였다. 마지막 부분에서 스타일을 반영하였다.

      - 자신의 로컬 PC에 있는 context를 활용하는 데 아이디어가 좀 필요했다. 컨테이너 기동 시 마운트 하는 방식으로 해결을 할 수 있었다.

      - 배포 환경에 영향을 받지 않는 컨테이너가 실전에서도 도움이 되었다.


      에피소드

      도구를 개발한 직후 다음 날에 바로 실전 환경에서 활용할 수 있는 기회가 주어졌다.

      Node와 Pod의 상태 확인이 필요했으며, 실시간으로 리소스를 확인 시 컨텍스트 전환을 클릭으로만 편리하게 할 수 있어 정보를 빠르게 공유하는 데 이 도구를 사용하였다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      broccoli 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기