전체 글 789

쿠버네티스 node not ready이면 어떤 일이 일어날까?

1.  개요이 글은 쿠버네티스 node가 not ready일 때, 내부적으로 어떤 동작을 하는지 설명합니다. 2.  요약not ready인 node에 pod가 스케쥴링되지 않도록 taint를 설정not ready 상태가 5분이 지나면 pod를 eviction 3.  node가 not ready가 되면3.1.  node taint 업데이트쿠버네티스는 not ready가 된 node에 pod가 스케쥴링 되지 않도록, node에 taint를 설정합니다. taint는 node.kubernetes.io/unreachable:NoExecute와 node.kubernetes.io/unreachable:NoSchedule를 설정합니다.kubectl describe node {not ready node} | grep..

NestJS HttpHealthIndicator를 사용하다가 만난 오류

1.  상황Nestjs에서 readiness를 구현하기 위해 HttpHealthIndicator를 사용했습니다. HttpHealthIndicator를 사용해서 HTTP 통신이 가능한지 확인합니다.@Controller('health')export class HealthController { constructor( private httpHealthIndicator: HttpHealthIndicator ) {} @Get('/readiness') @HealthCheck() async checkReadiness() { return this.healthCheckService.check([ async () => this.httpHealthIndicator.pingCheck('self', ..

Nestjs Liveness, Readiness 설정 전략

1.  개요안녕하세요. 이 글은 쿠버네티스에서 Nestjs 헬스체크를 하기 위한 LivenessProbe, ReadinessProbe 설정 전략에 대해 이야기 합니다. 설정 방법이 아니라 설정 전략입니다. 2.  설정 방법LivenessProbe, ReadinessProbe 설정 방법은 Nestjs Healthchecks 공식문서에 너무 자세히 설명되어 있습니다. Terminus패키지를 사용합니다.Nestjs Healthchecks 공식문서: https://docs.nestjs.com/recipes/terminus LivenessProbe ReadinessProbe API를 생성하고, 어떤 목록을 검사할지 구현하면 끝입니다. 구현 시 Terminus패키지에서 제공하는 Health Indicator를 사용..

ReactJS와 Kubernetes Controller의 원리는 비슷

2025년 설날에 ReactJS를 공부를 하고 있었는데, ReactJS 동작원리가 쿠버네티스 controller manager와 매우 비슷하다는 것을 느꼈습니다. ReactJS는 가상 DOM을 사용하여 HTML을 수정합니다. 사용자가 작성한 JSX파일은 가상 DOM으로 렌더링되는데, 새로 생성된 가상 DOM이 최종 HTML에 적용되는 것을 기대합니다. 마치 쿠버네티스 controller manager가 의도된 상태를 적용하는 원리와 매우 비슷합니다. 결국, 사용자가 작성한 개 발코드는 쿠버네티스에 비유하면 desired state가 됩니다. 제가 생각한 이론이 맞는지 ChatGPT를 활용했습니다. 아래 그림은 ChatGPT에게 여러 질문들을 해보고 비교한 결과입니다.

ReactJS에 Tailwind CSS v4.0 적용하는 방법

안녕하세요. 이 글은 ReactJS에 Tailwind v4.0을 적용하는 방법을 설명합니다. 2025.1.22에 Tailwind CSS v4.0가 공개되어 ReactJS에 Tailwind v4.0이 잘 적용되는지 확인해봤습니다. Tailwind는 CSS프레임워크로써 HTML 요소에 tailwind 클래스를 활용하여 스타일을 적용합니다. 1.  ReactJS 프로젝트 생성vite를 사용하여 ReactJS 프로젝트를 생성합니다. 저는 프로젝트 이름을 test-project로 설정했고 언어는 typescript를 사용합니다.npm create vite@latest ReactJS 프로젝트 경로로 들어가서 패키지를 설치합니다.cd test-projectnpm install 2.  Tailwind CSS 설치1) ..

컨테이너 이미지가 immutable 하지 않아서 겪은 이슈

사용하고 있는 SaaS 컨테이너 이미지가 immutable하지 않아 겪었던 이슈를 이야기해보려고 합니다. 컨테이너 이미지가 immutable이라는 의미는 컨테이너 이미지 내용이 변하지 않는 것을 보장합니다. 항상 같은 컨테이너 이미지 태그를 사용하면 어디서 실행하던지 내용은 같다는 뜻입니다. 하지만 최근 immutable하지 않은 이미지로 개발환경에서 이슈를 겪었고 동일 증상이 운영환경에서도 일어날 수 있는 것을 확인했습니다.  이슈의 시작은 개발환경에서 crashloopbackoff에서 시작합니다. 해당 pod는 init container와 애플리케이션 컨테이너가 있었고, init container오류로 pod가 crashloopbackoff였습니다. init container는 약 한달동안 이슈가 없..

회고모음 2025.01.14

EKS Pod 운영비용: 비용 절약과 안정성 사이의 현실적인 선택

AWS EKS 환경에서 운영 비용을 줄이려면 다양한 방법을 고려해야 합니다. 그중 하나는 모든 pod를 하나의 AZ(Availability Zone)에서 실행하는 것입니다. 동일한 AZ 내의 네트워크 트래픽은 추가 비용이 발생하지 않으므로, 이를 통해 비용을 절감할 수 있습니다. 비용 절약의 이점동일 AZ에서만 pod를 운영하면 네트워크 전송비용이 발생하지 않아 한 달 운영비용의 15%를 절약할 수 있습니다. 예를 들어, 한 달 운영비용이 1억 원이라면 1,500만 원을 아낄 수 있는 셈입니다. 안정성의 문제하지만 AZ를 하나만 사용하면 단일 장애점(Single Point of Failure)이 발생할 위험이 있습니다. AZ 장애가 발생하면 모든 서비스가 중단되어 서비스 안정성이 심각하게 저하될 수 있습..

쿠버네티스 노드 헬스체크 원리(lease API)

1.  개요이 글은 쿠버네티스가 어떻게 노드를 헬스체크하는지 설명합니다. 노드 헬스체크의 원리는 비정상 노드의 kubelet로그를 분석할 때 활용할 수 있습니다. 2.  이 글을 읽으면 알 수 있는 것노드 헬스체크에 사용하는 kubernetes lease API헬스체크가 실패한 node를 not ready로 변경하는데 걸리는 시간 3.  헬스체크 알고리즘: lease쿠버네티스의 노드 헬스체크는 lease 알고리즘을 사용합니다. lease는 번역하면 임대라는 뜻입니다. lease라는 개념은 일정 시간 동안만 자원을 빌린다는 뜻입니다. 쿠버네티스는 노드를 lease 객체로 등록하여 노드자원을 lease 합니다.kubectl get leases -n kube-node-lease lease 알고리즘은 일정..

회고 - 개발환경에서 테스트할 수 없어, 운영환경에 바로 적용했는데 장애

드물게 개발 또는 검수(QA)환경이 없는 시스템이 있습니다. 운영환경에 바로 작업을 해야 합니다. 기능을 수정하거나 추가할 때, 작업자는 작업이 성공적으로 끝나길 기도할 수 밖에 없습니다.최근에 저도 운영환경에 바로 적용해야 할 때가 있었는데, 작업이 잘 안 안되었고 서비스 장애가 났었습니다. 약 20분정도 걸려 장애를 복구 했습니다. 작업이 끝나고, 운영환경  밖에 없는 시스템에서 어떻게 기능을 적용할지 많은 고민이 들었습니다.

회고모음 2025.01.12