전체 글 794

karpenter on-demand:spot 분배 설정때문에 발생한 장애

1. 들어가며EKS 노드 운영비용을 줄이기 위해, karpenter에 on-demand:spot 비율로 노드를 생성하게 설정했습니다. 하지만 약 2달간 잘 동작했던 karpenter에서 갑자기 배포가 안되는 장애가 발생했습니다.  이 글은 어떤 원인 때문에 karpenter 장애가 발생했는지 설명합니다. 이 글을 읽기 위해 karpenter on-demand:spot비율 설정을 알아야 합니다. 설정 방법은 저의 이전 글을 참고해주세요. 이 글에서 재현한 장애 예제는 저의 github에 공개되어 있습니다.gitbub 주소: https://github.com/choisungwook/karpenter/tree/main/karpenter_provisioner/example-17 2.장애 증상패치내역을 배포하기 ..

카테고리 없음 2024.06.22

karpenter on-demand:ratio 분배 설정

1. 들어가며EKS 노드 운영 비용을 줄이기 위해 on-demand인스턴스와 spot인스턴스를 분배합니다. karpenter 또한 새로 생성한 노드에 대해 on-demand, spot인스턴스 비율을 정할 수 있습니다. 2. 설정방법karpenter는 capacity-spread설정을 사용하여 on-demand, spot인스턴스를 분배합니다. 아래 예제는 on-demand:spot 비율을 1:2로 설정합니다. capacity-spread로 비율을 설정할 때 capacity-type을 설정해야 합니다.# on-demand 설정apiVersion: karpenter.sh/v1beta1kind: NodePoolmetadata: name: on-demandspec: template: spec: ..

kubernetes graceful shtudown이 중요한 이유

이 글은 pod의 우아한 종료(graceful shutdown)의 중요성을 설명합니다. 1. 우아한 종료(graceful shtudown)pod가 갑자기 종료되면 pod가 실행하고 있는 작업은 어떻게 될까요? pod가 없어졌으니 당연히 작업이 사라집니다. 따라서 작업은 실패합니다. pod가 종료되어서, pod가 실행중인 작업이 중지되어 작업이 실패하는 상황을 안전하지 않는 종료라고 합니다. 우아한 종료는 pod가 실행중인 작업을 안전하게 종료한 후, pod를 종료시키는 것을 의미합니다. 2. 우아하지 않는 종료 예우아하지 않는 종료 대표적인 예가 웹 애플리케이션 pod입니다. 웹 애플리케이션 pod가 종료되면 현재 연결되어 있는 세션이 끊겨, ingress 또는 (쿠버네티스)service는 연결이 끊깁..

curl 명령어 생성은 chatgpt 4.o로!

저는 http프로토콜을 테스트를 할 때, 터미널에서 curl 명령어를 많이 사용합니다. 매번 curl 명령어를 사용할 때 구글 검색을 통해 명령어를 조합했었는데, 시간이 조금 걸렸습니다.  이 사소한 시간을 이제 chatgpt 4.0로 단축시킬 수 있습니다. 아쉽지만 아직은 한글보다 영어 인식을 잘합니다.아래 예제는 curl 응답 중 http code를 필터링했습니다. 놀랍게도 부하를 막기 위해 반복문에 sleep도 추가해줬습니다.I want to curl command. target is https:/xxxxxxxxxxI execue the command while true, and get http code and print stdout http code.  명령어가 너무 길어 한줄로 줄여달라고 ch..

pycharm에서 Django 실행하는 방법

1.  선수지식django 프로젝트는 아래 명령어로 실행합니다.python manage.py runserver 2. pycharm에서 django 프로젝트 실행하는 방법실행 설정을 클릭합니다. 1️⃣ script유형을 선택하고 manage.py파일을 선택합니다.2️⃣ django 실행 파라미터인 runserver를 입력합니다.3️⃣ django 프로젝트 디렉터리 경로를 선택합니다. 우측 상단 실행버튼을 클릭합니다. 잘 설정되었다면 django가 실행됩니다.

맥OS 터미널에서 pycharm 명령어 실행 방법

맥OS터미널에서 pycharm 명령어 실행 방법터미널에서 pycharm을 실행하려면 alias설정이 필요합니다. 1. 쉘 설정파일(bashrc 또는 zshrc)에 pycharm alias설정을 합니다. open명령어는 맥OS에서 "/Applications"에 설치된 프로그램을 여는 명령어입니다. 맥 OS에 설치된 프로그램은 "/Applications"경로에 설치됩니다. pycharm community버전은 "/Applications/PyCharm CE.app"에 설치됩니다.alias pycharm="open -na PyCharm\ CE.app" 2. 변경된 쉘 설정파일을 적용합니다.source ~/.zshrc 3. 터미널에서 pycharm 명령어를 사용할 수 있는지 테스트합니다.pycharm {디렉터리 ..

파이썬 패키지 관리 도구 - poetry

1. poetry란?poetry는 파이썬 프로젝트 메타데이터 관리와 패키지 종속성을 관리합니다. poetry설정은 pyproject.toml파일로 관리합니다.$ cat pyproject.toml[tool.poetry]name = "test"version = "0.1.0"description = ""authors = ["choisungwook"]readme = "README.md"[tool.poetry.dependencies]python = "^3.12" 2. pip대신 사용했을 때 좋은 점poetry를 pip대신 파이썬 프로젝트를 관리할 때 좋은 점이 어떤게 있을까요? 2.1 프로젝트 이름과 버전관리 유용성poetry는 프로젝트 이름과 버전을 명시합니다. 프로젝트 버전은 제품을 관리하는데 있어서 매우 중..

git repo는 한개로 관리하는게 좋은 것 같다

데브옵스 4년차로 일하다보니, 1,2,3년차 때 생각한 것과 4년차때 생각이 많이 달라진 것이 있습니다. 그 중 한개가 git repo 관리방법입니다. 1~3년차 때까지는 프로젝트 별로 git repo를 따로따로 관리하는게 좋았다고 생각했습니다. 하지만 지금은 git repo는 한개 또는 소수로 관리하는게 좋다고 생각합니다. 즉, git repo는 모노레포 방식이 좋다고 생각합니다. 여러 가지 이유가 있지만 관리를 효율적으로 하기 위해서입니다. repo가 10개, 100개, 1000개 등으로 증가하면 git repo가 어떤 프로젝트로 사용하는지 알기가 어렵습니다. 그리고 관리도 매우 어렵죠. 제일 중요한 것은 담당자가 퇴사하고 직원이 세대교체되면 알지 못하는 git repo는 관리가 안됩니다. 제가 ..

회고모음 2024.06.07

쿠버네티스 임시 볼륨을 잘못 사용하면 장애 발생

이 글은 쿠버네티스 임시 볼륨(Ephemeral Volumes, 또는 임시 스토리지)을 잘못 사용했을 때 발생할 수 있는 서비스 장애 상황을 설명합니다. 이 글에서 다루는 예제는 github에 공개되어 있습니다.github 주소: https://github.com/choisungwook/k8s_ephemeral_storage 1. 시나리오이 시나리오는 임시 볼륨을 잘못 사용하는 Pod로 인해 동일한 노드에 있는 다른 Pod가 비정상 상태가 되는 상황을 재현합니다. 쿠버네티스는 EKS를 사용합니다. 서비스 pod는 nginx를 사용하고 외부에서 nginx pod를 접속할 수 있도록 ALB를 사용합니다. 장애가 발생하기 전에는 nginx pod는 아래 그림처럼 정상적으로 실행됩니다 하지만, 갑자기 임시 볼륨..