- Ansible 플레이북 작성/실행/검증 루틴을 익힌다.
- 인벤토리, 변수, 템플릿, Role을 재사용 가능한 형태로 설계한다.
- 서비스 운영 자동화(Nginx, Docker)를 안정적으로 수행한다.
- OpenStack 핵심 컴포넌트(Keystone/Glance/Nova/Neutron/Cinder) 운영 흐름을 Ansible 관점으로 이해한다.
- 마지막 강의에서 운영 Runbook을 완성해 재현 가능한 실습 체계를 만든다.
ansible-core,yaml,python3,linux,openstack
docker,nginx,awscli,az(비교 학습 목적)
Keystone: 인증/권한/서비스 카탈로그 (Python)Glance: VM 이미지 관리 (Python)Nova: 인스턴스 생성/스케줄링/컴퓨트 제어 (Python)Neutron: 네트워크/서브넷/라우터/FIP 제어 (Python)Cinder: 블록 스토리지 볼륨/스냅샷 관리 (Python)Horizon: Django 기반 웹 대시보드 (Python + HTML/CSS/JS)
| Lecture | 모듈 | 주제 |
|---|---|---|
| lecture01 | Ansible Foundation | Ansible 학습환경 점검과 실행 루틴 정립 |
| lecture02 | Ansible Foundation | Inventory/Variables 구조 설계 |
| lecture03 | Ansible Foundation | Ad-hoc 명령과 Facts 수집 자동화 |
| lecture04 | Ansible Foundation | Jinja2 템플릿과 Handler 실전 |
| lecture05 | Ansible Foundation | Role 분리와 재사용 설계 |
| lecture06 | Ansible Foundation | Idempotency와 검증 자동화 |
| lecture07 | Ansible Operations | 사용자/권한/SSH 정책 자동화 |
| lecture08 | Ansible Operations | Nginx 서비스 배포와 검증 |
| lecture09 | Ansible Operations | Docker Engine 설치 자동화 |
| lecture10 | Ansible Operations | Compose 배포와 업데이트 전략 |
| lecture11 | OpenStack Foundation | OpenStack CLI 환경 구성과 인증 토큰 흐름 |
| lecture12 | OpenStack Foundation | OpenStack 프로젝트/네트워크 리소스 자동화 기초 |
| lecture13 | OpenStack Foundation | OpenStack 아키텍처와 핵심 서비스 이해 |
| lecture14 | OpenStack Foundation | Keystone 인증/프로젝트/역할 모델 |
| lecture15 | OpenStack Foundation | Glance 이미지 관리 자동화 |
| lecture16 | OpenStack Foundation | Nova 인스턴스 라이프사이클 자동화 |
| lecture17 | OpenStack Foundation | Neutron/Cinder 리소스 자동화 |
| lecture18 | OpenStack Operations | Horizon 운영 점검과 로그 수집 |
| lecture19 | OpenStack Operations | Kolla Ansible 배포 준비와 검증 |
| lecture20 | OpenStack Operations | 종합 캡스톤: OpenStack 운영 Runbook 완성 |
- Week 1:
lecture01~05(기초 문법/구조) - Week 2:
lecture06~10(운영 자동화) - Week 3:
lecture11~15(OpenStack Foundation) - Week 4:
lecture16~20(OpenStack 운영/캡스톤)
권장 학습 시간: 강의당 60~90분
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install ansible-core
ansible --version# 기본 실행 (설치 태스크 제외)
ansible-playbook -i ansible/inventories/local/hosts.ini lectureNN/playbook.yml -e install_enabled=false
# 설치 포함 실행
ansible-playbook -i ansible/inventories/local/hosts.ini lectureNN/playbook.yml -e install_enabled=trueansible-playbook -i ansible/inventories/local/hosts.ini lecture01/playbook.yml -e install_enabled=false
ansible-playbook -i ansible/inventories/local/hosts.ini lecture01/playbook.yml -e install_enabled=true각 강의의 lecture.yml에 있는 ansible_lab.reference_playbook을 참고해 아래처럼 실행합니다.
ansible-playbook -i ansible/inventories/local/hosts.ini ansible/playbooks/00_ping.yml강의마다 아래 4가지를 남기면 재현성이 높아집니다.
- 실행 로그 1개
- 핵심 태스크 성공/실패 원인 정리 1개
- 개선 포인트 1개
- 다음 강의 연결 메모 1개
Python_Ansible-Playbook/
├── README.md
├── lecture01/
├── lecture02/
├── ...
├── lecture20/
├── ansible/
│ ├── inventories/
│ ├── playbooks/
│ ├── roles/
│ ├── group_vars/
│ ├── files/
│ └── stacks/
├── docs/
│ └── reference/
├── scripts/
└── archive/
└── legacy/
install_enabled=true검증 시 OS 저장소 패키지명 차이로 실패할 수 있습니다.- 클라우드 실습(OpenStack/AWS/Azure 비교)은 로컬 패키지 설치와 별도로 자격증명/네트워크가 필요합니다.
- 실패 로그를 남기고
README의 트러블슈팅 섹션과 함께 비교하면 학습 속도가 빨라집니다.
OpenStack + Ansible: 운영자가 원하는 상태를 playbook으로 선언하고, 여러 OpenStack 리소스를 반복 가능하게 표준화할 때 유리합니다.AWS + aws cli: AWS 서비스별 API를 즉시 호출해 빠르게 스크립트화하거나 CI에서 단일 작업을 제어할 때 유리합니다.Azure + az: Azure 리소스 그룹/구독 단위 운영을 CLI 중심으로 자동화하고 파이프라인과 연동할 때 유리합니다.
| 조합 | 자동화 방식 | 강점 | 약점 | 적합한 상황 |
|---|---|---|---|---|
| OpenStack + Ansible | 선언형(playbook, role) | 일관성, 재실행 안정성, 팀 표준화 | 초기 구조 설계 비용 | 사내 프라이빗 클라우드 운영 표준화 |
| AWS + aws cli | 명령형(스크립트/파이프라인) | 빠른 실험, 서비스 기능 접근 속도 | 스크립트가 커지면 유지보수 부담 | AWS 관리 작업의 빠른 자동화 |
| Azure + az | 명령형(스크립트/파이프라인) | 구독/리소스그룹 단위 관리가 직관적 | 대규모 반복 작업은 구조화 필요 | Azure 운영팀의 일상 작업 자동화 |
# OpenStack + Ansible
ansible-playbook -i ansible/inventories/local/hosts.ini lecture13/playbook.yml -e install_enabled=false
# AWS + aws cli
aws ec2 describe-instances --region ap-northeast-2
# Azure + az
az vm list -o table.github/workflows/docker-publish.ymlDockerfile.dockerignorescripts/sync_local_docker.sh
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN(Docker Hub Access Token)
DOCKERHUB_REPOSITORY: 미설정 시python-ansible-playbookENABLE_LOCAL_DOCKER_SYNC:true일 때 self-hosted runner에서 local docker 반영LOCAL_DOCKER_CONTAINER_NAME: 미설정 시python-ansible-playbookLOCAL_DOCKER_RUN_CMD: 미설정 시tail -f /dev/null
main브랜치 push(또는 수동 실행) 시 Docker 이미지를 빌드해 Docker Hub로 pushENABLE_LOCAL_DOCKER_SYNC=true이고 self-hosted runner(self-hosted,linux,docker)가 있으면 같은 워크플로우에서 최신 이미지를 pull하고 로컬 컨테이너를 재기동
IMAGE=docker.io/<dockerhub-user>/<repo>:latest \
CONTAINER_NAME=python-ansible-playbook \
./scripts/sync_local_docker.sh