Cluster내에서는 여러 Worker Node들이 연결되어 있고, 각 Node에는 여러 Pod들이 배치될 수 있다.배치된 Pod들은 CPU를 많이 잡아먹는 Workload, 혹은 메모리를 많이 잡아먹는 Workload 등 다양한 요구사항을 가질 수 있다. 그리고 Worker Node 또한 각각 사양이 다를 수 있기에, 이러한 요구사항과 cluster 내의 Node 상황에 맞춰 Pod를 효율적으로 Scheduling 하는 것이 중요하다. 효율적인 Pod의 Scheduling을 위해 Kubernetes에서는 Resource Requests와 Limits를 사용한다.이번에는 이 두 요소를 알아보도록 한다. Resource RequestsContainer가 생성될 때, 특정 용량을 요청하는 것, 해당 pod..
전체보기
Taint & Tolerant어떤 pod가 특정 node에 schedule되는 것을 제한하는 것 (set restriction)즉, 특정 node가 특정 pod만 수용할 수 있도록 하거나 특정 node에 특정 pod가 배치되지 않도록 하는 수단이다. Taint는 node에 지정하는 요소이고, Tolerant는 pod에 지정하는 요소다.이해하기 쉽게 보자면, Taint는 '벌레 퇴치 스프레이', 그리고 Tolerant는 Taint에 적응할 수 있는 면역력으로 생각할 수 있다. Taint와 Tolerant를 이해하기 위해 아래와 같이 Node와 Pod들이 있다고 가정해본다. Node라는 사람 객체에 Pod라는 벌레 객체가 붙는다. 이때 Node에 예를 들어 app=prd 라는 Taint를 적용하게되면, ..
Pod를 새롭게 생성하면 Master Node(Control plane)의 Scheduler가 pod를 실행시킬 node를 선택하고 배치한다.그럼 이 Scheduler는 어떤 기준으로 pod를 실행시킬 node를 결정하는 것일까?cluster내의 node들은 모두 같은 사양을 가질수도 있지만, 각기 다른 스펙의 사양을 가질 수도 있다. 워크로드 또한 리소스 자원을 많이 요구하는 것이 있고, 비교적 적은 양을 요구하는 것이 있다. 각 node들의 리소스를 효율적으로 사용하기 위해서는 다양한 제약 조건과 요구사항 등을 고려하여 pod를 배치해야한다. 특정 워크로드가 적합한 노드에서 실행되도록 할 수 있다.이번 글에서는 Label과 Selector, 추가로 Annotation에 대해 알아보도록 한다. Labe..
최근에 작업하고 있는 프로젝트에 API용 django가 하나있다. 이 django를 프론트가 사용할 수 있도록 EC2에 호스팅을 하는 중이다. 개발 중간중간에 변경사항들을 매번 인스턴스에 접속해서 재시작해주는 과정이 번거로워 간단하게 Github Actions를 이용해 code가 push되면 그 내용을 반영시켜 바로 배포되도록 구성을 해보았다. 이번에는 django 프로젝트를 EC2 인스턴스에 배포하는 Github Actions 파이프라인을 구성해보도록 한다.EC2에 배포되는 django 서버는 Docker로 컨테이너화 시켜서 docker-compose를 이용해 배포하도록 한다. 이 글에서 다루는 전체적인 배포 파이프라인은 다음과 같다. AWS Credential 설정Github Actions를 실행하는..
23년 3월 소집해제와 동시에 복학해서 24년을 맞고, 예비군 통지서가 날라오게 되었다.24년은 학생예비군 소속으로 우리 단과대와 함께 장소는 수원화성오산과학화예비군훈련장으로 배정되었다. 훈련장 위치 소집 마감 시간은 9시로, 필자의 경우 단체 버스이동이 아닌 자차로 이동했다. 대략 8시 근처쯤 훈련소 근처에 다다라서 고속도로를 빠져나오면 무수히 많은 차들의 행렬이 대기중이기 때문에 최대한 여유있게 출발하는 것을 추천한다. 훈련소에 도착하면 입구 좌측으로 주차 타워가 위치한다. 면적도 넓고, 층수도 꽤 있어서 (4층?) 어지간하면 주차 공간에 문제될 경우는 없을 듯하다. 입장과 디지털 대시보드복장 갖추고 입장하면 바로 QR코드로 자가 진단을 진행하고, 입구에서 스마트폰 카메라 전/후면에 스티커를 붙..
이번 프로젝트에서 API 부분은 Django와 drf(djangorestframework)를 사용해서 구현하기로 했다.우선 사용자로부터 비디오파일을 업로드받아 이를 Bucket에 저장하고, 저장됨과 동시에 Model 처리 서버로 하여금 처리작업을 시작하도록 파이프라인을 구성했다. 그 뒤로 Model 처리 결과 중 RISK 탐지내역을 클라이언트에 프레임 별로 처리되는 즉시 전송을 해주어야한다. 아무래도 주제가 CCTV 관제의 보조 도구이므로 실시간성이 무엇보다도 중요하게 다가왔다.이를 위해서는 RISK 탐지 내역의 Streaming API의 구현이 필요했다. Streaming의 구현에서 주로 언급되는 기술로는 폴링과 웹 소켓이 있다. 이외에도 SSE(Server-Sent Event)기법이 있다.이 기술들 ..
졸업 캡스톤 프로젝트에서 사용해보기 위해 라즈베리파이 4B 모델을 구하게 되었다.그리고 이 라즈베리파이에 카메라 모듈도 연결해 영상 스트림을 생성해야했었다.이번에는 라즈베리파이의 초기 설정과 카메라 모듈까지 연결하는 과정을 알아보도록 한다. 라즈베리파이 초기 설정먼저 제품 박스를 열면 손바닥 크기도 채 안되는 사이즈의 메인보드 기판이 나오게 된다.번외로 라즈베리파이 4B의 단자 구성은 아래와 같다.USB 2.0 포트 X 2USB 3.0 포트 X 2기가비트 이더넷 포트micro HDMI 포트 X 2USB-C 파워 포트 먼저 파이에 들어갈 OS를 설치해주어야 한다.기본적으로 파이는 SD카드를 스토리지로 삼는다. SD카드 슬롯은 좌측 (USB 포트 반대편) 하단에 위치한다. ..
지난 3-tier VPC 구축에 이어서, 이번에는 Application단(EC2, ALB 등)을 설계해보도록 한다. 아키텍쳐 구성도 Terraform 코드 작성 Application 단에서 생성할 리소스는 크게 다음과 같다. 인스턴스 4개 보안그룹 키 페어 ALB 2개 (외부, 내부) 대상그룹 2개 (외부, 내부) 먼저 Application 모듈의 변수들을 구성한다. Application 단에서 사용될 외부 변수들에는 주로 vpc 관련의 것이 있다. 인스턴스를 생성할 때 사용될 vpc_id나 배치될 서브넷의 id 값이 여기에 해당된다. 이외에도 ami의 id값이나 미리 생성해둔 security group의 id 같은 리소스도 변수로 불러와서 사용할 수도 있을 것이다. variable "vpc_id" {}..