k8s 5

[k8s] Kubernetes Canary 사용시 주의사항

이번에 Kubernetes Canary 배포를 하면서 제일 크게 배운 내용 중 하나가 바로 이거였다."카나리 파드만 있고, 스테이블 파드가 하나도 없으면 왜 API 호출이 안되는가?"처음에 진짜 의문이었다. 헤더에 X-Canary: true 붙이면 Canary Ingress로 가니까 Stable 파드 없어도 되는거 아닌가? 이렇게 생각했는데... 현실은 전혀 아니었다.결론부터 말하면NGINX Ingress 구조 상 Canary Ingress는 "보조"일 뿐이고 "메인"은 항상 Stable Ingress다.Stable Ingress → 기본 처리 대상Canary Ingress → 조건 맞을 때 일부 트래픽만 처리 (override)Stable Ingress가 없는 상태에서는 Canary Ingress만 있..

[k8s] Kubernetes Canary 배포 삽질기

최근에 Kubernetes에서 새로운 버전을 배포하면서 canary 트래픽 테스트를 해봤다.기존 파드를 유지한 채로, 새로운 버전의 파드를 하나만 띄우고 인그레스에서 일부 트래픽만 넘기는 구조를 목표로 했는데, 생각보다 시행착오가 많았다. 아래는 그 과정에서 겪었던 실수들과 해결했던 방법들을 정리한 내용이다.1. Deployment의 selector와 labels가 안 맞을 때처음엔 아래와 같이 새로운 Deployment를 구성했다.spec: selector: matchLabels: app: example-app-v2 version: canary template: metadata: labels: app: example-app version..

[k8s] Kubernetes canary 사용기

이번에 Kubernetes에서 Canary 배포를 적용하면서 여러 가지 개념과 동작 원리에 대해 스스로 정리할 수 있는 기회가 있었다. 처음엔 단순히 Ingress에 canary-weight만 붙이면 되는 줄 알았는데, 막상 해보니까 생각보다 훨씬 깊은 구조와 동작 흐름이 숨어 있었다.1. Ingress는 어떻게 트래픽을 나누는가?처음엔 궁금했다. Ingress 리소스에 연결된 Service는 하나인데, 어떻게 요청이 Canary와 Stable로 나뉘지? 알고 보니 Ingress 리소스는 여러 개를 만들 수 있고, 동일한 host와 path를 가진 Ingress가 두 개 있을 때, 그중 하나에 nginx.ingress.kubernetes.io/canary: "true"와 같은 annotation을 붙이면..

쿠버네티스에서 HPA와 VPA를 동시에 사용하면 안 되는 이유

쿠버네티스는 자동화된 자원 관리를 통해 애플리케이션의 확장성과 안정성을 유지할 수 있는 다양한 기능을 제공합니다. 그중에서도 Horizontal Pod Autoscaler (HPA)와 Vertical Pod Autoscaler (VPA)는 각각의 역할에 따라 파드의 수와 리소스를 자동으로 조절해줍니다. 하지만 이 두 기능을 동시에 사용하면 예상치 못한 충돌이 발생할 수 있습니다. 이 블로그에서는 HPA와 VPA의 역할과 함께, 이들이 충돌하는 이유에 대해 알아보겠습니다.1. HPA와 VPA의 역할1.1. Horizontal Pod Autoscaler (HPA)HPA의 기능: HPA는 파드의 수를 자동으로 조절하는 기능입니다. 예를 들어, 애플리케이션의 CPU 사용량이 특정 임계치를 초과하면 HPA는 더 ..

쿠버네티스에서 QoS와 트래픽 손실 방지 방법

1. QoS (Quality of Service) 클래스쿠버네티스는 파드의 자원 요청 및 제한을 기반으로 세 가지 QoS 클래스를 제공합니다. 이는 자원 부족 시 파드를 효율적으로 회수하여 클러스터의 안정성을 유지하는 데 중요한 역할을 합니다.1.1. Guaranteed특징: 파드의 모든 컨테이너가 자원 요청과 제한을 동일하게 설정한 경우.우선순위: 가장 높은 우선순위로, 자원 부족 시 마지막으로 회수됨.1.2. Burstable특징: 파드의 일부 컨테이너만 자원 요청을 설정하거나, 요청과 제한이 다르게 설정된 경우.우선순위: 자원 사용량이 요청한 자원을 초과하는 파드부터 회수됨.1.3. BestEffort특징: 파드의 모든 컨테이너가 자원 요청과 제한을 설정하지 않은 경우.우선순위: 가장 낮은 우선순위..