0. 들어가며Helm은 Kubernetes 환경에서 애플리케이션을 패키징하고 배포할 수 있는 패키지 매니저다.우리가 Kubernetes에 리소스를 배포할 때 YAML을 일일이 관리하는 건 한계가 있다.이를 템플릿화하고 변수로 관리할 수 있게 해주는 도구가 바로 Helm이다.즉, Helm은 Kubernetes의 apt, yum, npm 같은 역할을 하는 도구다. Helm은 대강 알겠고, Helm Chart는 뭘까?Helm Chart는 하나의 애플리케이션을 정의하는 디렉터리 구조의 패키지 단위다.Chart에는 Deployment, Service, ConfigMap 등의 Kubernetes 리소스를템플릿화한 YAML 파일들과, 해당 템플릿에 주입될 변수(values) 가 포함되어 있다. 아래는 기본 구조 예시..
DevOps
0. 들어가며대부분의 시스템은 요청이 많아질 때 자동으로 더 많은 리소스를 쓰고,요청이 적을 땐 자동으로 리소스를 줄이기를 원한다.예전에는 이런 처리를 직접 스크립트로 짜거나 배치로 조절했지만,Kubernetes는 이걸 기본 기능으로 제공한다. 그게 바로 오토스케일링(Autoscaling)이다. Kubernetes에는 총 3가지 대표적인 오토스케일링 기능이 있다.HPA (Horizontal Pod Autoscaler) – Pod 수를 자동 조절VPA (Vertical Pod Autoscaler) – Pod에 할당된 자원(cpu/mem)을 조절Cluster Autoscaler – 노드 수를 자동 확장/축소1. HPA - 수평 확장 : Pod 개수 자동 조절HPA는 CPU, 메모리, 또는 커스텀 메트릭 기반..
0. 들어가며Kubernetes 클러스터는 수많은 Pod들이 노드 위에 올라가서 동작하는 구조다.각 Pod은 컨테이너들을 실행시키고, 컨테이너는 당연히 CPU와 메모리 같은 자원을 소비하게 된다.그런데 쿠버네티스는 기본적으로 Pod이 얼마만큼의 자원을 쓰는지 제한하지 않으면 무제한으로 사용하게 두는 구조다.즉, 메모리를 많이 쓰는 Pod 하나가 클러스터 전체를 불안정하게 만들 수도 있다는 뜻이다. 그래서 등장한 개념이 바로 resources.requests, resources.limits이고,이걸 기반으로 QoS 클래스, 쿼터, 스케줄링 전략 등이 이어진다. 1. 리소스 요청(request)과 제한(limit)의 개념쿠버네티스는 컨테이너별로 자원 요청량과 제한량을 설정할 수 있도록 resources 필드..
0. 들어가며쿠버네티스는 매우 유연하고 강력한 플랫폼이지만,그만큼 보안이 제대로 설정되지 않으면 무방비 상태의 뒷문이 열려 있는 셈이다. 누가 클러스터에 접근할 수 있는가?어떤 리소스를 읽고, 생성하고, 삭제할 수 있는가?어떤 Pod이 누구와 통신할 수 있어야 하는가?애플리케이션이 실행되는 환경은 충분히 안전한가? 이 모든 질문은 쿠버네티스의 보안 모델(Security Model)에 의해 결정된다.이 글에서는 다음 4가지를 중심으로 보안 기능을 정리해본다. 1. RBAC - 리소스 접근 권한을 제어하는 시스템RBAC를 처음 알게된건 argoCD로 쿠버네티스 CD를 맡았을 때 처음 접하게 되었다.RBAC(Role-Based Access Control)은사용자 또는 서비스 계정이 어떤 리소스를 어떤 권한으로..
0. 들어가며쿠버네티스는 본질적으로 컨테이너의 실행을 관리하는 플랫폼이다.그런데, 컨테이너의 가장 큰 특징 중 하나는 휘발성(volatility)이다.즉, 컨테이너가 종료되면 그 안의 데이터도 함께 사라진다. 예를 들어 이런 상황을 생각해보자.docker run -it busybox# echo "hello" > /data.txt# exit 컨테이너를 다시 시작하면 /data.txt는 사라져 있다.왜? 컨테이너는 영속적인 저장소를 갖지 않기 때문이다. Kubernetes 환경도 마찬가지다.Pod이 재시작되면 그 안에서 생성한 데이터는 모두 사라진다. 그럼 어떻게 영속적인 데이터 저장이 가능할까? 1. Pod 안에서 파일을 저장하려면? Volume! 쿠버네티스는 이 휘발성을 해결하기 위해 Volume이라는 ..
0. 들어가며쿠버네티스는 클러스터 내에 수많은 Pod을 생성하고, 이를 자동으로 복제하고 교체하면서도 서비스는 끊기지 않도록 유지해야 한다.이를 위해 필수적인 기능이 바로 Service와 네트워크 추상화다.이번 글에서는 다음과 같은 질문에 대해 정리해본다Pod은 어떻게 서로 통신할까?외부에서 내 서비스를 접근할 수 있게 하려면 어떻게 해야 할까?Pod이 없어졌다 다시 생성되면 IP가 바뀌는데, 어떻게 연결을 유지할까?클러스터 내 통신은 안전한가? 제한 가능한가?1. 쿠버네티스 네트워킹의 기본쿠버네티스는 다음과 같은 기본 네트워크 모델을 전제로 한다. 모든 Pod은 고유한 IP를 가진다.Pod 간에는 직접 IP로 통신 가능해야 한다.Node 간, Pod 간 통신은 NAT 없이 평면 네트워크를 구성해야 한다..