티스토리 뷰
Ansible 에 대해 공부하는 중 시스템을 관리하고 배포한다는 점에서 docker 와 되게 비슷하다고 생각하였습니다.
그 둘의 차이를 조사한 결과
쉽게 말해서, Ansible은 서버 구성 및 자동화 도구이고 docker 는 가상머신 플랫폼 및 컨터이너 기반 이라는 것을 알았습니다.
만약 서버가 50대 있고 nginx를 설치한다던가 시스템 계정을 만든다던가 그러면 일일이 50대를 다 들어가서 설정해줘야하는 불편함이 있을 것입니다. 하지만 그런 불편함을 Ansible 이 대신 한번에 다 해줍니다!!
위에서 말한 것들을 확인해보기 위해 실제로 Ansible 실험환경을 구축하여 nginx를 배포해보는 작업을 해보겠습니다. (참고)
우선, docker 로 대상 컨테이너(worker) 2개와 서버 컨테이너(ansible-server) 1개를 띄우고 제어 노드를 이용하여 관리노드에 nginx 를 설치해보겠습니다.
1. Worker Container 만들고 SSH 설치하기
ubuntu os 가 설치된 Worker Container를 만듭니다.
# 컨테이너 1
$docker run -it -d --name vm1 -p 8080:80 ubuntu
# 컨테이너 2
$docker run -it -d --name vm2 -p 8081:80 ubuntu
1.1 컨테이너 접속하고 SSH 설치
Ansible을 사용할 것이니 ssh를 설치하고 실행시킬 것입니다.
우선 2개의 워커 컨테이너가 있으니 하나씩 따라해주시면 되겠습니다.
#1
$docker exec -it vm1 /bin/bash
#2
$docker exec -it vm2 /bin/bash
In docker worker 컨테이너...
$apt-get update
$apt-get install -y openssh-server
$apt-get install -y vim
1.2 설정 후 SSH 실행
SSH 설치가 정상적으로 되었다면 외부와 접속을 위해서 root의 계정 비밀번호와 SSH 설정을 변경해야 합니다.
(필자는 이 부분을 설정해주지 않아 ssh접속이 안되는 불상사(?)로 인해 시간을 버렸기 때문에 꼭 설정하시길 바랍니다)
$passwd
$vim /etc/ssh/sshd_config
비밀번호와 SSH 설정을 끝내고 SSH 서비스를 실행시켜줍니다.
$service ssh status
$service ssh restart
여기까지 다른 워커 컨테이너도 해주시면 되겠습니다.
2. Ansible Server 구축
2.1 docker 서버 컨테이너 만들기
# In Server
$docker run -it -d --name ansible-server ubuntu
# 접속
$docker exec -it ansible-server /bin/bash
$apt-get update
$apt-get install -y vim
# ansible 설치
$apt-get install ansible
$ansible --version
2.2 Worker 컨테이너 IP 구하기
Ansible이 관리하기 위해서 Work 컨테이너 ip 주소를 inventory에 넣어둬야 합니다.
먼저 worker 컨테이너 ip를 알아야 합니다.
$docker inspect vm1
$docker inspect vm2
위와 같은 명령어로 확인할 수 있지만 좀 세련되게 IP 를 찾을 수 있는 방법을 소개하겠습니다.
$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" CONTAINER_ID
각각 컨테이너의 IP를 각각 구합니다.
2.3 playbook 폴더를 만들고 인벤토리와 구성파일을 만든다.
# In server...
$mkdir playbooks
$vim inventory
#[webserver]
# 172.17.0.2
# 172.17.0.3
$vim ansible.cfg
#[defaults]
#inventory = ./inventory
#remote_user = root
#ask_pass = false
#[privilege_escalation]
#become = true
#become_method = sudo
#become_user = root
#become_ask_pass = false
[webserver]라는 그룹을 만들고 두 컨테이너의 ip주소를 입력하고 구성파일에 인벤토리파일을 읽을 수 있게 설정해줍니다.
참고
Ansible 의 구성파일의 우선순위
1. Ansible_config 환경변수로 지정한 파일
2.현재 디렉터리의 ansible.cfg (추천)
3. 홈 디렉터리의 ~/.ansible.cfg
4. /etc/ansible/ansible.cfg
2.4. playbook 작성 (어떤 명령을 보낼지 정의)
$vim playbook-test.yaml
---
- hosts: webserver
tasks:
- name: Install nginx latest version
apt:
name: nginx
state: latest
nginx를 최신 버전으로 설치하는 yaml파일입니다.
2.5 SSH Key 만들기
서버가 SSH를 통하여 worker 들에게 해당 playbook을 전달해 worker 들이 수행합니다
이때, Key를 사용하여 SSH에 접속할 수 있도록 worker에 서버의 공개키를 옮겨주어야 합니다.
# server container 내부
$ssh-keygen
$ssh-copy-id .ssh/id_rsa_pub [worker's Ip addr]
worker 의 계정 패스워드가 지정되어 있어야 key가 옮겨집니다.
2.6 worker의 nginx 설치 여부 확인과 ping Test
Ansible을 통해 각 worker에 nginx 배포를 하는 것이 목적입니다
- nginx 가 설치되어 있지 않은 것을 확인합니다.
- Ping Test
만약 ping이 되지 않는다면 worker 계정의 패스워드 설정 또는 worker ssh 서비스 상태를 확인해주시면 됩니다.
3. 배포
# In server...
# 실행은 하지않고 문법 체크
$ ansible-playbook playbook-test --syntax-check
# 실행
$ ansible-playbook playbook-test.yaml
4. nginx 서비스 활성화
# In worker...
$ service nginx start
끝으로, nginx 서비스 확인 해줍니다. ( 포트는 각각 8080, 8081)
이것으로 docker로 Ansible 실험 환경을 만들어봤습니다.🎉
처음해보는 거라 시간이 꽤 소요되었고 playbook 문법과 yaml 을 다루는 데 공부를 더 해봐야겠습니다.
추가적으로, AWS에서 Ansible 을 사용할 수 있다는데 조만간 해볼 예정입니다.
'인프라 > Linux' 카테고리의 다른 글
터미널에서 나만의 명령어 단축키 만들기 (2) | 2022.03.31 |
---|---|
[Linux] NFS 서버 구축해보기 (1) | 2022.01.27 |
[Linux]내부 DNS 서버 구축해보기 (0) | 2022.01.25 |
[Linux] fdisk - 파티션 만들기 (0) | 2022.01.18 |
- Total
- Today
- Yesterday
- SpringBoot
- 3Way Handshake
- Docker
- 알고리즘
- 프로토콜
- s3
- 네트워크
- java
- 라우팅
- 개발
- rds
- 프로그래머스
- osi7계층
- 계층
- 자바
- spring
- 삽질
- lambda
- ec2
- dto
- aws
- tcp
- 초보
- 라우터
- 회고
- .NET
- 개발자
- Spring Boot
- 스위치
- 회고록
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |