앞서 리소스 스케쥴링 중 Taint와 Tolerant, 그리고 node Affinity를 잠깐 알아보았다.이번에는 리소스 스케쥴링 전략 중 Affinity를 알아보도록 한다. AffinityPod가 특정 node에 배치되도록 설정하는 정책, Pod에 적용되는 설정앞서 살펴본 Taint는 Pod가 특정 node에 배치되지 않도록 하는 정책으로, node에 적용하는 설정이였다. Affinity에는 node를 기준으로 하는 node Affinity와 pod를 기준으로 하는 pod Affinity가 있다.각 Affinity는 조건의 강도에 따라 2종류로 나뉘게 된다.requiredDuringSchedulingIgnoredDuringExecution : 이 조건을 만족하는 node에만 pod를 스케쥴링 (Hard..
전체 글
어차피 이 세상은 아만보AWS VPC CNIAWS 환경에서 동작하는 Kubernetes 클러스터에 제공하는 CNI(Container Network Interface)로, node에 배치되는 pod들에도 VPC IP를 할당해 pod 간 통신을 구현하는 방법node와 pod가 동일한 네트워크 대역을 사용한다는 특징이 존재한다. 기존의 다른 kubernetes CNI들이 네트워크 오버레이와 같은 기술을 사용해 pod에 IP를 할당했다면, AWS VPC CNI는 node 내부의 pod 간 통신은 네트워크 브릿지를 통해서 이루어지고, node를 넘어서는 pod 간 통신은 오버레이 기술이 아닌 일반 VPC 통신이 이루어진다. (VPC Native) EKS는 기본적으로 VPC CNI를 사용하고, kOps로 클러스터를 만드는 경우 clus..
KEDAKubernetes Event-Driven Autoscaler, 이벤트 기반 오토스케일링을 지원하는 컴포넌트기존의 Kubernetes 클러스터 환경에서 pod의 Auto Scaling의 경우, HPA가 있었다.하지만, 이 HPA는 CPU나 메모리 Metric을 기반으로 밖에 pod를 Scaling할 수밖에 없었다.이에 따라 외부 서비스 Metric (DB, Queue, CSP 서비스 등)을 기반의 이벤트 기반 pod Auto Scaler인 KEDA가 등장하게 되었다. 공식 Docs에 따르면 KEDA는 현재 68종류의 이벤트 소스와의 연동을 지원한다. KEDA는 HPA와 같이 동작하며, HPA를 보조하는 역할로 볼 수 있다.KEDA가 연결된 이벤트 소스로부터 특정 이벤트를 감지하면, HPA의 값..
kOps클라우드 환경에 kubernetes 클러스터를 배포할 수 있게 도와주는 클러스터 배포 자동화 오픈소스 툴 보통 각 CSP 별로 Managed Kubernetes 서비스가 존재한다. (AWS의 EKS, GCP의 GKE, Azure의 AKS 등등) 이러한 Managed 서비스와는 비용계산이나 배포 방식 등이 다르다.예를 들어, EKS는 Control plane을 AWS managed 방식으로 사용하기에 그 비용이 많이 나온다.또한 Control Plane은 AWS managed라 직접 접근할 수 없다.kOps는 이러한 master node를 사용자가 직접 관리하게 함, 따라서 Control Plane 노드에 대한 접근도 가능하다인스턴스 유형도 조절이 가능해, 싸게 간단한 클러스터를 구축할 수 있다.k..
클라이언트로 하여금 파일을 업로드받거나, 그 파일을 워크로드를 거친 후 결과물을 다운로드받게 하고자 하는 경우 보통 S3 버킷을 하나 생성해서 파일을 관리한다. 그리고 그 버킷을 Public하게 오픈시켜 클라이언트들이 접근하게 만든다. 하지만 이렇게 단순히 Public하게 오픈시켜 모든 클라이언트로 하여금 파일을 업/다운로드하게 하는 것은 과연 안전한 방법일까?그리고 클라이언트의 파일을 우리의 백엔드 API를 통해서 S3로 업로드하면, 우리의 백엔드에도 파일을 받고 전송하는데에 대한 부하가 발생하게 된다. 이러한 문제를 위해 S3에서는 Presigned-URL이라는 기능을 지원한다. Presigned-URL버킷에 대한 접근 권한이 있는 사용자를 통해 버킷의 특정 객체에 대한 접근을 허용하는 단기간성 U..
서버를 운영하게 되면 로그는 자연스럽게 발생한다. 이러한 로그들은 양도 많을 뿐더러 관리하는 서버의 수가 많아지면 그 내용들을 일일히 직접 확인하기란 어려울 따름이다. 그래서 로그 수집과 가시화 시스템을 구축하여 로그들을 모니터링하게 된다. 이번에는 Loki와 Promtail, Grafana를 이용해 로그를 모니터링하는 아키텍쳐를 구축해보도록 한다. Loki & PromtailLike Prometheus, but for logs Loki는 오픈소스 타입의 로그 모니터링 도구로, 로그를 Label을 통해 그룹화해 처리한다. Prometheus가 Metric을 수집하는데에 목적을 두었다면, Loki는 로그를 수집하는데에 목적을 둔 도구로 볼 수 있다.로그 라인의 메타데이터(Label)를 인덱싱해, 그 L..
프로젝트 진행 중 input 영상 스트림에서 위험 구간을 탐지해 새로운 비디오 Clip 파일로 생성해주는 구간이 있었다.이 부분에서는 OpenCV의 VideoWriter 클래스를 이용해 파일을 생성했다. # VideoWriter 객체 선언out = cv2.VideoWriter(filename='out.mp4', fourcc=cv2.VideoWriter_fourcc(*'mp4v'), fps, frameSize)# frame을 VideoWriter에 저장 (프레임 저장)out.write(frame)# 비디오 파일로 저장out.release() VideoWriter 객체 생성에는 저장될 영상의 파일명을 포함한 속성값을 지정해주어야한다.filename : 파일명Video_Writer_fourcc : FOURCC..
SSL 트래픽을 처리하는 방법에는 크게 3가지가 존재한다.SSL Termination (Offloading)SSL PassthroughSSL Bridging이 방법들을 각각 알아보도록 한다. SSL Termination (Offloading)SSL Termination은 SSL 암호화 트래픽을 서버 측으로 전달하기 전에 로드밸런서 단에서 SSL 암호화를 푼 뒤, 전달해준다. 이 방식은 SSL 암복호화를 내부 웹 서버단이 아닌 로드밸런서/프록시가 해준다는 점에서 내부 백엔드 서버의 부담을 줄여주게 된다. 이러한 이유로 인해 SSL Offloading(전가)이라고도 불리게 된다.또한, SSL 인증서를 내부의 백엔드 서버별로 각각 설치해줄 필요 없이, 로드밸런서 측에만 설치해주면된다는 점도 존재한다. 다만..