devlos
Devlos Archive
devlos
전체 방문자
오늘
어제
12-11 07:32

최근 글

  • 분류 전체보기 (107)
    • 프로젝트 (1)
    • MSA 설계 & 도메인주도 설계 (9)
    • 클라우드 컴퓨팅 & NoSQL (87)
      • [Cilium Study] 실리움 스터디 (8)
      • [KANS] 쿠버네티스 네트워크 심화 스터디 (12)
      • [T101] 테라폼 4기 스터디 (8)
      • [CICD] CICD 맛보기 스터디 (3)
      • [T101] 테라폼 기초 입문 스터디 (6)
      • [AEWS] Amazon EKS 워크숍 스터디 (7)
      • [PKOS] 쿠버네티스 실무 실습 스터디 (7)
      • Kubernetes (13)
      • Docker (7)
      • Redis (1)
      • Jenkins (3)
      • Terraform (1)
      • Ansible (4)
      • Kafka (1)
    • 프로그래밍 (7)
      • Spring Boot (5)
      • Broker (1)
    • 성능과 튜닝 (1)
    • ALM (0)
    • 기타 (2)

인기 글

태그

  • DevOps
  • docker
  • 데브옵스
  • MSA
  • PKOS
  • 쿠버네티스
  • kOps
  • cilium
  • t101 4기
  • 테라폼
  • 도커
  • CloudNet@
  • terraform
  • Kubernetes
  • 쿠버네티스 스터디

티스토리

최근 댓글

hELLO · Designed By 정상우.
devlos

Devlos Archive

[앤서블(Ansible)] Serverspec 사용법
클라우드 컴퓨팅 & NoSQL/Ansible

[앤서블(Ansible)] Serverspec 사용법

2021. 4. 15. 23:49
반응형

이번 포스팅에서는 Serverspec이라는 도구를 앤서블에 적용하는 방법에 대해서 알아보도록 한다.

 

Serverspec은 인프라(서버) 테스트 수행을 간단하고 쉽게 하기 위한 도구이다.

 

Serverspec - Home

About V2 Serverspec/Specinfra v2 has been just released. See the document about v2. About With Serverspec, you can write RSpec tests for checking your servers are configured correctly. Serverspec tests your servers’ actual state by executing command loca

serverspec.org

Serverspec은 로컬, SSH, WinRM, Docker API 등을 통해 명령을 실행하여 서버의 실제 상태를 테스트한다.


1. Serverspec을 사용하는 이유

일반적인 소프트웨어 테스트는 절차서 및 파라미터 시트를 기반으로 별도의 테스트 케이스와 테스트 절차서를 마련해야하고, 이에 기반하여 하나하나 테스트를 하고 있는 경우가 대부분이었다. 이러한 테스트 절차에 대한 작업도 코드화를 할 수 있다.

코드화를 하게되면 다음과 같은 장점이 있다.

  • 테스트 코드가 그대로 테스트 케이스가 됨
  • 테스트 코드를 반복적으로 활용 가능함
  • 코드를 통하여 리뷰(Review) 할 수 있음

특히 인프라 테스트의 경우 더욱 진행하기 힘들다. 디렉터리 퍼미션(Directory Permission)이나 모든 설치 대상 패키지 조사 및 서비스 구동 상태 등을 하나하나 점검해야 하기 때문에 방대한 절차와 시간이 소요된다.

 

Serverspec은 위의 테스트 절차를 코드화 했을 경우 얻을 수 있는 장점 외에도 다음과 같은 특징이 있다.

  • 테스트 항목에 대한 목록을 정해진 포맷으르 기반으로 작성 가능함
  • 테스트 결과를 리포트 형식으로 출력할 수 있음

2. Serverspec 사용법 기초

2.1. Playbook 파일에서 -serverspec의 주석을 제거

앤서블을 이용하여 Serverspec을 셋업한다.

$ vi /home/vagrant/ansible-playbook-sample/site.yml

---
- hosts: webservers
  become: yes
  connection: local
  roles:
    - common
    - nginx
    - serverspec
#    - serverspec_sample
#    - jenkins

2.2. ansible-playbook 실행

$ ansible-playbook -i development site.yml

 

