MLOps/Kubernetes

쿠버네티스 개요 및 설치

ai-notes 2024. 6. 17. 16:20
반응형

MinIO 서버를 구성하면서 최소 3개의 서버를 사용하게 될 예정인데, 향후 확장 및 관리의 편리성을 위해 쿠버네티스를 도입해보고자 합니다.


쿠버네티스란?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.

 

컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 한다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 한다. 이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까?

그것이 쿠버네티스가 필요한 이유이다! 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다.

 

즉, 쿠버네티스(K8s)는 컨테이너들의 관리를 자동화하는 도구(컨테이너 오케스트레이션, Docker Swarm 등등이 있다)이며 아래의 기능을 제공한다.

  • 서비스 디스커버리와 로드 밸런싱 - DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출
  • 스토리지 오케스트레이션 - 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재
  • 자동화된 롤아웃과 롤백 - 원하는 상태를 서술하고 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
  • 자동화된 빈 패킹 - 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 제공
  • 자동화된 복구(self-healing) - 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체
  • 시크릿과 구성 관리 - 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리

사용하려는 이유 : MinIO를 여러개의 서버에서 사용할건데, 서버 하나씩 들어가서 실행하는 것과 상태를 관리하는 것이 불편함. 따라서 컨테이너 오케스트레이션을 이용하여 관리할 예정.

 

쿠버네티스 클러스터 구성시 필요 패키지

Kubeadm

  • kubeadm: k8s 클러스터를 초기화하고 관리하기 위한 CLI 도구.
    • 클러스터 초기화: kubeadm init 명령을 사용하여 마스터 노드를 초기화하고 클러스터를 구성
    • 노드 추가: kubeadm join 명령을 사용하여 워커 노드를 클러스터에 추가
    • 구성 요소 설치: etcd, API 서버, 컨트롤러 매니저, 스케줄러 등 주요 k8s 구성 요소를 설치
    • 업그레이드 및 재설정: 클러스터를 업그레이드하거나 재설정하는 기능을 제공

Kubelet

  • kubelet: 각 노드에서 실행되는 에이전트, 주로 컨테이너의 생명 주기를 관리하고, 노드를 k8s 클러스터에 등록하는 역할을 수행.
    • Pod 실행 및 모니터링: 노드에서 Pod와 컨테이너를 실행하고 상태를 모니터링
    • 노드 상태 보고: 노드의 상태 및 메트릭을 API 서버에 주기적으로 보고함.
    • 볼륨 및 네트워킹: Pod의 스토리지 볼륨을 마운트하고 네트워킹을 설정
    • Pod 스펙 적용: API 서버로부터 Pod 스펙을 받아 이를 노드에서 실행

Kubectl

  • kubectl: k8s 클러스터와 상호 작용하기 위한 CLI 도구. 클러스터의 리소스를 관리하고, 다양한 k8s 객체를 제어하는 역할을 수행.
    • 리소스 생성 및 관리: Deployment, Service, Pod, ConfigMap 등 다양한 k8s 객체를 생성, 조회, 수정, 삭제할 수 있음
    • 클러스터 상태 확인: 클러스터의 현재 상태를 확인하고, 리소스 사용량 및 상태를 모니터링
    • 명령 실행 및 로그 조회: 클러스터 내에서 실행 중인 컨테이너에 명령을 실행하거나 로그를 조회
    • 디버깅 및 문제 해결: 클러스터 및 어플리케이션의 문제를 디버깅하고 해결하는 데 유용한 도구 제공

쿠버네티스 설치

사전 작업

  • 스왑의 비활성화. kubelet이 제대로 작동하게 하려면 반드시 스왑을 사용하지 않도록 설정한다.
sudo swapoff -a
sudo vim /etc/fstab # swap 관련 라인 앞에 #을 추가하여 주석처리

or

sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
# 컨트롤 플레인(Master Node)
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp

# Worker node
sudo ufw allow 10250/tcp
sudo ufw allow 10256/tcp
sudo ufw allow 30000:32767/tcp

 

 

설치 방법

 

쿠버네티스를 운용하기 위해서는 kubeadm, kubelet, kubectl의 설치가 필요하다.

그러나 현재(24-06-17 Ubuntu 기준) 쿠버네티스 공식 홈페이지에서 제공하는 방법으로는 설치가 되지 않는다.

Err:6 https://packages.cloud.google.com/apt kubernetes-xenial Release
404 Not Found [IP: X.X.X.X 443]

 

위와 같은 에러가 발생하는데, 찾아보니 Repository의 변경이 있는듯 했다. 아래 명령어로 수정하여 실행하면 설치가 제대로 이루어진다.

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

 

쿠버네티스는 버전에 민감해서 자동으로 업데이트 되지 않도록 apt-mark를 선언한다.

 

 

마치며

공식 홈페이지에서 제공하는 방버을 통해 쿠버네티스를 설치하는데 오류가 발생해서 OS 버전 문제인가 싶었는데,
한국어 홈페이지는 업데이트가 안되어있어 발생한 문제였습니다. 앞으로는 영문 홈페이지를 참고할 예정입니다.

반응형

'MLOps > Kubernetes' 카테고리의 다른 글

쿠버네티스 Multi Control-plane  (0) 2024.11.18
Kubernetes Dashboard(Grafana / Prometheus)  (0) 2024.07.05
쿠버네티스 실행  (1) 2024.07.01