DevOps
레거시 교체! 달리는 기차의 바퀴를 갈아 끼우다
레거시 교체! 달리는 기차의 바퀴를 갈아 끼우다
2024.01.14나는 작년에 당근마켓 사내 개발자 플랫폼인 Kontrol의 배포 기능의 핵심 툴인 GoCD를 ArgoWorkflows라는 툴로 바꾸었다. 지난 2년을 회고하면서 가장 기억에 남았던 일이라 따로 글을 남겨본다. 사실 당근마켓 SRE밋업에서도 발표했던 사례이다. (원래 나도 발표 중 하나의 세션이 이 주제로 할 계획이었는데 개인사정으로 인해 당일 발표를 하지 못하게 되어서 같은 팀 동료인 알프레드가 대신 나의 주제를 함께 발표해주었다.) 원래 발표하려고 했던 발표자료 지난 포스팅에서 설득력을 갖추기 위해 노력한 이후로 팀에 영향력을 주게 된 기억에 남는 가장 대표적인 사례이기도 했다. 사실 Kontrol의 배포 백엔드가 GoCD였던 가장 큰 이유는 배포 시스템 개발을 처음 고민할 때 고민에 참여했던 엔지니..
Github Actions ARC
Github Actions ARC
2023.12.18GitHub Action이 Self-Hosted Runner의 새로운 공식 피쳐로 ARC라는 것을 제공하기 시작했다. ARC는 Action Runner Controller의 약자인데, 쿠버네티스에 설치되고 관리되며 Action Runner를 쿠버네티스 Pod로 실행할 수 있도록 기능을 제공한다. ARC는 원래 GitHub이 공식지원하지 않는 community 오픈소스로 관리되는 프로젝트였는데, 2022년 12월 12일 부터 GitHub이 인수해서 공식 관리하는 프로젝트로 승격되며 많은 기능들이 개선되었다. 공식 문서를 보며 동작을 이해하려고 했는데, 생소한 개념이 많아서 한번에 이해되지 않는 부분이 많았다. 그래서 직접 설치하고 코드를 분석하며 이해한 내용을 바탕으로, 컨트롤러의 동작을 좀더 쉽게 설명하..
컨테이너의 구조와 오픈소스의 생태계에 관한 리서치(feat. 도커는 적폐인가?)
컨테이너의 구조와 오픈소스의 생태계에 관한 리서치(feat. 도커는 적폐인가?)
2023.04.16컨테이너 이미지의 빌드 및 배포에 관한 성능을 개선하기 위해 리서치를 하다보니, 혼자 알기에 너무 재밌는 배경들이 많아서 정리해 보기로 했다. 오늘은 컨테이너와 이미지의 구조 및 원리(특히 파일 시스템과 관련한 부분), 관련 컴포넌트들을 딥다이브하여 파헤쳐 보고, 오픈소스 생태계에서 이들을 활용하기 위해 어떤 움직임들을 보였는지 살펴보는 시간을 가져볼까 한다. 컨테이너 컨테이너 이미지가 뭔지 알려면 먼저 컨테이너에 대해서 알아야 한다. 흔히 컨테이너를 이야기 하면 도커를 엮어서 생각하는데, 사실 도커는 단일 기술이 아니다. 컨테이너의 빌드, 실행, repo관리, 네트워크 관리 등등 컨테이너와 관련한 온갖 기술들을 다 때려다 박아서 docker라는 하나의 커멘드 라인만으로 사용자들이 컨테이너 세상에 쉽게 ..
Calico?Weave? CNI에 관하여
Calico?Weave? CNI에 관하여
2021.10.25Kubernetes를 설치하여 사용할때 항상 CNI를 설치해야 core-DNS서비스가 정상동작하고, 네트워크 폴리시 등의 보안 정책을 적용할 수 있었기에, 그냥 무의식적으로 설치하여 사용했었는데 막상 다시한번 내가 쿠버네티스를 제대로 이해하고 있는가? 를 되돌아보다 보니, 가장 중요하고 기본적인 지식인 네트워크 부분을 제대로 이해하지 않고 대충 넘어갔던것이 아닌가 하는 생각이 들었다. 다중노드 및 대규모 클러스터 환경에서 올바른 컨테이너로 트래픽을 전달하기 위해서 사용한다고만 개념적으로 이해하고 있었지, istio와 같은 서비스메시를 이해하기 시작하면서 명확한 그 개념에 대해서 혼돈이 오기 시작했다. 그래서 오늘은 가장 대표적으로 많이 사용되는 Calico CNI 플러그인을 분석해 보면서 다른 CNI들과..
[DC/OS 아키텍처에 관한 분석]MESOS와 MARATHON
[DC/OS 아키텍처에 관한 분석]MESOS와 MARATHON
2021.10.19DC/OS는 쿠버네티스와 같은 컨테이너 오케스트레이션 솔루션으로 알려져 있다. 실제로도 그렇게 많이 사용되고 있지만 DC/OS를 리셀링 하는 회사에서 엔지니어로 근무하며 많이 받았던 질문으로 “그래서 쿠버네티스와는 뭐가 다른데?” 라는 질문에 대해 장황하게 설명하게 되는 나 자신을 돌아보며, 먼저 DC/OS 라는 플랫폼에 대해서 다시 한번 간단하게 해부해 보고자 한다. MESOS 아키텍쳐DC/OS를 지칭할 때 종종 marathon + mesos 라는 수식어를 붙이곤 한다. 실제로 DC/OS는 Apache 재단에서 핫한 프로젝트 중 하나였던 Mesos 라는 프로젝트에 핵심 기능을 의존하여 개발된 서비스인데, mesos는 컨테이너 오케스트레이션이라는 컨셉에만 초점을 두고 탄생한 플랫폼이 아니다. Mesos는..
ElasticSearch Index LifeCycle to Template with Fluentbit
ElasticSearch Index LifeCycle to Template with Fluentbit
2021.03.29문제 DC/OS에서는 로그 모니터링을 위해 자체적으로 로그 수집 Agent로 FluentBit을 사용한다. 현재 사용하고 있는 시스템에서는 모니터링 시스템을 구축하기 위해서 FluentBit 을 활용하여 EFK를 구축하여 사용하고 있는데, 아래와 같은 설정을 통해 ElasticSearch에 적재되는 로그들이 매일 다른 Index명을 통해 저장되도록 설정되고 있었다. [OUTPUT] Name es Match * Host Port Logstash_Format True Logstash_Prefix fluent-bit 하지만 적재되고 있는 인덱스에 대해서 특별한 관리가 되지 않고 계속 로그가 쌓이기만 하고 있어서 서버에 과도한 용량이 점유되는 상황이 발생하여, ElasticSearch에서 자체적으로 제공하는 I..
gitlab 컨테이너 backup/restore(백업 및 복원)
gitlab 컨테이너 backup/restore(백업 및 복원)
2021.03.16본 문서는 DockerHub 이미지 gitlab/gitlab-ce:11.11.8-ce.0을 기준으로 작성되었으며 12.2 버전 이상이거나 컨테이너가 아닌 경우 공식 문서를 참고하는 것을 권장한다 gitlab에서 공식 제공하는 컨테이너를 사용하는 경우, gitlab 데이터를 백업 및 복원하는 과정에서 겪은 시행착오를 정리한다. 백업 복원 작업시 다음과 같은 내용들은 유의하는 것이 좋다. 백업 대상 서비스와 복원 대상 서비스의 gitlab 버전을 같은 버전으로 설정해 준다. 마운트를 완료한 상태에서, 순정상태의 gitlab을 한번 기동하여 동작을 확인한다. gitlab 쉘을 통해 복원 명령 수행시 확인 입력을 받는 경우(데이터 삭제시)가 있으므로 가급적으로 컨테이너에 직접 접근하여 명령을 수행한다. 공식 문..
kubernetes shared memory 사이즈 조정
kubernetes shared memory 사이즈 조정
2021.02.08리눅스 IPC는 System V와 POSIX 두가지 표준을 가지고 있는데, System V 모델을 따르는 Shared Memory는 IPC Namespace Isolatior가 제공하는 기능만으로 별도의 작업 없이 사용하는데 큰 문제가 없지만, POSIX 모델의 Shared Memory는 파일 기반으로 관리되는 구조이다. https://www.technovelty.org/linux/shared-memory-on-linux.html 문제는 쿠버네티스에서 POD가 생성되면 기본적으로 64MB사이즈의 shm 공유메모리 공간이 할당되는데, 이 공간만으로는 제약이 걸리는 상황이 많이 발생한다는 점이다. 이러한 현상과 관련하여 몇가지 상황을 이전에도 경험했었고, 본 글을 작성하는 시점에서는 컨테이너 내에서 tens..
CKA 공부 할때 끄적끄적
CKA 공부 할때 끄적끄적
2021.02.08아키텍쳐쿠버네티스 클러스터는 크게 Control Plane 컴포넌트와 Node 컴포넌트 그룹으로 구분지을 수 있습니다. Control Plane을 포함한 모든 클러스터의 구성 요소들은 컨테이너 기반으로 동작하도록 설치가 되고, 기본적으로 간단화하기 위해, 또 보안을 위해 Control Plane 컴포넌트들은 특정 노드에만 올라가고, 일반 사용자 그룹의 컨테이너는 배포가 되지 않도록 설정됩니다. 일반적인 쿠버네티스 클러스터의 아키텍쳐에서는 이렇게 Control Plane 컴포넌트로 구성된 Control Plane 노드와 사용자 컨테이너 배포를 위한 Worker 노드로 구분되어 구성됩니다. 설치 방법별 구성요소 관리 팁kubeadm 사용 배포시Control Plane 노드의 /etc/kubernetes/ma..
kubernetes etcd error message database space exceeded
kubernetes etcd error message database space exceeded
2020.08.23본 문서는 2020년 08월 21일, kubernetes 1.17.9버전, konvoy 1.5버전을 기준으로 작성되었습니다. 에러 발생 정상적으로 동작하던 쿠버네티스 클러스터가 갑자기 새로운 deploy를 생성하지도, 삭제하지도, 수정하지도 못하는 이상증세를 보였습니다. 그리고 다음과 같은 메시지를 띄웠습니다. etcdserver: mvcc: database space exceeded log messages messages로그 등에서도 해당 에러와 함께 이러한 비슷한 구문을 출력하고 많은 에러를 발생시키는 것을 볼 수 있습니다. applying raft message exceeded backend quota compact.go:124] etcd: endpoint ([https://172.16.4.141:..
POSTGRES could not remove file pg wal
POSTGRES could not remove file pg wal
2020.08.23replication 에러 상황에서 postgresql 컨테이너를 강제로 재기동 했더니 저런 로그가 뜨면서 DB접속이 안된다. 당연히 replication도 계속 에러상황이다. 2020-07-07 11:02:55.161 GMT [59] LOG: could not remove file "pg_wal/000000010000002A0000003A": Device or resource busy 2020-07-07 11:02:56.969 GMT [59] LOG: could not remove file "pg_wal/0000000100000004000000DF": Device or resource busy 2020-07-07 11:02:56.969 GMT [303434] ERROR: requested WAL seg..
DCOS cleanup unreachable tasks
DCOS cleanup unreachable tasks
2020.07.01서비스 운영중에 agent노드 한대가 갑자기 중단되는 상황이 발생했다. 노드 재시작 이후 서비스 원상 복구가 완료되었으나, 중단된 노드에서 동작하던 Task들이 DC/OS Dashboard에서 Unreachable로 표시되어 없어지지 않는 현상이 발생했다. 원인 bundle-2020-03-21-1584755074/128.11.1.69_agent/var/log/mesos/mesos-agent.log: I0320 22:49:04.198818 13317 gc.cpp:129] Unscheduling '/var/lib/mesos/slave/slaves/a3195c3b-8e69-4322-902b-13aa3f891e21-S1/frameworks/24879db0-e85c-486c-9dca-63d49354eac6-000..