전체 글 794

ArgoCD 11편 - 클러스터 추가

개요 argo CD는 여러 클러스터를 대상으로 git의 리소스를 sync할 수 있습니다. default 클러스터는argocd가 설치된 클러스터입니다. 클러스터 추가 방법 2가지 방법(token, 인증서)으로 클러스터를 추가할 수 있습니다. Token 설정 apiVersion: v1 kind: Secret metadata: name: mycluster-secret namespace: argocd labels: argocd.argoproj.io/secret-type: cluster type: Opaque stringData: name: mycluster.com server: https://mycluster.com config: | { "bearerToken": "" } 인증서 설정 apiVersion: v1..

연재 시리즈 2023.01.24

2023 1.16 ~ 1.21 기억에 남는 자료 정리

1.16 ~ 1.21에 봤던 글, 영상 중에 기억에 나는 것을 정리했습니다. devops코드를 chatgpt로 작성하는 가이드 영상 3시 50분에 출근하는 사람들 Nosql DB가 빠른 이유 DB 원자성 devops코드를 chatgpt로 작성하는 가이드 영상 nana유투브 채널에 chatgpt로 devops코드를 작성하는 방법을 업로드했습니다. 처음 입문하시는 분에게 큰 도움이 되는 영상입니다. 요즘 업무에서도 chatgpt를 이용하여 쿠버네티스 manifest를 생성하고 CS지식을 공부할 때 많은 도움을 받고 있습니다. 유투브 링크: https://youtu.be/l-kE11fhfaQ 3시 50분에 출근하는 사람들 새벽에 일찍 출근하는 근로자를 위해 3시 50분 첫차가 생겼다는 뉴스입니다. 영상을 보면..

코드 줄 끝의 tab이 있어 장애발생

이번 주에 저의 실수로 특정 서비스 장애가 있었습니다. 마지막 배포를 하고 테스트를 했었던 걸로 기억하는데 테스트를 잘못한 것 같습니다. ㅜ.ㅜ 오류는 쉽게 발견하여 수정했지만 반성을 하게 된 계기가 되었습니다. 오류내용 오류는 코드 끝에 탭이 있어 발생했습니다. 토큰 끝에 탭이 있어 쿠버네티스 sdk실행 오류가 발생했습니다. 오류재현 오류를 재현하기 위해 serviceaccount와 kubeconfig설정이 필요합니다. name="developer" namespace=default token_name=$(kubectl -n $namespace get serviceaccount $name -o jsonpath='{.secrets[].name}') token=$(kubectl -n $namespace ge..

회고모음 2023.01.19

[helm advance] 앞 공백을 제거하는 하이픈

hypen의 용도 오픈소스들의 helm template을 보면, value값을 사용할 때 앞에 하이픈(-)을 사용하는 상황이 종종 있습니다. 아래 예제는 elasticsearch helm chart입니다. hypen의 정체는 앞의 공백을 제거합니다. 해당 내용은 go template문서에 설명되어 있습니다. 예제코드 git 링크: https://github.com/sungwook-practice/helm-advanced/tree/main/hypen 예제 코드는 values.yaml에 있는 message를 하이픈을 사용할 때와 안할때를 비교했습니다. message: " hello-world" 변수를 사용하는 곳은 conatiner env에 설정했습니다. apiVersion: apps/v1 kind: Dep..

iframe을 사용하는 서비스에 만난 x-frame-options deny오류

개요 사내에서 iframe을 사용한 서비스에서 만난 x-frame-options deny오류를 소개합니다. x-frame-options deny오류란 아래 화면은 오류내용을 재현한 것입니다. console.log에 보이는 것처럼 "X-frame-Options" dey오류가 발생하고 iframe렌더링이 실패합니다. mdn에서 문서를 자세히 확인해보니, X-frame-Options deny응답 헤더는 iframe과 같이 페이지를 렌더링하는 기능을 허용시키지 않는 다는 의미였습니다. 그 이유는 XSS공격 등을 보호하기 위해서입니다. 그래서, 오류가 난 응답헤더를 자세히 확인해보니 x-frme-options DENY가 있었습니다. 오류 재현 코드는 아래와 같습니다. 참고자료 mdn: https://develop..

회고모음 2023.01.17

python 자식 쓰레드에서 signal 처리 오류

개요 이 글은 운영 중 접한 ""오류를 어떻게 해결했는지 설명합니다. 영상은 아래 유투브에서 만나볼 수 있습니다. https://youtu.be/OirM_4ro76M 오류 발견 FastAPI로 만든 서비스에서 "signal only works in main thread" 오류가 발생했습니다. 처음 보는 오류여서 열심히 검색을 했습니다. 검색을 종합해보니 직접 예제를 만들어서 정확한 원인을 분석하는게 좋을 것 같았습니다 ChatGPT를 이용하여 예제 생성 어떻게 예제를 만들어볼까 고민하다가 chatgpt이 문득 떠올랐습니다. 긴가민가하는 마음으로 chatgpt에게 도움을 요청하니, 놀랍게도 예제코드를 만들어줬습니다. 예제 코드는 아래와 같습니다. import threading import signal im..

회고모음 2023.01.15

uuid를 잘못 설정하여 오류를 만나다.

상황 어떤 서비스에서 오류가 발생하여 코드를 살펴봤습니다. uuid를 이용한 로직이 있었는데 uuid 생성을 tiemstamp로 되어 있었습니다. 처음 봤을 떄는 timestamp이기 때문에 아무 문제가 없을 거라고 생각했습니다. 분석 시간을 갖고 생각을 해보니 uuid를 생성하는 시점이 사용자 요청이 올 때입니다. 사용자 요청은 api가 호출되었을 때를 의미합니다. 만약 여러 사용자가 동시에 요청하면, 시간이 같으니 timestamp가 중복되는 상황이 발생할 수 있을 것 같았습니다. 테스트 동시 요청을 테스트하기 위해 부하 테스트를 진행했습니다. 도구는 locust를 사용했습니다. 초당 10 user로 테스트해보니 곧바로 오류가 발생했습니다. 결국, uuid를 timestamp로 설정해서 같은 시각에 ..

회고모음 2023.01.09

올바르지 않은 비동기로직으로 쿠버네티스 probe실패

개요 쿠버네티스 백엔드 pod가 livenessprobe가 실패하여 pod재부팅이 된 상황을 직면했습니다. 자세히 살펴보니 비동기 로직이 올바르게 구현되어 있지 않아 probe가 실패했습니다. 이 글은 비동기 로직을 수정하기 위해 공부한 내용을 정리했습니다. 영상으로도 만나볼 수 있습니다. 영상: https://youtu.be/hS-6fJJpAgk fastapi 비동기 로직 먼저 fastapi가 어떻게 비동기를 처리하는지 살펴봤습니다. fastapi는 ASGI Framework로 구현된 웹 애플리케이션입니다. 그리고 fastapi를 실행하는 uvicorn은 ASGI Framework를 실행하는 ASGI Server역할을 수행합니다. 이 구조는 WASspring boot와 거의 비슷하다고 느꼈습니다. 구조..

회고모음 2023.01.09