IT/cloud

[Ansible] lac를 통한 클라우드 인프라 구축-1

lakedata 2025. 2. 13. 22:14

Ansible 소개

Ansible이란?

환경 구성 자동화 도구

서버를 수동으로 관리하기 때문에 구성이 동일해야 되는 여러 서버에서 눈송이 서버(Snowflake Server)와 같이 차이가 생기기 때문에 그래서 최근 시스템들은 자동화 방식을 많이 채택하고 있습니다.

Ansible의 주요 특징

  1. 확장성과 유연성
    • 다양한 운영체제, 클라우드 플랫폼, 네트워크 장치를 지원
    • 네트워크 자동화, 구성 관리, 애플리케이션 배포 등 전체 라이프사이클 관리
  2. 에이전트 불필요
    • 추가적인 에이전트 없이 OpenSSH를 활용하여 관리 호스트에 연결
    • 작업이 끝나면 모듈이 제거되어 시스템 리소스를 효율적으로 사용
  3. 간단한 사용법
    • YAML 기반의 플레이북을 사용하여 간단한 자동화 코드를 제공
    • 별도의 프로그래밍 지식 없이 활용
  4. 멱등성과 예측 가능성
    • 동일한 자동화 작업을 여러 번 실행해도 결과가 일관
    • 검증된 스크립트를 재사용해 개발, 테스트, 운영 환경으로의 전환 속도를 높임

Ansible 아키텍처

노드 (제어 노드와 관리 호스트)

  • 제어노드: 설치를 하고 저장되어 있는 코드
  • 관리 호스트: 인벤토리 파일로 시스템을 그룹화해 관리
    • 관리 호스트 목록 작업 목록은 플레이북이라는 파일에 정의
    • 플레이북 파일 YAML 형식

플레이북: 하나 이상의 플레이로 구성된 파일
플레이: 여러 작업을 정의
작업: 모듈 실행 단위

Ansible 실습

환경설정

다운로드
virtualbox.org
rockylinux.org
mobaxterm

(virtualbox)Download-Window hosts

(rockylinux)Download- Minimal ISO 다운로드

*virtualBox setting
*

수동으로 어댑터 설정
IPv4주소: 172.16.0.1

새로만들기
이름: controller
ISO이미지: roky

)

환경설정
Host Key Combo : Ctrl+Alt

controller - 설정 - Expert - 어댑터2
네트워크 어댑터 활성화
호스트 전용 어댑터

iso 적용이 안됐으면 변경

재부팅 후 연결 성공

)

패스워드 : root

일반 사용자
test, root

)

poweroff  // 종료

복제
serverA, serverB, serverC 복제

 

MAC 주소 정책: 모든 네트워크 어댑터의 새 MAC 주소 생성

)

가상머신 접근

mobeXterm-ssh

  • 가상머신에 IP 세팅

controller

nmcli con mod enp0s8 ipv4.address 172.16.0.200/24 ipv4.method manual 
hostnamectl set-hostname controller
reboot 

)

serverA

nmcli con mod enp0s8 ipv4.address 172.16.0.201/24 ipv4.method manual 
hostnamectl set-hostname serverA
reboot 

serverB

nmcli con mod enp0s8 ipv4.address 172.16.0.202/24 ipv4.method manual 
hostnamectl set-hostname serverB
reboot 

serverC

nmcli con mod enp0s8 ipv4.address 172.16.0.203/24 ipv4.method manual 
hostnamectl set-hostname serverC
reboot 

MobaXterm 연결

controller 노드에서만 실행

)

사용자 생성

useradd -> 사용자 생성
passwd 사용자 -> 패스워드 설정
사용자 로그인 su - 사용자

useradd ansible-user
passwd ansible-user
su - ansible-user

serverA

serverB

serverC

SSH 키 구성

ssh-keygen -f -N '' ~/.ssh/id_rsa 
# -t rsa : 기본 알고리즘이라서 rsa 방식 그대로 쓰고 싶은 경우에는 생략해도 됨
# ~/.ssh/id_rsa : 기본 저장 위치 
# -N '' : 키에 암호를 지정하지 않겠다는 뜻 (키만 가지고 있으면 바로 들어갈 수 있게끔)

ssh -i test.pem ec2-user@10.0.0 
# 이 -i 옵션은 기본  위치(~/.ssh)일때는 굳이 작성하지 않아도 된다.
ssh-copy-id 172.16.0.201 #severA
ssh-copy-id 172.16.0.202 #serverB
ssh-copy-id 172.16.0.203 #serverC

-i옵션 없이도 접근 가능하다.

su - ansible-user
ssh-keygen -f ~/.ssh/id_rsa  -N ''
ssh-copy-id 172.16.0.201
ssh-copy-id 172.16.0.202
ssh-copy-id 172.16.0.203
ssh 172.16.0.201

)

연결 확인


Ansible 설치

# root 계정으로 실행
cat /etc/sudoers
vi /etc/sudoers.d/ansible
ansible-user        ALL=(ALL)       NOPASSWD: ALL

sudo dnf install epel-release

sudoer를 직접 건들기보다는 sudoers.d에 파일을 생성하여 상속하게 해줌(보안)

vi /etc/sudoers.d/ansible

epel.repo 안에 ansible이 있기에 ansible을 install 받을 수 있음

su - ansible-user
sudo dnf install epel-release 
# EPEL -> Extra Package for Enterpirse Linux  #패키기 최신을 제공

)

sudo dnf install -y ansible

controller에서 했던 것처럼 serverA, serverB,serverC에 sudo 권한 부여

cat /etc/sudoers
vi /etc/sudoers.d/ansible

위처럼 설정해주면 ssh 접속시에 ip로 접속하는 것이 아니라 호스트 이름으로 접속

설치 한 뒤 확인하기 위해 버전 정보를 출력.

버전
ansible 파이썬 기반으로 실행

Ansible 제품

  •  Ansible Core, AWX, Ansible AP