
Kubespray란?kubespray는 Kubernetes 클러스터를 설치하고 관리하기 위한 오픈 소스 도구다. CNCF 재단에서 Installer로 인증을 받았으며 핵심 기능은 Ansible을 기반으로 동작한다. 코드를 통해 전체 클러스터를 제어하므로 규모가 큰 클라우드 플랫폼 및 온프레미스 환경에서 많이 사용된다. kubespray를 이전에 다루었던 kubeadm과 비교해자면 아래와 같은 장점이 있다.클러스터 설치를 각 노드에서 일일이 진행할 필요가 없음(중앙 관리형 설치)클러스터에서 사용하는 세부 설정들을 yaml 파일을 통해 간편하게 제어가 가능함클러스터 운영 시 필요한 애드온(metallb, nginx ingress 등)을 자동으로 설치 가능멀티 마스터 구성을 기본으로 지원하기 때문에 간편하게 ..

Prometheus / Grafana란? 프로메테우스(Prometheus)와 그라파나(Grafana)는 메트릭 수집 및 시각화에 사용되는 가장 인기 있는 모니터링 오픈소스 도구로 Grafana Labs라는 회사에서 개발했다. 프로메테우스는 서버, 애플리케이션 및 기타 시스템에서 발생하는 데이터를 모니터링하는 도구로, 시간에 따라 변하는 메트릭(ex: CPU 사용률, 메모리 사용량 등)을 수집하고 저장한다, 또한 사용자가 정의한 규칙에 따라 경고를 생성하여 시스템의 건강 상태를 모니터링하고 문제가 발생할 경우 알람이 가도록 하는 등 여러 가지 기능을 지원한다. 그라파나는 프로메테우스와 같은 모니터링 도구에서 수집된 메트릭 데이터를 시각적으로 표시하는 도구다. 사용자가 원하는 형태(그래프, 표, 퍼센티지 등..

CoreDNS란? Go언어로 개발된 DNS 서버 역할을 수행하는 오픈소스로 CNCF 졸업 프로젝트 중 하나이다. 여러 플러그인을 통해 다양한 곳에 쓰일 수 있지만, 특히 쿠버네티스와의 결합도가 좋아 Kubernetes 1.12 버전부터 클러스터 내에서 DNS(Domain Name System) 서비스를 제공하는 기본 DNS 서버로 채택되었다.(이전에는 kube-dns를 사용) 실제로 클러스터를 구축하고 확인해 보면 기본적으로 CoreDNS가 설치되어 있는 걸 확인할 수 있다. $ kubectl get pod -n kube-system | grep coredns coredns-787d4945fb-flwms 1/1 Running 10 (19m ago) 63d coredns-787d4945fb-jhw2h 1/..

Configmap / Secret이란? Kubernetes에서 ConfigMap과 Secret은 애플리케이션 구성 데이터를 관리하기 위한 리소스이다. ConfigMap: 애플리케이션의 설정 데이터들을 저장하고 관리하는 리소스이다. 주로 환경 변수, 설정 파일 등을 저장하며 텍스트 형식의 데이터를 다루기 때문에 키-값 쌍 형태로 내용을 구성한다. Secret: 민감한 정보(예: 비밀번호, API 토큰, SSH 키 등)를 저장하고 관리하는 리소스이다. Secret은 ConfigMap과 유사하지만 base64 인코딩을 통해 민감한 데이터를 Configmap보다는 안전하게 저장할 수 있다. 기존 컨테이너 이미지 환경에서는 이러한 구성 데이터들이 이미지에 같이 포함되어 있어 수정을 하기 위해서는 다시 이미지를 빌..

무중단 배포란? 무중단 배포(Zero-downtime deployment)는 소프트웨어 업데이트나 변경을 수행할 때 서비스의 가용성을 유지하면서 사용자에게 서비스를 중단시키지 않고 배포하는 전략이다. 이는 사용자가 웹 사이트나 애플리케이션을 사용하는 동안 일시적으로 서비스를 중단시키지 않고도 업데이트를 적용할 수 있다는 소리이다. 때문에 실제 운영환경에서 새 버전을 배포하거나 기존 내용을 수정할 때 많이 활용한다. 그리고 쿠버네티스에서는 이러한 무중단 배포를 실현하기 위해 다양한 전략들이 존재한다. 아래는 가장 많이 활용되는 대표적인 무중단 배포 전략이다. Rolling Updates (롤링 업데이트) Blue-Green Deployment (블루-그린 배포) Canary Deployment (카나리 배..

쿠버네티스에서 pod는 특정 이미지를 사용하여 컨테이너를 자유롭게 생성하고 지웠다를 반복할 수 있다. 문제는 pod가 삭제되고 재생성될 때 이미지에 포함되지 않은 추가적으로 생성된 파일이나 폴더 같은 데이터들은 모두 삭제된다는 것이다. 예를 들어 mysql 이미지를 사용하여 pod를 생성했다고 가정하자. 그리고 hokka라는 계정을 추가하고 이름이userdata인 데이터베이스를 생성한 상태에서 pod를 삭제 후 재생성한다. 그러면 새로 올라온 pod에서 mysql이 동작하는 것은 동일하지만 이전에 생성했던 hokka라는 계정과 userdata 라는 데이터베이스는 모두 삭제되어 없어지게 된다. 이러한 문제점을 해결하기 위해 쿠버네티스에서는 pv와 pvc, sc라는 리소스를 통해 pod가 영구적인 데이터를 ..

쿠버네티스는 현시점에서 Devops의 목적을 가장 잘 실현할 수 있는 툴이다. 서비스의 개발 및 검증, 배포를 위한 여러 개의 S/W와 리소스들을 지원하고 이를 사용자가 쉽게 사용할 수 있도록 커뮤니티 등을 통해 계속해서 발전하고 있기 때문이다. 하지만 이렇게 열심히 만들어서 배포한 서비스가 갑자기 동작하지 않는다면 난처할 것이다. 잘 동작하던 서비스가 왜? 갑자기 문제가 발생하는지에 대해서는 서비스의 소스코드, 사용하는 DB, 서버 OS, 네트워크 환경 등 정말 다양한 원인들이 복잡하게 얽혀있기 때문에 원인을 바로 찾아내는 건 쉽지 않다. 그럼 이러한 문제점들에 대해 할 수 있는 일은 뭐가있을까? 가장 좋은 것은 장애가 발생하기 전에 현재 상태에 대해 명확하게 인지하고 앞으로 발생할 수 있는 문제점들에..

kubeadm이란? 쿠버네티스 공식 문서에서 추천하는 순정 쿠버네티스 설치 툴로 리눅스 환경에서 빠르게 클러스터를 구성할 수 있도록 만들어졌다.이전에 다루었던 Minikube나 이와 유사한 K3s같은 경량화 설치 툴보다는 다루기 어렵지만 원하는 구성대로 클러스터를 설치할 수 있다는 장점이 있다. kubeadm이 지원하는 명령어로는 kubeadm init을 통해 클러스터를 구성할 수 있으며 kubeadm join을 통해 워커노드로 클러스터에 참여할 수 있도록 지원한다. 설치환경kubeadm을 통해 쿠버네티스를 설치하기 전에 기반이 되는 서버 인프라는 아래와 같이 구성한다.서버 OS는 Ubuntu 22.04.3을 사용했고 Master 1대와 Worker 2대로 구성된 클러스터를 구성해 본다.추가로 컨테이너..