1. 개요 부끄럽지만, innoDB 클러스터라는 이름을 처음 들었을 때, 되게 낯설었고, 다른 DBMS 종류의 클러스터인 줄 알았는데, MySQL에서 고가용성을 위해 만든 서비스라고 한다. 왠지 반가웠다. MySQL에서 기본적으로 사용하는 innoDB 스토리지 엔진을 기반으로 동작한다고 해서 innoDB Cluster라는 이름이 붙여졌다고 한다. 사내의 개발환경에서는 데이터베이스를 컨테이너로 사용하고 있지만, 운영환경만큼은 아니었다. 개발 환경내에서 데이터베이스를 컨테이너로 사용해 보면서, 가용성 측면이나 자동화 등 좋은 부분들이 정말 많았지만 가장 중요한 데이터 안정성 등을 보장하기가 어려웠고 불안했다. 하지만 이번 innoDB Cluster를 공부해보면서 어쩌면 DB를 컨테이너로 도입에 하는데 한 걸..
분류 전체보기
쿠버네티스 오퍼레이터란? ( Kubernetes Operator ) 먼저 오퍼레이터를 이해하기 위해서는 쿠버네티스의 동작흐름과 몇 가지 개념을 알 필요가 있다. 왜냐하면 오퍼레이터는 쿠버네티스가 동작 흐름을 기반으로 동작하기 때문이다. 쿠버네티스는 다음과 같은 두 가지 접근법이 존재한다. 명령형(Imperative) - shell을 통해 kubectl과 같은 커맨드라인으로 오브젝트를 핸들링하는 방식이다. 선언형(Declarative) - yaml과 같은 파일에 오브젝트를 정의하고 apply로 생성하는 방식이다. 사용자는 두 접근방식으로 명시적인 애플리케이션 상태를 설정하면 쿠버네티스의 컨트롤러들은 지속적으로(컨트롤 루프) 리소스들을 감시하고 current state(현재 상태) -> desired sta..
쿠버네티스 운영중 빈번하게 클러스터 내부 파드간의 통신이 되지 않아 장애가 나는 경우가 많았는데, 그 중에서, 호스트를 찾지 못하는 문제가 많았다.(UnknownHostException) 그래서 보통 netshoot파드를 이용하여 간단하게 ping이나 curl 명령어로 통신을 테스트하곤 했었는데 이번 포스팅에서는 dig라는 dns 유틸리티를 활용해 테스트해보며 아주 아주 조금 더 평소에 잘 모르고 넘겼던 dns관련 개념들까지 간단히 알아보자. Prerequisites더보기1. 먼저 파드 간 통신을 디버깅한다는 전제로 nicolaka/netshoot 이미지 파드 안에서 진행2. 도메인은 coredns의 서비스 디스커버리로 예시(사전지식 필요)digdig는 DNS(Domain Name System) 조회를 ..
개요 보안 상의 이유로 IP의 Class A, Class B를 가리고, 등록할 엔드포인트 IP는 10.10.10.1 이라고 가정하겠다. 관리하는 쿠버네티스의 클러스터가 많아질 수록, kubeconfig 파일에 여러 개의 클러스터를 등록해서 사용하게 될 것이다. 그러던 중, 폐쇄망 환경의 클러스터를 연결한 외부망 프록시 IP를 클러스터의 엔드포인트로 설정하였는데, 아래와 같은 에러 문제가 발생하였다. kubectl get node Unable to connect to the server: x509: certificate is valid for x.x.0.1, x.x.50.24, x.x.10.176, not 10.10.10.1 클러스터에 등록하려는 엔드포인트 IP가 10,10.10.1이라고 가정하였을때 해당..
평소에 말로만 듣던 가시다님의 쿠버네티스 스터디를 운 좋게 참여하게 되었다. 마침 사내에서 DB를 컨테이너화를 고려하기도 했었고, 평소 오퍼레이터에 관심을 가지어 더욱 더 기대가 되었다. 이번 포스팅에는 1주차 스터디를 진행하면서 평소에 애매하게 알고만 있었던 스테이트풀셋을 정리해본다. Stateful vs Stateless 위 사진은 Stateful과 Stateless한 파드를 표현한 너무나도 유명한 그림이다. 우리가 애완동물에 기르면서 이름(고유한 식별자)를 붙이고, 가축과 같은 경우에는 굳이 이름을 붙이지 않는다. 즉, State의 유뮤는 사용하는 목적에 맞게 고유한 식별자를 부여하여 상태를 유지하거나, 또는 상태를 저장하지 않는 것이다. ( 일반적으로 웹서버와 같은 경우 stateless, 데이터..
노트(Eiditor) 사용하는 노트앱이 많아 각 노트의 장점을 살려 용도별로 사용하고 있다. 임시노트: 자유롭고 임시적인 기록 공간(Inbox) SublimeText VisualStudioCode 영구노트: 임시노트에 적어놓았던 내용이나 , 학습을 통해 얻은 지식들을 정리해놓은 노트 Obsidian(개인용), Notioin(공유용) 비밀노트: 나의 개인적인 감정이나,일기,영감등을 기록하는 노트 AppleMemo 카카오톡 나와의 채팅 할 일 관리 TodoList 요즘 내가 가장 자주 사용하는 앱으로 다양한 앱들(구글캘린더)과 연동이되고 UX가 엄청 직관적이기 때문에 사용하기 쉽고 편하다 복잡함이 싫다면 TodoList 하나로도 충분히 일정관리를 하는데 있어서 무리가 없다고 본다. 캘린더 구글 캘린더 Mac..
개요 Harbor와 같은 사설 이미지 저장소에 컨테이너 이미지를 푸시하는 방법을 간단하게 소개하겠다. Harbor가 설치되었다는 가정이며, 다른 이미지 저장소를 사용하여도 된다. ( 추 후에 설치방법도 다루겠다. ) 이미지 빌드도구는 가장 많이 사용하는 도커로 예시를 작성할 것이다. 다른 이미지 도구들(containerd,nerdctl, podman 등)도 방법은 비슷하기 하다. 이미지 다운로드 먼저 푸시할 예시 이미지를 도커 허브에서 pull 한다. ( 준비한 이미지를 사용해도 무방하다 ) docker pull ${이미지명} 이미지 확인 dokcer images 이미지명 변경 컨테이너 이미지명을 통해 레지스트리로 푸시되기 때문에 Harbor의 엔드포인트가 추가된 정보로 이미지명을 변경한다. docker..
개요 평소 리눅스 서버에서 인프라 작업을 하거나 옵시디언 노트에서 vim 키바인딩, vsCode에서도 vim 플러그인 정도를 사용하고 있어 vim에 어느 정도 익숙해져 있었다. 하지만, 스프링 자바 개발만큼은 인텔리제이가 충분히 훌룡하다고 생각이 들어서 개발에까지는 사용하고 있지 않았다. Emacs 같은 좋은 툴을 이용해서 vim으로 모든 화면을 제어하면서 사용한다면 작업 간의 스위칭이 줄어들어 엄청난 효율이 있다고 하는데, 솔직히 나는 그냥 멋있어서 사용하기 때문에 vim 설정에 그렇게 시간을 쏟아붓기는 싫다. 그냥 좋은 에디터에서 vi 플러그인등을 이용하여 사용하는 것이 정신건강에도 좋고 효율적이라는 생각이다. 그러다가 intelliJ에서 ideavim에서 평소 인텔리제이 IDE에서 많이 사용하는 액..