티스토리 뷰

Ansible이 무엇이고 어떤 역할을 하는지는 알고 오셨을거라 생각합니다.

본 글에서는 Ansible을 활용하기 위한 간단한 환경을 만들고 웹서버를 설치하고 띄우는 것 까지 다룹니다.

밑에서는 Docker를 사용해 손쉽게 실험환경을 만들었습니다. Docker를 사용하지 않고 Cloud에 원격 서버를 사용해도 되고, 노트북여러개를 써도 되고, VM을 써도 됩니다.

 

Docker를 다룰줄 아시면 정말 빠르게 실험 환경을 구축할 수 있습니다.


worker에 ansible agent를 설치하지 않고 ssh로 통신하기 때문에 아주 간단하고 유용하게 사용할 수 있습니다(최고)

 

 

1. 실험 환경

 

실험 환경은 뭐니뭐니해도 그림으로 그려서 보는게 가장 편합니다..

 

 

그림 1. 시스템 구조

여기서 주목할만 한 것은

1) 어떤 하나의 Ansible server 컨테이너,

2) ansible이 설치 안 된 2개의 대상 컨테이너

3) 컨테이너들을 연결하고 있는 SSH

이것뿐입니다.

 

 

 

 

2. 실험 환경 구축

자, 이제 실험 환경을 하나씩 구축해 봅시다.

 

2.1) Worker Container 만들고 SSH server On 하기

 

ubuntu가 설치된 깡통 Worker container를 만들어 봅시다.

docker run -d -it --name worker1 -p 1234:80 ubuntu
docker run -d -it --name worker2 -p 4321:80 ubuntu

이렇게 입력만하면 ubuntu가 설치된 깡통 container 2개가 뚝딱 만들어집니다..

이름은 worker1, worker2로 붙여줬고 port설정은 마지막에 실험을 위해 80번 내부포트로 연결해 주었습니다.

실행 화면

 

현재 상태

지금은 ubuntu만 설치되어 있는 상태입니다. container안에 들어가서 SSH통신이 가능하도록 openssh서버를 설치해 줍시다.

 

container안에 들어가기 위해서는 attach가 아닌.. exec를 씁시다.

attach로 container로 들어간 뒤 exit로 나오면 conatiner가 exit됩니다.

docker exec -it worker1 /bin/bash
docker exec -it worker2 /bin/bash

 

실행화면

worker1의 container ID가 나오고 성공적으로 내부로 들어온 것을 확인할 수 있습니다.

 

여기서 부터는 보통 Ubuntu와 동작이 동일합니다.

open ssh를 설치해주기 위해서,

apt-get update
apt-get install openssh-server

apt-get install vim

vi /etc/ssh/sshd_config

와 같이 순서대로 입력해 줍시다.

ubuntu에는 openssh-client가 자동으로 설치되어 있다고 합니다. 

openssh-server를 설치하면 Y를 입력하고 지역을 가르쳐달라고 하는데 입력해줍시다.. Asia/Seoul

그리고 vim도 마저 설치해 줍시다!

설치 후 확인

ssh server 설치는 정상적으로 되었고 외부에서의 접속을 위해서 root계정 비밀번호나 SSH설정을 변경해 줍니다.

passwd

를 입력해서 비밀번호를 바꿔주고,

vi /etc/ssh/sshd_config

로 설정파일을 편집합니다.

 

대부분 주석처리 되어있는데 그중에서

from) #PermitRootLogin prohibit-password
to) PermitRootLogin yes


from) #Port 22
to) Port 22

이 두가지를 변경해 줍시다. 저장 후 나가기.

 

sshd_config 변경 부분

 

이제 설정을 마쳤으니 SSH서버를 실행시켜 SSH로 접근할 수 있도록 해줘야 합니다.

service ssh status
service ssh start

or restart, stop

ssh서버가 정상적으로 설치된 것을 확인할 수 있고 service ssh start 명령어를 사용해서 서버를 켜줍시다.

 

ssh 서버 실행

이제 Worker container는 준비가 끝났습니다.

 

2.2) Ansible Server 구축하기

또 ubuntu 이미지를 사용해서 깡통 ubuntu container를 만들고 container 내부로 들어갑니다. worker와 과정이 똑같습니다. ansible을 설치한다는 점만 다릅니다.

 

docker run -d -it --name ansible_server ubuntu

그리고 내부에 들어가서 ansible을 설치해 줍시다

docker exec -it ansible_server /bin/bash
apt-get update
apt-get install ansible
ansible --version

 

입력해서 버전이 나오면 설치가 완료된 것입니다.

버전

벌써 설치가 끝났습니다. (vim도 설치 해야 합니다!)

정말 간단한..

 

이제 inventory와 playbook을 정의해 봅시다.

 

우선, worker들의 IP 주소를 알아야 합니다.

worker는 conatiner의 IP 주소 입니다

docker inspect worker1
docker inspect worker2

위 명령어로 container의 IP 주소를 볼 수 있습니다.

 

container의 IP주소

이런식으로 두 container모두 IP 주소를 얻어냅시다.

그리고 ansible server container의 내부로 들어가서

 

vi /etc/ansible/hosts

로 host 파일을 열어줍시다.

작성

그리고 주석들을 무시한 채 가장 밑에 webserver라는 그룹을 만들어주고 두 container의 IP 주소를 입력해주고 저장하면 끝입니다. 이제 '누구'에게 명령을 수행할 것인지는 작성이 끝났습니다.

 

'어떤' 명령을 보낼지는 playbook으로 정의를 해야합니다.

ansible폴더에 playbook이라는 간단한 폴더를 만들어주고 다음과 같이 입력해 줍니다.

vi playbook-test.yaml

---
 - hosts: all
   Task:
   - name: Install nginx latest version
    apt:
      name: nginx
      state: latest
      cache_valid_time: 3600

위 playbook은 nginx를 최신버전으로 설치하도록 하는 yaml파일입니다.

 

Server가 Worker들과 SSH로 통신하면서 playbook에 적힌 내용을 수행합니다.

이때, Key를 사용해서 SSH에 접속할 수 있도록 worker에 key를 옮겨주어야 합니다.

 

server container 내부에서,

ssh-keygen
ssh-copy-id [worker's ip addr]

 

위처럼 Key를 사용하여 SSH로 접속을 할 수 있도록 해주어야 합니다.

ssh-copy-id

 

이제 실행해 보겠습니다.

worker1에서

nginx가 설치되어 있지 않은 것을 볼 수 있습니다.

 

server에서 ping도 정상

ping도 잘 동작하고,

ansible-playbook playbook-test.yaml

입력하면..

 

실행 화면

아까는 설치되어 있지 않았던 nginx가 설치되어있는 것을 볼 수 있습니다.

처음 실행하면 다운로드한다고 changed가 출력되지만

한번 더 실행하면

두번째 실행

Changed는 사라지고 없습니다!

 

 

docker-machine ip

로 ip를 구해서 열었던 1234외부포트로 접속하면..

실행도 잘 됩니다!

물론

service nginx start

로 시작은 해줘야합니다.

 

 


정말로 엄청난 도구인 것 같습니다.

ssh로 연결은 이렇게 할 수 있으니, playbook 문법만 다루고 어떤 모듈이 존재하는지 정보만 알고 있으면 금방 배워서 사용할 수 있을 것 같습니다.

 

 

 

 

 

 

 

 

댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday