쿠버네티스는 API 서버를 사용하여 리소스들의 생성을 감독합니다. 실제로 API 서버를 사용하는 리소스들을 살펴보면 아래와 같습니다. etcd를 제외하고서 거의 대부분의 중요한 리소스들이 API 서버를 의존하고 있습니다. API 서버는 그 이름처럼 API를 받아서 이를 처리하는 리소스인데, 외부 클라리언트가 kubectl 등으로 요청을 전송하면, RESTful API로 변경하여 클러스터를 조작합니다. API 서버 내부에서는 그 요청을 보낸 주체가 누구인지 인증 플러그인을 거치고, 권한 승인 플러그인으로 리소스에 대해 요청을 수행할 수 있는지 결정한 다음, 승인 제어 플러그인을 통해 리소스를 수정/삭제 혹은 거절합니다. 최종적으로 리소스의 상태와 데이터 등을 etcd에 저장합니다. API 서버가 직접 리소..
데브옵스 & 인프라/Kubernetes
오늘은 자동화의 꽃인 파이프라인을 구현해보도록 하겠습니다. 배포 자동화는 다양한 방법으로 구현할 수 있습니다. 예를 들어서, github actions로 beanstalk에 패키지를 전송하여 배포할 수도 있으며, code pipeline을 통해 빌드와 배포를 자동화할 수도 있고, github actions로 빌드한 파일을 code deploy에 전달하는 방법도 있습니다. 파이프라인을 추상적으로 보자면, 빌드 -> (테스트) -> 배포의 과정을 가지고 있습니다. 이번에는 kubernetes를 활용하는 환경에서 github action과 argocd를 활용해 빌드 및 배포를 자동화하는 방법을 구현합니다. 나름대로 구조를 구체화했을 때, 아래와 같은 형태를 따릅니다. 과정은 아래와 같습니다. 개발 내용 커밋/..
Helm은 쿠버네티스에서 원하는 리소스를 세트로 하여 한번에 패키지로 설치할 수 있게 도와주는 툴입니다. 그래서 상세 파일과는 또 다른 방법으로 한 개의 프로그램 패키지를 솝쉽게 설치할 수 있습니다. 헬름으로 직접 서버를 배포했을 때 느낀 점은, 애플리케이션의 의존성을 한 번에 같이 설치할 수 있다는 점이었습니다. 또한, git처럼 각 패키지를 버전으로 관리할 수 있기 때문에 각기 다른 상태로 사용할 수 있다는 것이 또다른 장점입니다. 그래서 이번에 Helm으로 서버 애플리케이션과 mysql을 함께 배포하고 이를 하나의 차트로 만들어서 사용하고자 합니다. 해당 예시에서 사용한 도구는 minikube(docker-driver), helm, node.js, mysql입니다. 차트 초기화 먼저 헬름은 차트라고..
현재 쿠버네티스 환경에 데이터베이스 패키지를 설치하였으며, 서버 애플리케이션의 띄웠습니다. 여기서 애플리케이션에서 데이터베이스 커넥션을 획득하기까지의 과정을 정리하고자 합니다. 환경변수의 설정부터 Secret 사용, 동적으로 데이터베이스 호스트 변수 설정, 데이터베이스 서비스 연결까지의 과정을 담았습니다. 매콤한 코멘트는 환영입니다. 👐 Helm으로 mysql 패키지 설치 Helm을 사용해서 빠르게 mysql 구동에 필요한 오브젝트를 한 번에 생성할 수 있습니다. 먼저 애플리케이션과 스토리지를 목적에 맞게 나누기 위해서 네임스페이스를 생성합니다. kubectl create namespace db # 혹은 kubectl create ns db 데이터베이스 관련된 패키지는 모두 db 네임스페이스에 설치할 예..