Ansible 설정에서 프로비저닝 및 구성을 테스트하는 방법은 무엇입니까?


33

프로비저닝 및 구성을 처리하는 Ansible 설정에 복원성을 구축하려고합니다.

구성 측면에서 테스트하는 몇 가지 방법을 이해하지만 프로비저닝 측면에서 테스트를 구현하는 가장 좋은 방법과 이러한 유형의 구현에 도움이되는 도구가 있는지 궁금합니다.

현재 우리의 많은 테스트는 플레이 북에서 연속적으로 수행되는데, "서비스가 제공되고 VIP가 가능합니까? 애플리케이션 및 프로비저닝 계층 모두에서 구성 (예 : VM 구성) Ansible이 구성 드리프트 작업에 가장 적합한 도구는 아니지만 자신의 의견이 궁금합니다.

프로세스를 완전히 자동화 할 무언가가 있다면 더욱 좋습니다. (매우 느슨하게 다시보고하는 몇 가지 추악한 스크립트가 있습니다).

참고 : 현재 재 프로비저닝이 발생할 수있는 몇 가지 조건 (예 : 백업에서 재 구축, 중요한 시스템 문제)이 있지만 일반적으로 일부 구성 가능한 작업을 반복하고 더 이상 생각하지 않습니다.



프로비저닝시 Ansible이 한 번만 실행됩니까? 그렇지 않은 경우 어떤 빈도로 실행되고 있습니까? 솔루션을 제공하기 전에 문제를 이해하려고합니다.
Woodland Hunter

안녕 @ Naphta 귀하의 질문에 대한 답변이 확인 표시를 클릭하여 수락을 고려 하십시오. 이것은 당신이 해결책을 찾았 음을 더 넓은 공동체에 알리고 응답자와 자신에게 명성을줍니다. 이를 수행 할 의무가 없습니다.
Richard Slater

I'm aware Ansible isn't the best tool for working with configuration drift 설명 해주십시오.
030

답변:


19

몇 가지 옵션이 있습니다.

테스트 도구 : github stars로 정렬

  • Serverspec- 루비의 rspec을 기반으로하는 가장 인기있는 도구 인 Ruby
  • Goss -YAML, 단순, <10MB의 자체 포함 바이너리, 매우 빠름, 시스템 상태에서 테스트 생성 가능
  • Inspec -Ruby, 이것은 요리사가 만든 거의 동일한 구문 인 개선 된 serverspec으로 생각하십시오. serverspec보다 쉽게 ​​확장 할 수 있도록 구축
  • Testinfra -Python, Ansible의 인벤토리 / 바를 사용할 수있는 멋진 기능이 있습니다

그들 사이의 주요 차이점 :

궁극적으로, 나는 그들 스스로를 결정하기 전에 그들에 대한 느낌을 얻기 위해 그들 모두와 실험을하는 것이 좋습니다.

  • Goss를 제외하고 모든 프레임 워크는 원격 시스템 (예 : ssh 이상)에 대해 실행될 수 있습니다. Goss는 로컬 또는 dgoss가있는 docker에서만 실행됩니다.
  • 모든 프레임 워크는 서버에서 로컬로 실행할 수 있지만 Python 또는 Ruby를 설치하거나 내장해야합니다. Inspec은 내장 버전의 루비가 포함 된 독립형 <150MB 번들을 제공합니다. Goss는 외부 의존성이없는 단일 <10MB 바이너리입니다.
  • Goss는 nagios / sensu 출력을 기본적으로 지원하므로 모니터링 도구와 쉽게 통합 할 수 있습니다.
  • Goss 테스트는 YAML을 기반으로하기 때문에 더 단순하지만 유연성이 떨어집니다. 다른 프레임 워크를 사용하면 기본 언어 인 Python / Ruby의 모든 기능을 활용하여 테스트를 작성하거나 도구 기능을 확장 할 수 있습니다. (단순성과 유연성)
  • Goss를 사용하면 현재 시스템 상태에서 테스트를 생성 할 수 있습니다
  • 내 지식에 대한 Testinfra는 유일한 재고 및 변수를 기본적으로 지원합니다.
  • Inspec은 Chef의 지원을받습니다.

연속 / 분산 테스트 :

  • Chef Compliance -inspec과 협력하여 서버, 유료 제품을 지속적으로 테스트
  • Goss -Nagios 또는 Sensu에 쉽게 연결할 수 있습니다. 또한 서버 테스트를 http 엔드 포인트로 노출하는 것을 지원합니다.

