인프라 구조마저 코드로 조작하고 있는 현재, 가장 많이 쓰이는 도구는 테라폼과 앤서블이 있습니다. DevOps Loadmap에서도 두 가지 방법을 가장 권장하고 있네요! 그도 그럴 것이, 클라우드 인프라의 경우 GUI로 클릭하면서 조작하거나 혹은 각각이 제공하는 sdk를 사용해 인프라를 설정하지만, 이렇게 하면 서로 어떻게 인프라를 설정했는지 공유가 어렵고 숙련도에 따라 설정이 확연히 달라지는 경우가 종종 발생합니다. 이런 문제들을 해결하고자 HashiCorp에서 Terraform이라는 IaC 도구를 만들어 세상에 공개했습니다. Terraform과 성격이 비슷한 도구가 Ansible인데, Terraform과 Ansible의 차이는 간단하게 생각해서 아예 뜯어 고칠 것인지, 일부 수정할 것인지의 차이가 있..
DevOps
모니터링의 중요성을 체감해보지는 못했지만, 그 중요성만큼은 느껴집니다. 예를 들어서, 분산 애플리케이션을 배포하고 이를 오케스트레이션해야 할 때, 가용성을 높이기 위해 오토스케일링 기준을 정해야 합니다. CPU는 어느 정도로 요청하고 제한해야 할지, 그리고 특히 메모리는 CPU와 달리 비압축 리소스이기 때문에 요청과 한계를 설정하는 것이 매우 중요하게 되죠. 이런 간극을 확인하고 설정하기 위해서 모니터링 도구는 메트릭을 집계하고 계속해서 모니터링하여 확인할 수 있으므로 유용하게 사용할 수 있습니다. 비단 위와 같은 예시 뿐만 아니라, 어느 시각에 트래픽이 몰리는지 한 눈에 확인할 수 있고, 어느 호스트가 장애를 겪고 있는지도 모니터링을 통해 손쉽게 확인할 수 있습니다. 여기에 훅을 통해 ChatOps까지..
CI/CD를 사용할 때는 gitlab을 주로 사용한다고 합니다. GitHub와 달리 기본적으로 CI/CD에 집중한 원격 저장소라는 점이 특징이기 때문입니다. GitHub가 많은 사용자와 자유로운 기능이 장점이라면, GitLab은 통합적으로 서비스를 사용할 수 있다는 것이 장점이라 각각 고유의 메리트가 있습니다. GitLab 레포지터리에 들어가보면 바로 Set CI/CD 버튼이 보이네요. 이번에는 gitlab ci를 통해 웹서버를 레포지터리에 업로드하고, 원격으로 웹서버를 띄우는 간단한 실습을 진행해보겠습니다. CI 단계만 진행하므로 서버로의 배포는 수동으로 진행합니다. 준비물 간단한 테스트를 위한 서버 애플리케이션을 생성합니다. 기본적으로 헬스 체크 기능을 만들어 연결을 확인했습니다. 레지스트리는 ECR..
쿠버네티스는 API 서버를 사용하여 리소스들의 생성을 감독합니다. 실제로 API 서버를 사용하는 리소스들을 살펴보면 아래와 같습니다. etcd를 제외하고서 거의 대부분의 중요한 리소스들이 API 서버를 의존하고 있습니다. API 서버는 그 이름처럼 API를 받아서 이를 처리하는 리소스인데, 외부 클라리언트가 kubectl 등으로 요청을 전송하면, RESTful API로 변경하여 클러스터를 조작합니다. API 서버 내부에서는 그 요청을 보낸 주체가 누구인지 인증 플러그인을 거치고, 권한 승인 플러그인으로 리소스에 대해 요청을 수행할 수 있는지 결정한 다음, 승인 제어 플러그인을 통해 리소스를 수정/삭제 혹은 거절합니다. 최종적으로 리소스의 상태와 데이터 등을 etcd에 저장합니다. API 서버가 직접 리소..