Cloud19 [K8S] Threshold & Garbage Collect 서비스 운영 중 Node Disk 사용량이 과도하다는 알림을 받게 되었고, 모니터링 시스템을 통해 디스크 점유율 지표를 확인하였다. 디스크 사용량이 93% > 31% 로 떨어진 것을 확인하였고, 약 62G가 확보된 것을 확인하게 되었다. 과도한 디스크 정리가 발생하였다고 판단하였고, 궁금증을 해소하기 위해 노드에 접근하여 확인을 진행하였고,원인 분석을 통해 다음과 같은 예상을 할 수 있었다.큰 이미지 사이즈로 인해 디스크 사용량이 증가하고, 디스크 사용 임계를 넘어서면서 GC 동작으로 인해 디스크 정리가 이루어진 것이 아닐까?디스크 사용량이 증가한 원인으로 파악되는 이미지를 확인하였고, 무려 3.4기가의 이미지였다. jounalctl을 통해 system 서비스 로그를 확인하였고 다음과 같았다.journa.. 2025. 3. 9. 로그 모니터링 시스템 개발기 예외 및 오류에 대한 Error 레벨 로그를 stderr 와 stdout 으로 출력하면, Promtail이 이를 수집하여 Loki로 전달하고 로그를 관리합니다. 이후, 에러 로그 모니터링 기능을 통해 해당 에러를 관리하며, 알림을 발송하는 시스템이 구축하였습니다. 로그 구성이와 같은 프로세스를 수행하기 위해서는 일정한 포맷과 규칙에 맞춰 로그를 출력해야 합니다. 화면 구성을 위한 값에 해당하는 키는 아래와 같습니다. 포맷위 화면을 구성하기 위해 로그 출력 데이터 포맷은 다음 같습니다. (순서 무관)[apm_check_error]:%s;[apm_stack_trace]:%s;[apm_key]:%s;[apm_error_point]:%s;%s 는 원본 값에서 “\n” → “\t” , “\r” → ““ 으로 치.. 2025. 2. 13. [Locust] 대시보드 커스텀 (feat. websocket 부하테스트) AI 솔루션의 한 종류인 speech to text (stt) 의 경우 websocket을 통해 응답을 주고 받는 구조로 구성되어 있었다.대시보드가 구성되지 않는 현상이 발생하였고, 직접 구성하는 방법에 대해 공유해 보려한다. 문제 현상 • 파일 사이즈가 1mb이상 넘어가면 수신 측(stt) payload가 크다는 오류 발생 • chunk로 분류하면 utf-8 디코딩 불가하다는 오류 발생 • websocket 수신을 정의하지 않아 오류 발생 (영향은 없음) • 파일 자체를 보내 (file, stream, chunk 등) 이슈 발생 -> text로 decode하여 전송으로 해결• 오류는 잡았으나, dashboard가 나오지 않는 현상 발생 • event에 데이터를 직접 삽입하여 dashboard 구성 h.. 2025. 1. 31. [K8S] Pod Health Check (feat. 부하테스트) Readiness ProbeAPP 구동 순간에 트래픽 실패를 막기 위한 장치Sometimes, applications are temporarily unable to serve traffic. For example, an application might need to load large data or configuration files during startup, or depend on external services after startup (K8S Document)Container 는 Running 이지만 APP 이 Running 이 아닐 수도 있다 (Booting 같은 경우)Probe Fail 시 Service 의 Endpoint 에서 제거 (사용자가 해당 Pod로 연결 X) Liveness Prob.. 2025. 1. 31. [Rclone] 파일 동기화 시스템 구축 중앙 시스템의 데이터를 주변 시스템에서 가공하여 서비스하는 구조를 가지고 있었고, 이를 위해 파일 데이터에 대한 동기화가 필요하였다. 이를 처리하기 위해 AWS CLI 를 활용하였고, 처리 속도의 한계점을 발견하고 Rclone을 활용하여 구축했던 과정을 기술하였다. AWS-CLI CUSTOMIZATIONs3 = max_concurrent_requests = 100 max_queue_size = 10000 multipart_threshold = 64MB multipart_chunksize = 128MB 파일 사이즈는 작으나 파일 개수가 무수히 많고, Remote 와 Local 의 비교 시간이 오래 걸렸다.AWS-CLI CUSTOMIZATION 은 Upload, Download 의 속.. 2025. 1. 31. [Kafka] CDC 인프라 구축 (feat. ksql) kafka의 경우 cloud data streaming service를 이용하였다. Apache Kafka를 설치하고 설정하여 클러스터 형태로 제공해 주고, CMAK을 이용하여 클러스터 토픽 생성 및 변경 등 kafka 클러스터 관리 기능을 제공한다.가이드를 베이스로 커스텀하여 구성하였다.https://guide-gov.ncloud-docs.com/docs/ko/cdss-cdssoverview설정한 브로커 수량만큼 서버가 생기고 (기본 3개), 생성 된 서버는 Target Group에서 가시적으로 확인 할 수 있다. Broker ACG브로커에 접근이 가능하도록 다음과 같이 브로커 포트에 대해 ACG 허용해 주었다.아래는 적용한 ACG 목록이다.[ K8S node ] Source Connector (Deb.. 2025. 1. 18. [Kafka] CDC 초기화 Script 개발 환경에 붙어 여러 테스트를 진행하며, connector가 kafka의 connector의 설정 정보를 포함한 connect-* topic을 읽어 올 수 없어 이슈가 자주 발생하여 문의에 대한 대응이 어려웠고 자동 초기화 기능을 구성하여 제공하였다. reset.sh> 카프카 토픽, 컨슈머 제거 스크립트#!/bin/bash$HOME/mysql-connector/stg/bin/scale.sh 0set -eNAMESPACE="infra"LABEL="app=stg-mysql-source-connector"KAFKA_BROKERS="10.105.90.26:9092,10.105.90.27:9092,10.105.90.33:9092"DATE=$(date +'%Y-%m-%d')LOG_DIR="/var/lib/jenk.. 2025. 1. 18. [Kafka] Message size 제한 이슈 대응기 connector 요청에서 에러가 발생했습니다.{"name":"connector","connector":{"state":"RUNNING","worker_id":"ip:port"},"tasks":[{"id":0,"state":"FAILED","worker_id":"ip:port","trace":"org.apache.kafka.connect.errors.ConnectException: Unrecoverable exception from producer send callback\n\tat org.apache.kafka.connect.runtime.WorkerSourceTask.maybeThrowProducerSendException(WorkerSourceTask.java:290)\n\tat org.apache.. 2025. 1. 18. [Gitlab] Backup, Restore 이후 500 에러 트러블 슈팅 gitlab-rake gitlab:doctor:secrets VERBOSE=1을 명령어를 통하여, secret 이 현재 secret으로 decoding 할 수 있는지 확인하여, 문제가 있는 프로젝트의 runners_token, runners_token_encrypted 을 초기화하여 해결 하였다.https://docs.gitlab.com/ee/administration/raketasks/check.html gitlab:doctor:secrets데이터베이스에 있는 모든 암호화된 값에 대하여 현재 적용 되어 있는 비밀 key( gitlab-secrets.json)를 사용하여 해당 값을 해독할 수 있는지 확인합니다 VERBOSE Gitlab container 접근# gitlab이 설치 되어 있는 서버 접속do.. 2025. 1. 13. [CSAP] K8S Node Init Script K8S Node 들의 CSAP 인증 대응을 위한 Init Script 생성 & 관리Node 가 생성 될 때 Init Script 를 Node가 돌리는 구조가 아니라, DaemonSet 을 생성하면서 Script 가 도는 구조GPU Node 들의 경우 Tolerance 넣어줘야된다Docshttps://guide-gov.ncloud-docs.com/docs/k8s-k8suse-init-script InitScript 설정 guide-gov.ncloud-docs.com DaemonSet 설치# 수도권$ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-examples/main/exa.. 2024. 12. 27. [ArgoCD] 계정 생성 ArgoCd 신규 계정 생성ConfigMap: argocd-cm 수정junhee 계정을 신규로 생성한다면…apiVersion: v1kind: ConfigMapmetadata: name: argocd-cm namespace: argocd labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocddata: accounts.junhee: apiKey, login accounts.junhee.enabled: "true" 신규 계정 비밀번호 설정ArgoCd 파드에 접속 후 로그인, 비밀번호 변경까지$ kubectl exec -it argocd-server-xxxxxx-xxxxx /bin/bash -n argocdarg.. 2024. 12. 27. [ArgoCD] FE 배포 Helm 구성기 구성 및 동작 과정Helm 을 통해 Job을 생성한다.Job은 빌드 번호에 해당하는 디렉터리의 파일을 배포 폴더로 Sync 를 맞춰준다.Helm 구성Front 소스 배포용 Helm 차트 구조Helm 상세 내용job.yamlapiVersion: batch/v1kind: Jobmetadata: name: {{ .Release.Name }} namespace: {{ .Values.namespace }}spec: ttlSecondsAfterFinished: 0 // 1회성 실행을 위한 설정 template: spec: containers: - name: {{ .Release.Name }}-container image: {{ .Values.image }} c.. 2024. 12. 27. 이전 1 2 다음