본문 바로가기
IT 잡지식/DevOps

[Jenkins] IaC & Ansible 의 이해

by 쯀리♥️ 2023. 9. 19.

 

 

안녕하세요, 쯀리입니다.

지난 시간에는 새로운 도커 서버에 ssh를 통해 접근해 보았는데, 이 과정을 왜 거쳤을까요?

오늘 배워볼 IaC와 Ansible을 사용하기 위해서 입니다. 

 


 

IaC (Infrastructure as a Code)

말 그대로 코드형 인프라

코드를 통해 인프라를 관리하고 프로비저닝하는 것

DevOps는 코딩되면 변동하는 수요에 맞춰 인프라를 빠르게 시작하고 해체하며 조정할 수 있기 때문에

소프트웨어 개발, 테스트, 구현이 훨씬 더 빠르고 쉬워집니다.

 

IaC의 장점

일관성: 수동으로 구성 할 때 발생하는 오류를 코드를 통해 더 안전하고 일관성 있게 방지 할 수 있습니다.

비용 절감 :  한명의 운영자가 동일한 코드를 이용해 여러개의 시스템을 구축하고 관리 할 수 있기 때문에 비용이 크게 절감됩니다. 

효율성 : 템플릿을 통해 시스템 구성, 유지보수 및 관리가 간소화됩니다. 

속도 : 개발자의 시간을 많이 뺏는 프로비저닝 작업을 스크립트로 실행하면 간단한 작업으로 전환하여  새로운 소프트웨어를 구축할 때 훨씬 더 신속하게 출시 할 수 있습니다.

위험감소 : 소스 통제를 받을 수 있도록 버전 제어를 지원 하기 때문에 위험이 감소합니다.

 

 

많이 사용하는 툴들에는 Ansible, Terraform, AWS CloudFormation 등이 존재합니다. 

 


Ansible VS Terraform

Ansible Terraform
- 개발사 : Redhat
- 기존에 있는 서버에 대한 정보나 설정을 변경할때 사용
-
구성관리 도구
- 다양한 모듈
- agent가 필요 x (= 새로운 서버에 따로 뭔가 설치할 필요 x)
- Push 기반 서비스
- 서버를 구축하는데 사용
- 클라우드와 상관없이 사용 가능
- 별도의 언어 dsl 알아야함
- 스크립트로 유지해야함

Docker에 Ansible 설치해보기

ansible 이미지 가져오기

docker pull edowon0623/ansible

 

 

ansible에서 사용할 서버를 설정해보겠습니다. 

저는 20022번 포트가 비어있기 때문에 ansible 컨테이너는 20022 포트로 연결해주겠습니다.

또한 포트포워딩으로 8080과 8081은 각각 도커와 jenkins로 사용중이기 때문에 저는 8082포트로 포워딩 시켜주겠습니다. 

 

docker run --privileged --name ansible-server -itd -p 20022:22 -p 8082:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/ansible:latest /usr/sbin/ini

 

ansible 서버에 접속해보겠습니다.

docker exec -it ansible-server bash

또는 

# ssh 접속시 비밀번호 : P@ssw0rd
ssh root@localhost -p 20022

ssh가 가능한지 확인해야합니다!!

 

 

기본적인 명령어가 먹지 않기 때문에 필요한 라이브러리를 설치해주겠습니다.

 yum install -y ncurses

 

ansible 서버의 IP와 버전을 확인해보겠습니다.

hostname -i

ansible --version

 

ansible 서버에서 docker를 연결해보겠습니다. 

systemctl status docker
systemctl start docker

 

이제 ansible 설정을 해보기 전에 도커 내부에 각각의 컨테이너들이 어떤 IP로 동작하는지 살펴보겠습니다. 

docker network inspect bridge

 

 

저는 ssh 통신이 가능한 docker 서버를 하나 더 생성해 ansible-server에서 테스트 해보겠습니다.   

docker-server와 docker-server2 의 IP주소를 따로 작성해 두겠습니다.

저는

docker-server : 172.17.0.3

docker-server2: 172.17.0.5

로 되어있습니다. 

 

서버에 ansible에서 사용할 hosts 파일을 생성해주겠습니다.

vi hosts
cat hosts

 

hosts 파일 형식

[devops]  -> 그룹 이름입니다. 서버를 그룹으로 관리할 수 있습니다.

 

추가가 완료됐다면 

비밀번호 없이 접근 가능하도록 ssh-key를 생성해주겠습니다.

 ssh-keygen

 

이제 생성된 키를 docker-server에 복사해주겠습니다. 

ssh-copy-id root@172.17.0.3

첫 등록시에는 비밀번호를 입력해 주어야 합니다.

 

등록이 완료되었다면 ssh로 접근이 가능한지 살펴보겠습니다.

ssh root@<접속할 서버 IP>

 

비밀번호 없이 접근이 가능합니다.

 


오늘은 IaC와 Ansible에 관해 간단히 알아보고 설치까지 해보았습니다. 

다음시간에는 Ansible의 기본명령어를 살펴보겠습니다. 

 

 


참조

인프런-Jenkins를 이용한 CI/CD Pipeline 구축