전체 글

IT 엔지니어링에 대해 알고 싶은 분 모두 환영합니다.
Devops

Kubernetes에 존재하는 Metrics Server란 무엇일까? 그리고 어떻게 해야 잘 사용할 수 있을까?

Kubernetes는 HPA(Horizontal Pod Autoscaling), VPA(Vertical Pod Autoscaling)이라는 Pod 자동 확장 기능을 제공해 필요에 따라 Pod의 수를, 혹은 리소스 자체를 자동으로 확장할 수 있는 기능을 제공하고 있습니다. 이 기능들의 특징은 자동확장을 메트릭, 즉 CPU 사용률과 같은 수치를 기준으로 사용한다는 것인데요. 그렇다면 자동확장 기능이 올바르게 작동하기 위해서는 메트릭을 실시간으로, 그리고 안정적으로 확보하는 것이 중요할 것입니다. Kubernetes에서 이 역할을 하는 것이 바로 Metric-server입니다. Metric-server는 Kubernetes 내에 존재하는 Pod의 메트릭을 실시간으로 수집해 kube-api 서버에 안정적으로 전..

Devops

Apache Kafka란? Apache Kafka를 Kubernetes에서 구성해보자

Apache Kafka는 Apache 재단의 오픈소스 Event Streaming Platform 입니다. Kafka를 사용하면 기존의 end-to-end로 묶여있던 복잡한 아키텍쳐를 단순한 이벤트 버스 중심의 아키텍쳐로 탈바꿈할 수 있다는 장점이 있습니다. 그렇다면 어떻게 Kafka가 이런 일을 할 수 있을까요? Apache Kafka의 공식 홈페이지에 따르면 Kafka는 Event Streaming을 위한 Platform이라고 말합니다. 그리고 Event Streaming이란 인간으로 따지면 바로 중추신경계에 해당하는 디지털 요소라고 정의하고 있습니다. 왜냐하면 Event streaming Platform이 DB, IoT, App 등 다양한 곳에서 오는 Event들을 real-time으로 모아서 그 ..

Devops

Mysql Operator로 Kubernetes 환경에서 Mysql DB 운영하기

Kubernetes 플랫폼이 대중화되면서 점점 다양한 워크로드들이 Kubernetes 위에서 실행되고 있습니다. 하지만 DB는 어떨까요? 어쩌면 유연하고 임시적인 Kubernetes 환경에서 내구성과 견고함이 중요한 DB는 언뜻 보기에 적절한 만남이 아닌 것 같아 보입니다. Statefulset라는 상태 저장을 목적으로 하는 오브젝트를 지원함에도 여전히 DB를 Kubernetes 환경에서 운영하는 것은 비효율적이고 견고해 보이지 않기 때문에 지금도 DB를 Kubernetes 환경에서 운영하는 것에 거부감을 가진 사람들이 많습니다. 하지만 이런 의심의 눈초리와 관계없이 기술은 점점 발전해서 결국은 Operator를 사용해 DB를 운영하는 패턴이 등장해 Kubernetes 환경에서도 DB를 안정적으로 운영할..

Devops

오픈소스 컨테이너 레지스트리 Harbor로 컨테이너 레지스트리 간 복제 수행하기

컨테이너 기술이 등장하면서 많은 사람들이 컨테이너 이미지를 기반으로 서비스를 제공하기 시작했습니다. 이에 더해 현재는 도커, 도커스웜, 쿠버네티스.. 등의 플랫폼들로 컨테이너 이미지 기반의 워크로드를 수행하고 있습니다. 하지만 이 컨테이너 이미지를 로컬 저장소에 저장해서 사용하면, 외부에서 해당 이미지를 사용하기 어렵기 때문에 이미지를 쉽게 가져올 수 있는 방법이 필요했습니다. 이에 따라 등장한 것이 바로 컨테이너 레지스트리(Container Registry)입니다. 컨테이너 레지스트리는 소스 코드를 담는 Source repository(ex: github) 나 War,Jar 등의 바이너리 파일을 담는 Artifact registry(ex: Nexus) 와 같이 컨테이너를 담는 컨테이너 전용 저장소입니다..

Network

Minikube로 로컬 환경에서 쿠버네티스 클러스터 구성하기(MacOS, Windows 환경)

쿠버네티스 환경이 대중화되면서 다양한 플랫폼을 기반으로 쿠버네티스를 구동할 수 있게 되었습니다. 하지만 쿠버네티스를 프로덕션 환경에 올리기 전에 기술에 익숙해지거나 버전 테스트를 해야 할 수도 있는데요. 이러한 경우에 비용이 청구되는 관리형(Managed) 쿠버네티스나 IaaS VM 기반 쿠버네티스 클러스터에서 이러한 테스트를 하기에는 부담스러운 경우가 많습니다. 그래서 로컬 환경에서 쿠버네티스 클러스터를 쉽게 구성할 수 있는 Minikube나, k3s같은 로컬 쿠버네티스 도구들이 등장했습니다. 본 포스팅에서는 그 중 Minikube를 사용해 쿠버네티스 클러스터를 구성해보는 방법을 알아보겠습니다. 1. 도커 설치 쿠버네티스는 컨테이너 가상화 기술을 기반으로 동작하기 때문에 컨테이너 엔진, 혹은 버추얼 머..

