저번실습 정리
관리자의 할 일
- 외부 네트워크 만들기
- Flavor 만들기(EC2 Instance Type)
사용자의 할 일
- 내부 네트워크 만들기(VPC 만드는 것과 동일하게 격리 단위임)
- Router 리소스 만들기(외부와 연결)
- 자신의 내부 네트워크 만들고 라우터와 연결
- 외부 인터넷 성공
- 보안 그룹 작성(SSH, HTTP, HTTPS, MYSQL 등등)
- Floating IP 생성
- AWS EIP와 동일
- 다만 지금 공인 아이피가 아닌 라우터를 통해 NAT 형태로 연결 즉 사설
- 실제 업무에서는 공인 아이피를 나눠주게 할 수 있음
- 이미지 생성
- 키 페어 생성
- 인스턴스 만들기
- Floating IP 할당
- 오브젝트 스토리지(S3와 같음)
이러한 일련의 과정을 매번 수동으로 웹 콘솔에서 구성하는 것은 시간이 오래 걸리고, 실수 가능성도 높다.
특히 같은 환경을 여러 번 구성해야 하거나, 팀원 간에 동일한 인프라를 구성해야 할 경우 자동화가 필요하다.
해결 방법: IaC (Infrastructure as Code)
IaC란?
인프라(서버, 네트워크, 볼륨 등)를 코드로 정의하여 자동으로 구성할 수 있도록 하는 방식
Terraform, CloudFormation, Ansible, OpenStack Heat 등이 대표적인 IaC 도구이다.
IaC의 장점
- 재현성: 동일한 환경을 언제든 똑같이 구성 가능
- 버전 관리: Git으로 인프라 변경 사항 추적 가능
- 자동화: 사람의 개입 없이도 리소스를 일괄적으로 생성
- 협업: 코드 기반으로 팀 단위 작업 가능
OpenStack의 IaC 도구: Heat
OpenStack에서는 Heat이라는 오케스트레이션 도구를 제공한다.
AWS의 CloudFormation과 유사하며, YAML 기반의 Heat 템플릿(Hot Template) 으로 인프라를 정의한다.
Heat로 할 수 있는 일
- 인스턴스, 볼륨, 네트워크, 보안 그룹 등 자동 생성
- 복잡한 인프라를 스택(Stack) 단위로 묶어 관리
- 삭제 시 의존성에 따라 깔끔하게 정리
실습 목표
이전 실습에서 일일이 웹 콘솔로 구성했던 환경을
이번엔 Heat 템플릿을 통해 VM을 만들어 보면서
기존의 네트워크에 연결해볼 것이다.
실습
템플릿을 직접 yaml 파일로 작성해도 된다.
하지만 더 간편하게 만드는 툴이 포함되어있다.
이렇게 탬플릿 생성기를 통해 원래 VM을 만들듯이 만들면 해당 설정에 맞는 템플릿을 받을 수 있다.
이 템플릿을 재사용해 만들 수 있다.
템플릿의 버전을 선택하고 생성 가능
heat_template_version: "2021-04-16"
description: "version 2017-09-01 created by HOT Generator at Thu, 29 May 2025 01:18:56 GMT."
resources:
Server_2:
type: "OS::Nova::Server"
properties:
security_groups:
- "790315d5-9b2f-4a36-bf08-6c3e46c2d392"
networks:
- subnet: "59802550-6005-4bbb-8a67-63bab687f51f"
name: webserver
flavor: "m1.micro"
image: "4803a285-10cf-455e-9a9f-98ac5901ec10"
availability_zone: nova
key_name: "os-key"
스택 생성 완료
하지만 인스턴스 템플릿에는 볼륨을 추가하지 않았다. 하지만 잘 부팅이 된다.
왜 그럴까? → 이때 임시 볼륨이 만들어져서 그 곳에 OS가 설치되기 때문이다.
휘발성 볼륨 즉 Ephemeral Volume 인스턴스 스토어와 같은 것
DB 서버 + 볼륨 연결
heat_template_version: "2021-04-16"
description: "boot from pre-created volume"
resources:
Volume_1:
type: "OS::Cinder::Volume"
properties:
name: "db-root-boot"
size: 10
volume_type: "826c86ec-fe27-4b5c-80fc-8ac824d0078e"
image: "6e6ec1c2-58f3-40c2-9c66-0a5fbbda77bd" # 올바른 방식
availability_zone: nova
Server_1:
type: "OS::Nova::Server"
properties:
name: dbserver
flavor: "m1.micro"
availability_zone: nova
key_name: "os-key"
security_groups:
- "9c5b5798-4e2f-4329-9449-057976e42d5d"
networks:
- subnet: "59802550-6005-4bbb-8a67-63bab687f51f"
block_device_mapping_v2:
- volume_id: { get_resource: Volume_1 }
boot_index: 0
device_name: vda
delete_on_termination: true
여기서는 순서가 중요
볼륨이 먼저 만들어지고 서버가 만들어져야 함 OS를 담아야 하니까
마무리
반복적이고 수동적인 인프라 구성을 개선하기 위해, IaC(Infrastructure as Code) 개념을 도입하여
OpenStack의 오케스트레이션 도구인 Heat를 사용해 템플릿 기반 자동화 배포를 수행햇다.
- 복잡한 자원 생성을 YAML 코드 한 장으로 정의하고
- 여러 번 재사용 가능한 구조로 만들고
- 인스턴스, 볼륨, 보안 그룹, 네트워크 등 다양한 리소스를 자동 생성했다.
이제까지는 오픈스택이 설치된 VM은 NAT 방식으로 통신했다.
다음 실습부터는 조금 더 실무와 가까운 방식인 Bridge 방식으로 VM을 새로 만들어 실습해보겠다.
'공부일지 > 클라우드 SA 교육' 카테고리의 다른 글
[Openstack] Bridge 방식의 Openstack (0) | 2025.06.03 |
---|---|
[8주차] 주간 회고 (2025.05.26 ~ 06.01) (0) | 2025.06.03 |
[Openstack] 사용자 관점에서 VM 생성 및 네트워크 설정 실습 (2) | 2025.06.01 |
[Openstack] 웹 콘솔(Horizon)에서 관리자가 할 일 (0) | 2025.05.31 |
[Openstack] 개념 및 설치 (0) | 2025.05.29 |