본문 바로가기
728x90

분류 전체보기80

kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [3] 이전 시간에는 kubebuilder를 사용하여 ClusterJob이라는 Custom Controller의 일부를 구현하였고, 실제로 쿠버네티스에 배포하여 동작을 확인하였다. 이번 시간에는 ClusterJob Custom Controller의 나머지 기능들을 전부 구현해볼 예정이다. 2025.10.25 - [DevOps/Kubernetes] - kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [1] kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [1]이번 글에서는 kubebuilder를 사용하여 Custom Resource, Custom Controller를 직접 만들어보는 과정을 정리해보았.. 2025. 10. 26.
kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [2] 이전 시간에는 kubebuilder를 사용하여 프로젝트를 구축하고, Custom Resource를 만들었다. 이번 시간에는 Custom Controller를 만들어서 ClusterJob의 기능을 직접 구현해볼 예정이다. 2025.10.25 - [DevOps/Kubernetes] - kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [1] kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [1]이번 글에서는 kubebuilder를 사용하여 Custom Resource, Custom Controller를 직접 만들어보는 과정을 정리해보았다.주제 정하기Custom Resource, Custom Con.. 2025. 10. 25.
kubebuilder를 사용하여 Custom Resource, Custom Controller 만들어보기 [1] 이번 글에서는 kubebuilder를 사용하여 Custom Resource, Custom Controller를 직접 만들어보는 과정을 정리해보았다.주제 정하기Custom Resource, Custom Controller 만들기 전에 가장 먼저 해야 할 것은 어떤 것을 만들어볼지 결정하는 것이다. 일단 쿠버네티스를 운영하면서 느꼈던 불편한 점은, 쿠버네티스 클러스터의 각 노드마다 어떤 작업을 해줘야 할 때가 있다. 워커노드에 저장된 시스템 로그를 백업한다거나, 아니면 각 워커노드에 특정 설정파일을 갱신한다거나 등이 있다. 여기서 각 노드마다 어떤 작업을 해줄 적절한 워크로드가 있으면 좋을 것 같다는 생각을 해봤는데, DaemonSet은 일회성 작업을 하기에 적당하지 않은 느낌이었다. 먼저 DaemonSet.. 2025. 10. 25.
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.
JVM GC에 대해 알아보자. (G1GC) G1GCG1GC는 대용량 메모리로 확장되는 멀티 프로세서 머신을 대상으로 설계되었다. 별도 구성 없이 높은 처리량을 달성하는 동시에 높은 확률로 적은 STW(Stop the world) 시간을 목표로 충족하려고 시도한다. G1GC는 아래와 같은 특징을 갖춘 애플리케이션을 대상으로 latency와 처리량 간의 최적의 균형을 제공하는 것을 목표로 한다.최대 수십GB 이상에 달하는 heap, heap의 50% 이상이 라이브 데이터로 차지된다.시간이 지남에 따라 크게 달라질 수 있는 객체 할당 및 프로모션 비율heap에 상당히 많은 조각화가 있다.몇백 ms를 넘지 않는 예측 가능한 일시 정지시간을 목표로 하여 긴 가비지 수집 일시 중지를 방지한다. 메모리 구조G1은 다른 GC와 마찬가지로 Heap을 Young과.. 2025. 9. 21.
JVM GC에 대해 알아보자. (Serial GC & Parallel GC) Garbage CollectorGarbage Collection는 JVM에서 자바의 메모리를 관리하는 방법으로, 애플리케이션에서 더 이상 참조되지 않는 객체의 메모리를 회수하는 자동 메모리 관리 방식이다. 자바 애플리케이션을 개발할 때 new 연산자를 사용하여 객체를 생성하게 된다.void newPerson() { Person p = new Person(20, "beer1"); ...} 이 때 p라는 객체는 Heap이라는 메모리 영역에 저장된다.main() 메서드에서 해당 메서드를 호출한다면, Stack 영역에서는 main StackFrame 위에 newPerson() 에 해당하는 StackFrame이 생성되고, p라는 변수를 할당했으니 newPerson() StackFrame에 p 객체 주소.. 2025. 9. 20.
istio 503 UC upstream_reset_before_response_started{connection_termination} 트러블슈팅 istio를 운영하면서 503 UC upstream_reset_before_response_started{connection_termination} 겪은 이슈와 나름의 해결 방법에 대해 소개하고자 한다.이슈 상황 위 그림과 같이 특정 도메인(test.com) 으로 요청이 오는 경우, 쿠버네티스 바깥의 외부 서비스(external-service.com) 로 포워딩하도록 istio를 구성한 상황에서 간헐적으로 503 에러가 발생한 것을 확인하였다. 따져보자면 약 0.05% 내외의 비율로 200과 503에러가 각각 발생하는데, 큰 비율은 아니지만 서비스 안정성에 대해 좋지 않은 현상이 지속적으로 발생하는 것이기 때문에 원인을 파악하고 빠르게 조치를 하는 것이 필요하다.초기 구성초기 구성은 다음과 같다.apiV.. 2025. 9. 8.
728x90