Top Banner
Mirantis OpenStack Deployment Automation Jeremy Jeon
37

Mirantis open stack deployment automation

Jan 13, 2017

Download

Technology

WooKyun Jeon
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mirantis open stack deployment automation

Mirantis OpenStackDeployment Automation

Jeremy Jeon

Page 2: Mirantis open stack deployment automation

INDEX

Puppet MCollective Fuel Provisioning and Deploying Flow

• Nailgun• Astute

Review Opinion Next (Provisioning Automation)

Page 3: Mirantis open stack deployment automation

Simple Fuel Architecture

Page 4: Mirantis open stack deployment automation

1. Puppet

Page 5: Mirantis open stack deployment automation

Puppet?

• Unix-like 및 Windows 기반 시스템상에서 System configura-tion 을 관리하고 자동화하기 위해 디자인된 Configuration Man-agement 도구• Puppet Labs 에서 개발을 주도하고 있으며 Ruby 로 작성

Page 6: Mirantis open stack deployment automation

The Puppet Advantage

• Manifest 를 한번만 작성하면 여러 장치에 중복 작업 없이 적용 가능• 모든 서버가 Manifest 를 기준으로 서로 동기화가 가능• Manifest 를 날짜 기준으로 신뢰성 있는 문서로 사용 가능• 다양한 운영체제 , 플랫폼 , 명령어 문법 등에 유연• Manifest 는 코드이기 때문에 버전 및 다른 코드 관리 방식이 적용

가능

Page 7: Mirantis open stack deployment automation

Puppet Language

• Manifest 는 System Configuration 을 표현하기 위해 Puppet 의 커스텀 언어로 작성• 이 언어는 Resource 라고 불리는 유닛을 정의하는데 , 이는 각

시스템의 사용자 , 파일 , 소프트웨어 패키지등을 기술함• Puppet 은 선언적인 프로그래밍 언어• Shell 이나 Perl 같은 다른 프로그래밍 언어들과 같이 수행 목록을

제공하지 않고 어떻게 작업이 되어야 하는지 (Should-be) 를 기술• Puppet 은 현재 서버의 상태를 Manifest 와 비교하고 불일치 되는

부분만 변경

Page 8: Mirantis open stack deployment automation

Puppet Code

RESOURCE { NAMEATTRIBUTE =>

VALUE}

Resource Defini-tion

Page 9: Mirantis open stack deployment automation

Resource Type

Custom Type

Page 10: Mirantis open stack deployment automation

Puppet Forge

Page 11: Mirantis open stack deployment automation

Resource Type Example

Page 12: Mirantis open stack deployment automation

2. MCollective

Page 13: Mirantis open stack deployment automation

MCollective?

서버 Orchestration 과 Parallel Job Execution 시스템을 위한 프레임워크

1. 작은 규모의 클러스터부터 큰 규모의 클러스터까지 Interaction2. 요청을 분산할 때 Broadcast 패러다임을 사용3. 리모트 에이전트를 콜하기 위한 심플한 CLI 환경을 제공4. Simple RPC Style 에이전트 , 클라이언트 지원5. 커뮤니티로부터 패키지 및 서비스 , 다른 공통 컴포넌트들을

관리할 수 있는 다양한 에이전트 지원

Page 14: Mirantis open stack deployment automation

Simple Components Diagram

Page 15: Mirantis open stack deployment automation

MCollective Server

• MCollective 를 통해 컨트롤 될 수 있는 노드를 의미• 바꿔말해 각각의 노드에 설치되는 MCollective 컴포넌트• mcollectived 라는 MCollective 데몬을 실행• 여러 에이전트 플러그인들이 설치 됨• mcollectived 데몬은 3 가지 플러그인을 사용

• A connector plugin: 미들웨어와의 연결 , 요청을 폴링 , 응답 전송• A security plugin: 요청들에 대한 검증 및 필터링 , 응답 인코딩• Several agent plugins: 요청에 대한 Action 실행

Page 16: Mirantis open stack deployment automation

MCollective Server

Page 17: Mirantis open stack deployment automation

MCollective Client

• 다른 노드들에게 요청을 전송하는 컴포넌트• Client 컴포넌트에서 사용하는 플러그인

• A connector plugin: 미들웨어와 연결하고 요청을 전송 , 응답 수신• A security plugin: 요청들을 인코딩• Several agent plugin DDL files: 유효한 요청들을 구성

• Client 가 Action 들을 요청할 때 Agent 들에서 어떤 Arguments들이 필요한지 알아야하는데 Client 는 DDL 파일을 이용해 유효한 요청을 구성

Page 18: Mirantis open stack deployment automation

MCollective Client

Page 19: Mirantis open stack deployment automation

Middleware

• Server 컴포넌트와 Client 컴포넌트는 직접 커뮤니케이션 하지 않음• Middleware 시스템은 MCollective 에서 지원하지 않음• 알맞은 Middleware 를 선정한 후 그에 맞는 Connector Plugin 를

구현• Default Middleware: ActiveMQ, RabbitMQ• Connector 와 Middleware 에서 처리하는 3 가지 주요 메세지

• Broadcast requests (client-to-server)• Directed requests (client-to-server)• Replies (server-to-client)