GCP

Secret Manager에 저장된 중요 데이터를 Kubernetes Secret과 연동해보자(with GCP)

Kubernetes는 컨테이너 오케스트레이션을 수행하기 위해 각자의 목적을 가진 오브젝트들을 관리합니다. 대표적으로 Pod의 집합을 관리해주는 Deployment, 설정 파일을 관리해주는 Configmap, 인증을 위한 ServiceAccount 같은 것들이 존재하죠. 모든 오브젝트들이 각자의 목적을 가지고 있지만, 특히 프로덕션 수준에서 Kubernetes를 운영하기 위해서는 보안과 관련된 오브젝트도 있어야 합니다. 그래서 Kubernetes에서는 키,암호,토큰과 같은 중요한 데이터를 노출시키지 않고도 Pod에 포함시킬 수 있는 Seceret이라는 오브젝트를 제공하고 있습니다. 이번 포스팅에서는 이 Secret을 어떻게 사용할 수 있는지, Kubernetes에서는 Secret을 어떻게 해야 잘 활용할 ..

Observability

Prometheus Operator를 사용해 Kubernetes 환경에서 Prometheus 구성하기

Prometheus는 CNCF의 몇 안되는 graduate 프로젝트 중 하나인 시계열 모니터링 시스템입니다. 이런 Prometheus는 일반적인 VM 환경에서도 사용할 수 있지만 Kuberenetes에서 사용하는 MSA 구성에도 사용할 수 있다는 장점 이 있는데요. 하지만 Kubernetes 환경은 비영구적이고 임시적인 Pod를 기반으로 이루어져 있기 때문에 Prometheus를 구성하는 요소와 Prometheus의 메트릭 수집 대상들을 관리하기가 힘들다는 특징이 있습니다. 게다가 Prometheus는 시스템 내부의 yaml Config 파일을 기준으로 설정을 유지하는데, 이는 컨테이너 내부의 파일을 변경하기가 번거로운 Kubernetes 환경에서 Prometheus 관리를 더 힘들게 하는 원인이었습니다..

잡담

지난 1년을 돌아보며 - 2021년 회고

이 글을 작성하는 2022년 3월은 내가 지금 다니는 회사에 들어온 지 정확히 1년이 되는 날이다. 그리고 이런 기념비적인 날에 나는 회고록을 한 편 작성하고자 한다. 2021년 회고록을 3월이 되어서나 작성하는 것이 이상할 수 있지만 회고, 즉 다시돌아보기 위해서는 먼저 돌아볼만한 경험들이 쌓여야 한다고 생각하기 때문에 입사한지 1년이 되는 지금 회고록을 작성하게 되었다. 또 내가 지난 한해 경험했던 것들을 단지 휘발성 메모리인 내 두뇌 안에 파편적이고 희미하게 가지고 있는 것보다는 영구적 메모리인 블로그에 작성하는 것이 더 단단한 지성적 지층을 만들어 줄 것이라 생각해 회고를 적게 되었다. 작년 한 해에 내가 세웠던 목표는 다음과 같다. 새로운 것을 도전하는데 주저하지 말기 해보고자 했던 것은 어떻게..

Dev

Apache beam으로 Streaming & Batch 데이터 파이프라인을 생성해보자 (with GCP Dataflow)

Apache beam은 Streaming 및 Batch성 데이터 작업을 지원하는 오픈소스 엔진입니다. "beam"이라는 이름이 Batch에서 "B"를, Streaming에서 "eam"을 가져와 합친 단어라는 데서 Apache beam이 지향하고자 하는 바가 명확히 보입니다. Apache beam은 단일 프로그래밍 모델로 Batch 와 Streaming 데이터 작업을 지원하며, 이렇게 작업한 모델은 다양한 런타임에서 구동할 수 있다는 다양한 활용성이 장점입니다. 현재 데이터 파이프라인 생성을 지원하는 언어는 Python, Java 및 Go가 있습니다. 간단히 Apache beam을 사용해보고자 한다면 아래 링크의 Beam Playground에서 웹 인터렉티브 환경을 이용해볼 수도 있습니다. https://..

GCP

Kubernetes externalTrafficPolicy에 따른 동작과 GCP의 Container-native LoadBalancer 알아보기

Kubernetes는 컨테이너 오케스트레이션을 구현하기 위해 독특한 네트워킹 구조를 가지고 있습니다. 이런 Kubernetes의 네트워킹 구조에서 단연 중요한 것은 Service라는 개념입니다. Service는 외부 네트워크와 격리되어 있으며 임시적이라는 특성을 가진 Pod들을 외부와 통신할 수 있도록 고정적인 주소로 노출하는 방법을 말합니다. 이 Service의 가상 IP를 구현하기 위해서는 kube-proxy라는 컴포넌트가 전적으로 맡게 되며, 각 node에 위치해 netfilter라는 linux 패킷 조작 툴을 사용해 패킷의 생명주기를 조작합니다. 예를 들어 kube-proxy가 Service의 구현을 위해 사용하는 mode 중 iptables 모드는 패킷이 node로 들어오면 kube-proxy에..

Seungwoo Lee
Seungwoo Lee와 About IT 엔지니어링