본문 바로가기
728x90

DevOps/Kubernetes27

Kubernetes Custom Resource와 Custom Controller 소개 쿠버네티스의 확장 기능인 커스텀 리소스와 커스텀 컨트롤러에 대해 알아보자.Controller와 선언형 리소스쿠버네티스의 모든 리소스는 선언형으로 관리된다. 그리고 모든 쿠버네티스 리소스는 다음의 형식을 띈다.apiVersion: apps/v1kind: Deploymentmetadata: name: account-service namespace: saga labels: ... annotations: ...spec: ...status ...apiVersion: 리소스 API 버전kind: 리소스 종류metadata: 리소스 메타데이터로, 특정 리소스를 식별하기위해 사용spec: 리소스의 의도한 상태status: 리소스의 현재 상태, 쿠버네티스는 리소스의 현재 상태를 의도한 상태로 변경하.. 2025. 10. 13.
Kubernetes Node ContainerGCFailed 트러블슈팅 어느날 쿠버네티스 워커노드에서 갑자기 ContainerGCFailed 이벤트가 발생하여 노드의 디스크에 문제가 발생했다.Events: Type Reason Age From Message ---- ---- ---- ---- ---- Warning ContainerGCFailed 3m2s (x151 over 152m) kubelet failed to read podLogRootDirectory "/var/log/pods": open /var/log/pods: input/output error 해당 이벤트가 발생한 노드에서 .. 2025. 9. 30.
CoreDNS DNS Resolve timedout과 ndots 쿠버네티스를 운영하다가 트래픽이 어느정도 된 이후에 간헐적으로 DNS Resolve timedout가 발생한 적이 있는데 관련해서 쿠버네티스에서 CoreDNS와 DNS 쿼리 관련하여 분석해보았다. 애플리케이션에서 찍힌 에러 로그는 다음과 유사하다.Failed to resolve 'api.test.com' [A(1)] after 2 queries CoreDNS와 서비스간 통신CoreDNS는 쿠버네티스에서 클러스터에서 DNS 서버역할을 하는 애드온이다. 클러스터 내에서 서비스를 생성하면 서비스에 대한 DNS 레코드가 생성되는데 이러한 DNS 레코드는 CoreDNS에서 관리한다. 예를 들어, saga 네임스페이스의 account-service가 생성되면 account-service.saga.svc.cluste.. 2025. 9. 27.
쿠버네티스에서의 고가용성 (High Availability) High Availability고가용성(High Availability) 은 시스템 내의 어떤 구성 요소에 장애가 발생하더라도 실패나 다운타임 없이 시스템을 지속적으로 운영할 수 있는 능력을 의미한다. 보통 고가용성을 99%, 99.9% 와 같은 비율로 표현하는데 99.999%의 매우 높은 가용성을 의미하는 fine-nines availability 라는 가용성 표준이 있으며, 이 가용성을 유지하려면 1년에 약 5분 15초 이하의 다운타임을 유지해야 한다. 고가용성 시스템을 잘 구축하려면 시스템을 잘 설계해야 하며 철저한 테스트를 거쳐야 한다. 시스템의 구성 요소가 서비스 중단 발생 시에도 시스템이 지정된 가용성 표준을 유지할 수 있도록 설계해야 한다. 고가용성은 어떻게 작동하나?시스템을 항상 100%로.. 2025. 1. 26.
Kubernetes HPA (파드 오토스케일링) [2] - 동작 제어 이전 장에서는 HorizontalPodAutoscaler에 대한 기본적인 내용에 대해 알아보았다. HorizontalPodAutoscaler에 대해 처음 들어보았다면 아래 글을 먼저 읽어보는 것이 좋다.  2025.01.05 - [DevOps/Kubernetes] - Kubernetes HPA (파드 오토스케일링) [1] - 기초 Kubernetes HPA (파드 오토스케일링) [1] - 기초HPA (Horizontal Pod Autoscaler)는 Deployment나 StatefulSet 등의 워크로드의 레플리카 갯수를 수요에 맞게 자동으로 스케일링하도록 한다. 수평 스케일링은 레플리카를 늘리고 줄이는 것을 의미한다. 통상beer1.tistory.com   autoscaling/v2 버전의 Horiz.. 2025. 1. 5.
Kubernetes HPA (파드 오토스케일링) [1] - 기초 HPA (Horizontal Pod Autoscaler)는 Deployment나 StatefulSet 등의 워크로드의 레플리카 갯수를 수요에 맞게 자동으로 스케일링하도록 한다. 수평 스케일링은 레플리카를 늘리고 줄이는 것을 의미한다. 통상적으로 레플리카를 늘리는 것을 scale-out, 줄이는 것을 scale-in 이라고 부른다. 수직 스케일링이라는 것도 있는데, 이는 레플리카를 조절하는 것이 아닌 CPU 및 메모리 등 서버의 스펙을 늘리거나 줄이는 것을 의미한다. (이는 scale-up / scale-down 으로 불린다.)HPA 동작 방식쿠버네티스에는 HPA를 지원하기 위해 HorizontalPodAutoscaler API와 이에 대응하는 컨트롤러를 제공한다. HorizontalPodAutoscale.. 2025. 1. 5.
Kubernetes Scheduling - Node Affinity Affinity를 사용하여 파드를 스케줄링할 노드를 찾을 때의 제약조건을 정의할 수 있다. Affinity를 사용하면 이전 시간에 언급한 nodeSelector보다 더 풍부한 방식으로 파드를 실행시키는 노드의 조건을 설정할 수 있다. Affinity에는 크게 NodeAffinity와 Pod간 Affinity가 있다. 이번 글에서는 Node Affinity에 대해 알아보자.NodeAffinityNode Affinity는 node label를 기반으로 파드를 스케줄링할 수 있는 노드를 제한할 수 있다. Affinity는 파드의 Spec이기 때문에 Affinity를 사용하면 파드가 노드를 선택하는 개념으로 볼 수 있다. Scheduler에서는 NodeAffinity 플러그인에서 NodeAffinity에 대한 .. 2024. 5. 2.
Kubernetes Scheduling 소개 및 NodeSelector Kubernetes Scheduling쿠버네티스에서 스케줄링은 파드를 실행할 쿠버네티스 클러스터에 있는 적절한 노드를 찾는 과정을 말한다. 기본적으로 쿠버네티스에서 스케줄링은 컨트롤 플레인에 있는 kube-scheduler라는 컴포넌트가 그 기능을 담당한다. 물론 쿠버네티스의 스케줄링 메커니즘을 잘 이해한다면 자신만의 커스텀 스케줄러를 구현하는 것도 가능하다. kube-schedulerkube-scheduler는 쿠버네티스의 컨트롤 플레인의 구성요소로, 쿠버네티스의 기본 스케줄러이다 kube-scheduler는 새로 생성되었지만 아직 노드에 스케줄링되지 않은 파드를 실행하기 위해 최적의 노드를 선택한다. kube-scheduler에서 파드를 스케줄링을 할 때는 기본적으로 총 12단계를 거치게 된다. 그 .. 2024. 5. 1.
[1] 쿠버네티스 확장 - kubectl plugin kubectl 도구는 내부적으로 쿠버네티스 API를 사용하여 쿠버네티스 클러스터와 통신하여 쿠버네티스 클러스터와 리소스를 조회하고 변경하기 위해 사용하는 CLI 툴이다. kubectl에서는 쿠버네티스 리소스를 조회하거나 변경하기 위한 여러가지 명령어들을 제공하고 있다. 그런데 kubectl에서 제공하는 명령어 외에도 사용자가 직접 쿠버네티스 클러스터에 관련된 기능들을 개발하여 명령어를 추가할 수 있다. kubectl 커맨드라인 도구 자체에서 플러그인을 사용할 수 있도록 확장성 있게 개발되었기 때문에 추가 명령어 개발이 가능하다. kubectl plugin kubectl에서 사용하는 plugin을 개발하려면 kubectl-로 시작되는 독립적인 실행 파일을 개발하기만 하면 된다.kubectl-xxx 이라는 .. 2023. 10. 29.
728x90