개발을위한 테스트 장치 :

  • kitchen- 테스트 도구 도구, 인스턴스 시작, 구성 관리 코드 실행, 테스트 스위트 실행 요리사들에 의해 만들어진
  • 분자 -테스트 키친과 유사하지만 특별히 사용하기 위해 작성되었습니다.

전체 공개 : 나는 goss의 저자입니다

업데이트 : InSpec 4.x 이상은 혼합 상용 / 오픈 소스 라이센스를 사용합니다 (주석 참조).


4
약간 편견이 있지만, inspec은 정기적으로 실행하기 위해 규정 준수가 필요하지 않습니다. 또한 관리해야 할 종속성이 없으며, 필요한 모든 libs 및 framework (ruby)가 패키지에 번들되어 패키지에 번들되어 있으며 ssh / winrm을 통해 실행될 때 각 노드에 로컬로 설치할 수 있습니다. 사실이 아닌 외부 명령에 대해서만 지적하면 내부 루비 코드로 많은 테스트를 수행합니다. (나는 주목할 가치가 있다고 생각한다)
Tensibai

inspec에 대한 외부 명령과 번들 루비를 수정하기 위해 답변을 업데이트했습니다. 드리프트를 탐지 /보고하기 위해 inspec을 어떻게 사용할 수 있는지 설명하는 링크를 명확히하거나 보내 주시겠습니까?
Ahmed Elsabbahy

글쎄,보고 부분은 당신의 손에 달려 있으며, 실제로 표현하는 것은 준수 목표입니다. 그러나 crontab에서 inspec을 실행할 수 있으며 테스트에 실패한 경우 (예를 들어) crontab 메일에만 의존 할 수 있습니다.
Tensibai

대체로 편집 할 준비가되었으므로 도구와 다른 사람에 대한 공정한 설명이 들립니다. 나는 이것이 빨리 구식이 될지도 모른다는 것을 두려워하지만 어쨌든 목록과 포인터는 +1입니다.
Tensibai

아, 그래요. 모든 도구를 그런 식으로 활용할 수 있습니다. 더 나은보고를 제공하는 도구 (또는 도구와의 통합)를 제공하려고했습니다. 내 지식으로는 준수, 또는 도구를 nagios / sensu / some-other-monitoring-tool 친화적으로 만드는 방식으로 포장합니다. 예 : slideshare.net/m_richardson/… 처음에 편향된 것으로 사과하면 의도하지 않았습니다.
Ahmed Elsabbahy

13

내가 본 두 가지 도구는 InSpecServerSpec 입니다. Serverspec은 RSpec 기반의 Ruby 기반 도구입니다 . InSpec은 RSpec 및 ServerSpec에서 영감을 얻었습니다.

ServerSpec을 사용했습니다. 시원하지만 100 % 안정적이지는 않습니다. 우분투에서 특정 버전의 소프트웨어를 테스트하는 데 문제가 있습니다.

InSpec 문서를 읽었지만 깊이 파고 들지 않았습니다. 본질적으로 Serverspec과 동일합니다.

Github 커밋으로 판단하면 ServerSpec에 대한 작업이 다소 마무리되었지만 InSpec이 급증하는 것처럼 보입니다.

업데이트 : InSpec 4.x 이상은 혼합 상용 / 오픈 소스 라이센스를 사용합니다 (주석 참조).


1
"우분투에서 특정 버전의 소프트웨어를 테스트하는 데 문제가있었습니다." SO에 대한 질문을 발견 한 후에 이것을
고쳤습니다

약간 명확히하기 위해 InSpec은 RSpec을 에뮬레이트하지만 빌드하지는 않습니다.
coderanger

1
@MattSchuchard 참고해 주셔서 감사합니다!
Dave Swersky

테스트 툴에 대해 "100 % 안정적이지 않다"는 소리가 나지 않습니다
ᴳᵁᴵᴰᴼ

InSpec은 테스트 도구로 매우 유용하며 서버에 아무것도 설치하지 않는 반면 ServerSpec은 추가 작업으로 만이 작업을 수행 할 수 있습니다. InSpec에서 Ansible 인벤토리를 사용하도록하려면 일부 작업이 필요합니다. 인벤토리가 YAML 형식 (Ansible 2.4 이상) 인 경우 더 쉽습니다 .
RichVel

10

