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

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대로 구성된 클러스터를 구성해 본다.추가로 컨테이너..

쿠버네티스에서 배포한 Pod를 외부에서 접근하기 위해서는 여러 가지 방법들이 존재한다. 그중 가장 쉬운 방법은 Pod와 연결된 Service를 생성하고 Type을 NodePort로 설정하여 접속하는 것이다. 하지만 해당 방법은 노드를 통해 Pod에 접속하는 것이기 때문에 클라이언트가 노드의 IP, Port를 모두 알고 있어야만 접속이 가능하다. 때문에 편의성도 떨어지고 보안적으로도 좋지 못한 방법이라 주로 개발/테스트 환경에서만 사용한다. 실제 운영환경에서는 이러한 문제점들을 해결하기 위해 Ingress라는 리소스를 활용한다. Ingress 란? 아래는 Ingress에 대한 Kubernetes 공식문서의 내용이다. 요약해 보자면 Ingress는 쿠버네티스에 배포한 웹 서비스에 대해 개별적인 라우팅 규칙을..