DevOps 학습을 진행하면서 앤서블(Ansible)이라는 툴에 대한 언급이 계속 나온다.
이번 포스팅에서는 앤서블이 무엇인지, 그리고 어떻게 사용되고 어떤 역할을 하는지에 대한 내용을 다룬다.
앤서블은 여러 개의 서버를 효율적으로 관리하기 위해 고안된 인프라 구성 관리 도구이다.
인프라 구성 관리도구는 다음과 같은 특징을 가진다.
선언적
구성 정보에 의해 설정 대상의 "상태"가 명확히 기재되고, 상태를 파악할 수 있는 것을 의미. 선언적이라는 것은 "서버가 어떤 상태로 존재했으면 좋겠다고 생각하는 상태를 설명하는 것이며, 어떻게 하고 싶은 것인가 하는 작업을 기술하는 것은 아니다."라는 것이다.
service:
name: nginx
state: started
위와 같은 표현은 누가봐도 "nginx를 실행 상태로 한다."라는 것을 인식할 수 있다. 항상 간결하게 작성되어 있어서 개발자가 봐도 이해하기가 쉽다.
추상화
추상화는 구성 정보를 대상 환경의 미세한 차이에 따라 별도로 자세히 구분해서 작성하지 않고, 최대한 포괄적으로 작성하는 것을 의미한다. 앤서블의 Play-book에 정보를 추상적으로 작성한다. 예를 들면 패키지의 설치 환경을 Red Hat이나 Ubuntu에서도 동일하게 기술한다. yum 명령어나 apt-get 명령어를 사용하는 것에 대해서는 언급하지 않고, 개발자는 단순히 상태에만 신경을 쓴다는 것이다.
수렴화
대상의 상태가 현재 어떤 상태일지라도 나중에는 기대했던 상태로 변경된다.
멱등성
몇 번을 실행해도 같은 결과를 얻을 수 있는 성질을 "멱등성"이라고 한다. 잘못된 상태로 여러차례 실행한다고 하더라도 결과가 달라지지 않고 있어야 하는 상태로 안정하게 돌아가게 되면, 사용자는 안심하고 이 구조를 사용할 수 있다.
간소화
구성 관리 도구는 구성 정보를 기반으로 대상에 대한 설정을 신속하게 수행하게 된다. 일단 설정을 한번 기술해 놓으면 나머지는 자동으로 되기 때문에 작업의 간소화가 가능하다. 서버 여러 대에서 동시에 실행할 수 있기 때문에 구축 속도가 빠르고, 기술 내용이 선언적인 구성 관리 도구는 여러 대상의 상태와 구성을 매우 쉽게 파악할 수 있으며 관리 측면에서도 매우 생산성이 높다.
이제 실제로 앤서블이 위와 같은 특징을 어떻게 가질 수 있는지 예제를 통해 살펴보도록 한다.
앤서블의 기본적인 사용법과 멱등성
앤서블의 사용법을 학습하기 위해서 centos를 설치하고 ssh로 접속한 다음 nginx를 설치한다.
$ sudo vi /etc/yum.repos.d/nginx.repo
//파일에 다음과 같이 코드 작성
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
$ sudo yum install -y nginx
다음으로 앤서블을 설치한다.
$ sudo yum -y install epel-release
$ sudo yum -y install ansible
* epel-release: EPEL(Extra Packages for Enterprise Linux)은 Fedora Project에서 제공되는 저장소로 각종 패키지의 최신 버전을 제공하는 community 기반의 저장소
다음으로 ansible 명령어를 이용하여 nginx를 실행 시켜본다.
실행되는 상황을 살펴보기 위해 nginx 서비스를 끄고 시작한다.
$ sudo systemctl stop nginx.service
$ ansible localhost -b -c local -m service -a "name=nginx state=started"
다음과 같이 앤서블을 이용해 nginx를 started상태로 만드는 것이 가능하다.
위에서 사용한 옵션에 대한 설명은 다음과 같다.
- localhost: 실제 명령 실행을 수행하는 대상 정의
- -b: 원격 실행되는 대상 서버에서 어떤 사용자에 의해 조작이 실행되는지 나타내는 것으로 -b는 root사용자를 의미
- -c local: 대상 서버가 자기 자신인 경우 ssh가 필요 없기 때문에 local로 정의
- -m service: service 모듈을 이용하는 것을 정의 | 모듈에 대한 설명 링크
- -a "name=nginx state=started": 상기 모듈을 사용하기 위한 추가적인 파라미터
위의 실행결과에서 changed 값이 true로 되어 있는 이유는 nginx가 중지된 상태에서 실행되었기 때문이다.
다시 한번 동일하게 nginx를 실행시키면
위와 같이 상태가 변하지 않았으므로 changed값이 false가 된다.
이번 포스팅에서는 앤서블의 기본적인 개념과 nginx를 이용하여 간단한 명령어를 사용해보았다.
아직까지 내용으로 봐서는 정확히 이 툴이 무엇을 하는지 별로 안 와 닿는 게 사실이다.. 하지만 DevOps에서 계속 언급되는 기술이기 때문에 포스팅을 이어 진행하면서 툴의 진정한 의미를 느껴보려고 한다.
다음 포스팅에서는 ansible-playbook을 다루는 방법에 대해서 다루도록 한다.
참고자료
[1] IT 운용 체제 변화를 위한 데브옵스 | 2019 | 키와무라 세이고 ... | 링크
'클라우드 컴퓨팅 & NoSQL > Ansible' 카테고리의 다른 글
[앤서블(Ansible)] Serverspec 사용법 (0) | 2021.04.15 |
---|---|
[앤서블(Ansible)] ansible-playbook dry-run 모드 (0) | 2021.04.15 |
[앤서블(Ansible)] ansible-playbook 사용법 (0) | 2021.04.13 |