Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- BFS
- Infra
- dfs
- Algorithm
- CI/CD
- jenkins
- AI
- monorepo
- 프로그래머스
- ansible
- python
- OpenAI
- modbus
- LLM
- Two Pointer
- heapq
- rag
- build
- turbo
- React
- javascript
- 알고리즘
- frontend
- queue
- typescript
- javascirpt
- VectoreStore
- 파이썬
- docker
- DP
Archives
- Today
- Total
DM Log
[CI/CD #3] Infrastructure as Code 개요와 Ansible의 이해 본문
Infrastructure as Code란?
- 코드로서의 인프라라는 뜻으로, 서버, 네트워크, 스토리지, 로드밸런서 등의 인프라 구성을 코드로 관리하고 자동화하는 개념
- 콘솔에 접속해 서버를 설치하고 네트워크를 구성했지만, IaC를 이용하여 스크립트나 설정 파일로 정의하고 자동화된 배포를 수행
IaC의 중요성
- 자동화 - 사람이 직접 설정 필요 없이, 코드를 통해 자동 환경 구성
- 일관성 - 모든 환경이 동일하게 설정
- 속도 향상 - 서버 추가, 배포, 스케일링 작업이 몇 분 내로 완료
- 재현성 - 인프라 문제 발생 시 동일 환경을 빠르게 복원
- 협업 강화 - 인프라를 코드로 관리하므로 개발자, 운영자가 동일 기준으로 작업
Ansible 이란?
- 단순 자동화 도구를 넘어, 설치 - 배포 - 실행 등 시스템 관리 전반을 커버할 수 있는 범용 인프라 자동화 플랫폼
기본 제공 패키지
- 설치: apt-get / yum / homebrew
- 파일 및 스크립트 배포 : copy
- 다운로드 : get_url, git
- 실행 : shell, task
결과 확인
- ok / failed / changed / unreachable
Ansible Server 설치 (Linux)
- yum install ansible
- ansible -version
환경 설정 파일
- /etc/ansible/ansible.cfg
Ansible에서 접속하는 호스트 목록
- /etc/ansible/hosts
- 그룹이름 (ex_nginx) & IP Address 형식으로 작성
[nginx]
111.111.11.11
111.111.11.12
111.111.11.13
Docker 기반 Ansible 환경 구축
- Docker Hub에 제공된 ansible관련 이미지를 통해 학습한 내용
Ansible Docker 이미지 다운
- window / macOs (Intel chip) - docker pull edowon0623/ansible
- macOS (Silicon, M1 chip) - docker pull edwon0623/ansible-server
Ansible 컨테이너 실행
Windows
docker run --privileged -itd --name ansible-server \
-p 20022:22 -p 8082:8080 \
-e container=docker \
-v /sys/fs/cgroup:/sys/fs/cgroup \
edowon0623/ansible:latest /usr/sbin/init
- ssh를 통해 접속 후, 명령어 입력
- 컨테이터 내부에 아래 파일이 없는 경우 vi, sed 명령어 생략 (/etc/sysconfig/docker 또는 /etc/sysconfig/docker-storage)
$ vi /etc/sysconfig/docker
$ sed -i -e 's/overlay2/vfs/g' /etc/sysconfig/docker-storage
$ systemctl start docker
$ systemctl status docker
Ansible에서 접속하는 호스트 목록 생성
mkdir /etc/ansible
cd /etc/ansible
vi hosts
[devops]
172.17.0.2
172.17.0.4
-
- docker ip 확인 - docker network inspect bridge
SSH 접속 키 생성 및 배포
- Ansible은 SSH를 통해 통신을 위한 password SSH 키를 생성하고 서버 등록
ssh-keygen
ssh-copy-id root@[ssh key 전달할 IP]
Ansible Modlue
실행 옵션
All modules — Ansible Documentation
docs.ansible.com
- -i : 적용 될 호스트들에 대한 파일 정보
- -m : 모듈 선택
- -k : 관리자 암호 요청
- -K : 관리자 권한 상승
- --list-hosts : 적용되는 호스트 목록
멱등성
- 같은 명령어를 통해 실행 시 여러번 실행 됨
- Ansible에서는 같은 명령어 실행 시 한번만 실행 됨
실행 TEST
- ping 모듈
[root@31448245eb61 ~]# ansible all -m ping
172.17.0.4 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
172.17.0.2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
- 메모리 모듈
[root@31448245eb61 ~]# ansible all -m shell -a 'free -h'
172.17.0.4 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 15Gi 2.0Gi 9.2Gi 23Mi 4.3Gi 13Gi
Swap: 4.0Gi 0B 4.0Gi
172.17.0.2 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 15Gi 2.0Gi 9.2Gi 23Mi 4.3Gi 13Gi
Swap: 4.0Gi 0B 4.0Gi
- 파일 생성
touch test.txt
echo "TEST TEST" >> test.txt
ansible all -m copy -a "src=./test.txt dest=/tmp"
- 특정 패키지 설치
ansible devops -m yum -a "name=httpd state=present"
Ansible Playbook
- 사용자가 원하는 내용을 미리 작성해 놓은 파일
vi first-playbook.yml
ansible-playbook first-playbook.yml
파일 생성 예제 #1 - ansible에 host 추가
---
- name: Add an ansible hosts
hosts: localhost
tasks:
- name: Add a ansible hosts
blockinfile:
path: /etc/ansible/hosts
block: |
[mygroup]
172.17.0.5
파일 생성 예제 #2 - 파일 복사
- name: Ansible Copy Example Local to Remtoe
hosts: devops
tasks:
- name: copying file with playbook
copy:
src: ~/sample.txt
dest: /tmp
owner: root
mode: 0644
파일 생성 예제 #3 - 폴더 생성 & url로 파일 다운로드
---
- name: Download Tomcat9 from tomcat.apache.org
hosts: devops
tasks:
- name: Create a Directory /opt/tomcat9
file:
path: /opt/tomcat9
state: directory
mode: 0755
- name: Download Tomcat using get_url
get_url:
url: https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.75/bin/apache-tomcat-9.0.75.tar.gz
dest: /opt/tomcat9
mode: 0755
checksum: sha512:https://downloads.apache.org/tomcat/tomcat-9/v9.0.75/bin/apache-tomcat-9.0.75.tar.gz.sha512'개발공부 > Infra' 카테고리의 다른 글
| [CI/CD #6] Jenkins + Ansible + Kubernetes 연동 (0) | 2025.11.01 |
|---|---|
| [CI/CD #5] Docker Desktop Kubernetes 사용 (0) | 2025.11.01 |
| [CI/CD #4] Jenkins + Ansible 연동 (0) | 2025.10.29 |
| [CI/CD #2] Jenkins를 이용한 CI/CD 사용 (0) | 2025.10.26 |
| [CI/CD #1] DevOps와 CI/CD 이해 (feat. Jenkins) (0) | 2025.10.25 |