ansible-playbook을 이용하면 다음과 같은 에러가 발생한다.

 

ansible-playbook 실행결과

"ERROR:  Error installing rake:\n\trake requires Ruby version >= 2.2."

 

이는 ansible-playbook을 이용하여 설치한 ruby의 버전 문제 때문에 발생하는 문제이다.

(에러에 대한 트러블 슈팅 시간이 많이 걸렸는데,  결과적으로 2.3단계의 해결책을 이용하여 해결하였다.)

이를 해결하기 위해서 ruby 2.7 버전을 설치한다.


2.3. Ruby 2.7 버전 설치

Ruby 2.7 버전 설치 후 ansible-playbook 명령어를 재실행한다.

# GPG 설치
$ command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -
$ command curl -sSL https://rvm.io/pkuczynski.asc | sudo gpg2 --import -

# RVM 설치
$ curl -L get.rvm.io | sudo bash -s stable
$ sudo usermod -aG rvm $USER
$ id $USER
$ source /etc/profile.d/rvm.sh
$ rvm reload
$ sudo su
$ rvm requirements run

# Ruby 설치
$ rvm install 2.7
$ rvm use 2.7 --default
$ sudo mv /bin/ruby /bin/ruby_2.0.0
$ sudo ln -s /usr/local/rvm/rubies/ruby-2.7.0/bin/ruby /bin/ruby

2.4. ansible-playbook 재실행

$ ansible-playbook -i development site.yml

 

ansible-playbook 재실행 결과


2.5. serverspec 설정

serverspec-init 명령어를 이용하여 serverspce 설정을 진행한다.

먼저 셋업용 디렉터리를 생성한다.

 

$ mkdir ~/serverspec && cd ~/serverspec

 

다음으로 serverspec-init 명령어를 실행한 후 1, 2 옵션을 차례로 선택한다.

 

$ serverspec-init

 

serverspec-init 실행

 

실행하고 나면 실행파일이 자동으로 생성된다. 


2.6. 생성된 샘플 파일 확인

spec/localhost/sample_spec.rb에 생성된 생성된 샘플 파일을 열어보면 다음과 같다.

 

sample_spec.rb 파일

테스트 코드를 살펴보면 아래의 순서대로 서버의 환경을 체크한다.

  1.  httpd의 설치 여부 확인
  2. httpd 서비스의 활성화 상태인지 확인
  3. httpd 서비스가 실행 중인지 확인
  4. 80 포트가 listening상태인지 확인

테스트 코드가 이해하기 쉽게 직관적으로 되어있다.


2.7. Serverspec을 통한 테스트 실행

이제 spec 폴더가 존재하는 디렉터리로 돌아와서 rake 명령어를 이용하여 테스트 코드를 실행한다.

 

# spec 디렉토리로 이동
$ cd /home/vagrant/serverspec/spec
# rake 실행
$ rake spec

 

rake spec 실행결과

실행결과를 보면 2.6에서 언급한 테스트들 중 1가지만 통과한 것을 확인할 수 있다.

  1.  httpd의 설치 여부 확인 (실패)
  2. httpd 서비스의 활성화 상태인지 확인 (실패)
  3. httpd 서비스가 실행 중인지 확인 (실패)
  4. 80 포트가 listening상태인지 확인 (성공)

참고자료

[1] IT 운용 체제 변화를 위한 데브옵스 | 2019 | 키와무라 세이고 ... | 링크

 

 

반응형

'클라우드 컴퓨팅 & NoSQL > Ansible' 카테고리의 다른 글

[앤서블(Ansible)] ansible-playbook dry-run 모드  (0) 2021.04.15
[앤서블(Ansible)] ansible-playbook 사용법  (0) 2021.04.13
[앤서블(Ansible)] Ansible의 기본적인 사용법 (nginx)  (0) 2021.04.13
    devlos
    devlos
    안녕하세요, Devlos 입니다. 새로 공부 중인 지식들을 공유하고, 명확히 이해하고자 블로그를 개설했습니다 :) 여러 DEVELOPER 분들과 자유롭게 지식을 공유하고 싶어요! 방문해 주셔서 감사합니다 😀 - DEVLOS -

    티스토리툴바