인프라 스터디(2)

장준영·2024년 7월 20일

개요

이번에는 미들웨어 상에서 어떠한 툴들을 사용하고 또한 어떠한 스택들을 도입을 할수 있을지에 대해서 생각을 해보기 위해 공부를 한번 해보게 되었다.

기술 스택

Jenkins

젠킨스는 보통 파이프라이닝 ci/cd툴로 많이 쓰인다.

먼저 ci/cd란 지속적인 통합(Continuous Integration), 지속적인 배포(Continuouns Deployment)의 약어로 개발자들이 동시에 작업한 코드 변경사항을 통합하고, 이를 실제 환경에 지속적으로 배포하는 프로세스를 의마한다.

jenkins를 사용하면 코드변경사항이 발생할때마다 자동으로 빌드, 테스트, 배포 과정을 수해할 수 있기 때문에 개발자는 코드 변경에 따른 빌드 및 테스트 과정을 수동으로 수해할 필요가 없어지며, 신속하게 개발에 대한 코드 검증 및 배포할 수 있고, 이 과정에서 휴먼 에러를 방지할 수 있다.

사실 코인에서 배포를 주로하는 자바스프링의 경우 JAR파일을 nohup이나 screenX로 일일히 올리는 것도 가능은 하겠지만 개인 프로젝트를 할때 변경사항 수정시 정말 불편하다는것을 느낄것이다. 그리하여 jenkins와 같은 ci/cd는 꼭 필요하다고 할 수 있다.

Ansible

jenkins같은 경우 주로 ci/cd를 파이프라이닝 이외에도 iac(infrastructure as code)로 일괄적으로 배포를 할 수도 있다. 이렇게 하면 인프라를 문서화를 통해 나타낼수 있기에 장점이 있다. 현재 bcsd는 5대의 서버를 운용하고 있다. 그런데 만약 서비스가 커지게 되어 서버가 의 숫자를 계속 늘리게 된가면?? 일일히 하나씩 서버에 접속하여 관리를 할 수 없을 것이다. 그래서 이럴 경우를 대비해서 젠킨스로 빌드를 하고 앤서블을 통해 배포하는 방식으로 가는게 현실적이다. 현재는 SSH방식으로 배포를 하는것이 가능한게 쉘스크립트로도 충분히 운용이 가능하기 때문이다.

Asnible은 서버의 설정과 인프라 프로비저닝 등을 자동화 할 수 있는 오픈소스 도구이다. Ansible은 별도의 Agent설치 없이 SSH를 통한 스크립트 실행을 지원한다. 또한 Ansible은 선언적으로 서버 설정을 정의 할 수 있다. 단계별로 작업을 구분할 수 있고, 서비스 및 환경에 따라 변수를 동적으로 적용할 수 있다.

Anisble의 특징으로 Agent-less, State machine, 멱등성 을 지원한다.

  • Agent-less
    puppet이나 chef같은 도구들은 관리 대상 서버에 별도의 프로그램을 설치하고 이를 통해서 관리 업무를 수행한다. 이런 프로그램들은 보통 daemon방식의 agent로 동작하며 이런 별도의 프로그램들을 통해 강력한 기능을 제공하지만 반대로 agent설치 및 관리라는 별도의 복잡한 추가작업이 발생한다.

특히 이런 프로그램들은 별도의 DSL(Domain Spesific Language)를 갖고 있으며 DSL이 ruby로 되어 있으므로 ruby설치 및 모듈 관리같은 작업이 필요하다.

Ansible은 이런 복잡함을 제거하기 위해 agent가 없으므로 관리 대상인 노드에 별도의 프로그램 설치가 필요없이 기존 it인프라를 활용해서 자동화를 구성할 수 있다.

  • State machine
    ansible은 복잡하지 않고 사용하기가 쉽고 자동화의 절차 및 과정을 이해하기 쉽다. 또 다종화 단계를 yaml문법을 사용해서 작성하므로 에디터만 있으며 쉽게 읽을 수 있다.
  • 멱등성
    멱등성이란 연산을 여러번 적용해도 동일한 결과가 나오는 것을 의미한다. Ansible은 한번 실행하나, 여러번 실행하거나 동일한 결과를 보장한다. 만약 중간에 network문제로 설치에 실패하더라도, 다시 실행하면 동일하게 설정할 수 있다. 서버를 재시작해도 Ansible 스트립트가 잘 실행되었다면 서버가 정상적으로 설정되었음을 보장할 수 있다.

Ansible에서는 Playbook과 role, inventory를 알아야 한다.

  1. Playbook

Ansible은 기본적으로 playbook.yml파일을 통해 작업을 정의한다. playbook.yml파일은 실제 실행할 작업을 담고 있다.

  • hosts: webserver는 webserver그룹에 속한 원격 서버에서 작업을 수행한다는 의미이다.
  • become: true는 관리자 권한으로 실행되도록 설정한다.
  • tasks: 섹션에서 apt모듈을 사용하여 nginx를 설치한다.
  • template 모듈을 사용하여 nginx.conf.j2템플릿 파일을 /etc/nginx/nginx.conf경로에 복사한다.
  • notify를 통해 Restart Nginx 핸들러를 호출하여 nginx서비스를 재시작한다.
  • handlers섹션에서 service모듈을 사용하여 nginx서비스를 재시작한다.
  1. Inventory

인벤토리는 ansible로 관리할 host의 묶음으로 호스트는 그룹에 포함시켜서 관리할 수 있다. 그룹은 하위 그룹을 포함할 수 있으며 한 호스트는 여러 그룹에 포함 될 수 있다. 인벤토리는 windows의 INI형식으로 관리할 수 있으며 web-server라는 그룹과 db-server라는 호스트 그룹을 만들고 다시 이 두그룹을 포함하는 mybiz-server라는 그룹을 생성한다.

[web-servers]
web1.example.com
web2.example.com

[db-servers]
db1.example.com
db2.example.com

[mybiz-servers:children]
web-servers
db-servers

추가로 Invetory를 동적으로도 지정할 수 있다. -i 명령어로 inventory지정이 가능하다.

  1. Role

Ansible에서 role이란 하나의 역할을 가진 작업을 모아놓은 패키지 이다. 프로그램 설치와 같은 작업을 패키지 형태로 관리하는 것이다. A서비스의 playbook에는 Nginx,Redis/ B서비스의 playbook에는 Mysql,Redis가 필요하다고 했을때 각각 다른 Role이 필요하게 된다.

Ansible에서 role을 잘 활용하면 레고블록을 조합해서 모형을 만드는 것처럼 role을 조합해서 서비스를 구현이 가능하다.

DataDog

Datadog는 saas바탕의 모니터링 툴이다. 학생계정은 pro버전으로 무료로 사용할 수 있다는 장점이 있어 사용하게 되었는데, 메트릭/로그/APM등 다양한 모니터링 지표를 활용하여 개발에 필요한 다양한 정보를 제공 및 알림을 주고 있다. 현재는 데이터독에서 다양한 정보를 바탕으로 서버 모니터링을 강화하고 있다.

출처:
https://brunch.co.kr/@growthminder/66
https://blog.naver.com/alice_k106/221333208746
https://www.lesstif.com/ansible/ansible-22052877.html

1개의 댓글

comment-user-thumbnail
2024년 12월 1일

Ansible 써보질못해서 뭔가 감이 안잡힌다

답글 달기