Ansible과 같은 구성 관리 도구를 사용하는 경우 도구 자체가 구성 편차를 방지해야합니다. Ansible을 사용하여 특정 구성을 설정 한 후에 Ansible을 반복적으로 실행하면 구성이 정의한대로 구성됩니다. 또한 Ansible 코드를 dem 등원 방식으로 작성해야합니다.

위와 같이 Ansible 플레이 북을 일부 서버에서 루프로 실행하면 테스트 프로비저닝을 수행 할 수 있습니다. 예를 들어 크론 작업 또는 Jenkins는 30 분마다 플레이 북을 실행하고 실패에 대해 다시보고 할 수 있습니다. 장애가 없다는 것은 구성이 점검 중임을 의미하며 장애가 발생하면 서버를 원하는 상태 로 만드는 데 문제가 있음을 의미합니다 .

코드가 dem 등원으로 작성되는 것을 신뢰할 수 없으므로 자동 서버의 루프에서 Ansible을 반복적으로 실제로 실행할 수없는 경우 해결 방법이 있습니다. 위와 동일하게 수행 할 수 있지만 (루프에서 Ansible 실행) 드라이 런 모드를 사용 하십시오 . Ansible에서 변경이 필요하다고보고 할 때마다 Jenkins 작업 (또는 cron 작업)은 프로비저닝 된 구성이 변경되었고 서버가 원하는 상태 가 아님을 알릴 수 있습니다 .

Ansible 코드가 실제로 예상대로 작동하는지 확인하기 위해 Dave Swersky가 언급 한 솔루션이 적용됩니다. InSpecServerspec 은 모두 플레이 북이 실제로 의미하는 바를 다른 방식으로 확인하는 도구입니다 . 테스트 환경 (도커 컨테이너 포함)에서 이러한 종류의 도구를 실행하는 가장 좋은 방법 은 다양한 인프라 단위 테스트 도구와 플레이 북 / 모듈 / 요리 책 실행 사이의 모든 접착제를 처리 하는 kitchen.ci 를 사용 하는 것입니다.

Kitchen.ci는 원래 Chef 요리 책을 테스트하는 데 사용되었지만 Ansible 및 기타 CM 도구에도 플러그인이 있습니다.


5

Test Kitchen에는 Ansible 코드를 테스트하기 위해 부엌에서 사용할 수있는 프로비저닝 플러그인이 있습니다. Chef 통합만큼 깊지는 않지만 대부분의 경우 작업을 수행합니다. 전용 Ansible 테스트 시스템 인 최신 Molecule 프로젝트도 있습니다.


0

Outthentic을 사용하여 구성 / 인프라 불일치 / 드리프트를 추적 할 수 있으며 , 원하는 상태를 "고정"하여 원하지 않는 변경 사항을 추적해야 할 때마다 다시 실행하는 테스트 스위트를 쉽게 만들 수 있습니다.


1
DevOps.se Alexey에 오신 것을 환영합니다. 이 경우 도구가 사용자에게 도움이 될 수 있지만 여기에 대한 답변이 되려면 이것이 질문과 관련이있는 방법을 조금 더 전달해야합니다. 그렇지 않으면 링크 전용 광고처럼 보입니다.
병아리

안녕! 물론 더 자세한 내용이 있습니다.
Alexey Melezhik

내 관점에서 볼 때 이것은 rundeck이 할 수있는 것 이상을 수행하지 않으며이 질문의 범위를 벗어납니다. 특히 대답에 따르면 수천 대의 서버 감사를 해결하고 드리프트에 대해 경고하거나 구문 분석 가능한 출력을 제공하여 감사 자에게 사람이 읽을 수있는 보고서를 제시하는 방법을 설명하지 못합니다. 방금 읽은 내용에서 inspec이 할 수있는 것 (예 :)을 수행하고 작업을 수행하는 데 많은 외부 도구가 필요하므로 휴대 성이 적어 스케일에서 사용 가능한 출력을 줄입니다.
Tensibai

"수천 대의 서버 감사를 해결하는 방법"-이 문제에서 수천 대의 서버에 대한 정보를 찾을 수 있습니다.
Alexey Melezhik

"분석 할 수있는 결과를 제공함으로써 감사 자에게 표류에 대한 경고를 받거나 사람이 읽을 수있는 보고서를 제시합니다." 질문에서 이것을 발견하지 못했습니다. 표류의 명백한 경고는 테스트 ... 실패하기 시작한다는 사실이다
알렉세이 Melezhik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.