Page 20: Mirantis open stack deployment automation

Middleware

Page 21: Mirantis open stack deployment automation

MCollective CLI

Page 22: Mirantis open stack deployment automation

RPC Agent

DDL File

Ruby File

Page 23: Mirantis open stack deployment automation

3. Fuel Provisioning and Deploying Flow

Page 24: Mirantis open stack deployment automation

Fuel Master

• Service for network provisioning• Service for installing OS• Service for deploying OpenStack services

Page 25: Mirantis open stack deployment automation

Node Detecting Flow

Page 26: Mirantis open stack deployment automation

Node Detecting Flow

각 노드들이 PXE(Pre-boot eXecution Environment) 부팅을 하게 되면1. Fuel Master 노드에 있는 PXE 부트 서버의 Bootstrap

이미지로 부팅2. Bootstrap 이미지는 Nailgun agent 이라는 스크립트를 실행3. Nailgun-agent.rb 에이전트가 서버의 하드웨어 정보를 수집4. REST API 를 통해 Fuel Master 노드의 Nailgun 으로 전송5. Fuel UI 또는 CLI 를 이용해 Nailgun API 를 통해 확인 가능

Page 27: Mirantis open stack deployment automation

Nailgun

• Fuel 에서 가장 중요한 서비스 중 하나• 시스템의 모든 비즈니스 로직을 가지고 있는 RESTful

어플리케이션• Python 으로 작성• Environment 구성 , 설정 , Role, Node Detection, Node De-

ployment, 디스크 볼륨 설정 등 OpenStack 배포에 필요한 모든 데이터• 모든 설정 정보 및 노드 정보 , 상태 정보를 PostgreSQL 에 저장• Worker(Astute) 와는 AMQP 를 통해 커뮤니케이션• Fuel 웹 인터페이스와 CLI 툴을 통해 Nailgun API 와 연동

Page 28: Mirantis open stack deployment automation

Provisioning Flow (Next)

Page 29: Mirantis open stack deployment automation

Provisioning Flow (Next)

사용자가 Environment 설정을 하고 Deploy 버튼을 누르게 되면1. Nailgun 서비스에 의해 모든 Environment 설정정보가 담긴

JSON Data Structure 생성2. RabbitMQ 에 전송3. Astute worker 가 RabbitMQ 를 리스닝하고 있다가 메세지 수신4. Cobbler 와 MCollective 를 통해 각 노드에 OS 설치

Page 30: Mirantis open stack deployment automation

Astute

• Nailgun 의 Worker 역할을 하는 Fuel 컴포넌트• Provision 과 Deploy 를 하는 Orchestrator• Provision: Cobbler 를 이용해 각 노드들에 OS 를 설치• Deploy: MCollective 를 이용해 각 노드들에 OpenStack 을 배포

Page 31: Mirantis open stack deployment automation

Deployment Flow

Page 32: Mirantis open stack deployment automation

Deployment Flow

각 노드들에 OS 설치가 끝나면1. Astute 는 MCollective uploadfile 에이전트를 이용해서 각

노드들의 /etc/astute.yaml 에 배포에 필요한 데이터를 푸시2. Astute 는 MCollective puppetsync 에이전트를 이용해서

Puppet modules 과 manifests 를 동기화3. 이 에이전트는 마스터 노드의 rsyncd 서버와 연결하고 최신

버전의 Puppet modules 와 manifests 를 다운로드 하기 위해 rsync 프로세스를 실행

4. 동기화가 끝나면 Astute 는 puppetd 에이전트를 실행시켜 메인 manifests 의 site.pp 를 통해 실질적인 배포

Page 33: Mirantis open stack deployment automation

During Deploying

배포가 되는 동안• Astute 는 배포가 끝날 때 까지 배포가 종료되었는지의 상태와

Nailgun 으로 진행상태를 리포팅하기 위해 에이전트를 폴링• Puppet 포르세스가 성공이든 실패든 종료가 되면 Astute 는

노드로부터 Summary 를 생성하고 Nailgun 으로 결과를 리포팅• 이를 통해 사용자가 Fuel Web 인터페이스와 CLI 툴을 통해

진행상태와 결과를 모니터링 할 수 있게 되는 것

Page 34: Mirantis open stack deployment automation

4. Review

Page 35: Mirantis open stack deployment automation

5. Opinion

• MCollective 의 경우 추후 특정 기능을 추가한다던지 특정 정보를 추가를 가져와야할 경우 Agent / Client 개발이 빈번할 것으로 예상• Puppet 의 경우 Daou Cloud 만의 설정이 많아 질 것으로 예상되기

때문에 그에 따른 Custom Puppet 파일 (pp) 이 필요는 하겠지만 따로 추가적인 라이브러리 파일 (rb) 개발은 거의 없을 것으로 예상

Page 36: Mirantis open stack deployment automation

References

• Fuel Document (https://docs.fuel-infra.org/fuel-dev/index.html)• Fuel (https://wiki.openstack.org/wiki/Fuel)• Astute (https://github.com/openstack/fuel-astute)• MCollective (https://puppetlabs.com/mcollective)• Puppet 3 Beginner’s Guide

Page 37: Mirantis open stack deployment automation

감사합니다