31
DevOps – 코코코 코코코 코코코코 ver 2016.07.07 http://tunelinux.pe.kr 코코코

코드로 인프라 관리하기 - 자동화 툴 소개

  • Upload
    -

  • View
    2.419

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 코드로 인프라 관리하기 - 자동화 툴 소개

DevOps – 코드로 인프라 관리하기

ver 2016.07.07

http://tunelinux.pe.kr 문태준

Page 2: 코드로 인프라 관리하기 - 자동화 툴 소개

변경내용• 2016.7.7 http://wiki.tunelinux.pe.kr/x/-YEd DEVOPS 발표자료에서 “자동화 도구" 부분만 별도로 빼서 문서 업데이트함

• CM TOOL 비교 추가• AWS, Docker 추가

• 2015.10.27 : DevOps Tools 의 orchestration 일부 업데이트 및 ansible,saltstack 추가

• 2014.11.18 : 문서 작성 ( 원문서 이름 : DevOps 소개 )

Page 3: 코드로 인프라 관리하기 - 자동화 툴 소개

• Infrastructure as Code

• 이상적인 프로젝트• 버전관리 / 티켓관리 /CI/CD

• 프로비저닝 툴체인 : OS 설치

• 프로비저닝 툴체인 : 설정관리

• 프로비저닝 툴체인 : 오케스트레이션

• AWS

• Docker Ecosystems

• 참고자료

목 차

Page 4: 코드로 인프라 관리하기 - 자동화 툴 소개

Infrastructure as Code

•https://en.m.wikipedia.org/wiki/Infrastructure_as_Code

•Infrastructure as Code (IaC) is the process of managing and provi-sioning computing infrastructure (processes, bare-metal servers, virtual servers, etc.) and their configuration through machine-process-able definition files, rather than physical hardware configuration or the use of interactive configuration tools.

•The definition files may be in a version control system. This has been achieved previously through either scripts or declarative definitions, rather than manual processes, but developments as specifically titled 'IaC' are now focused on the declarative approaches.

•Infrastructure as Code approaches have become increasingly wide-spread with the adoption of cloud computing andInfrastructure as a Service (IaaS). IaC supports IaaS, but should not be confused with it.

Page 5: 코드로 인프라 관리하기 - 자동화 툴 소개

인프라 자동화 단계

Page 6: 코드로 인프라 관리하기 - 자동화 툴 소개

이상적인 프로젝트란 ?

출처 : “ 성공으로 이끄는 팀 개발 실천 기술"

• 티켓 관리 시스템에 이슈 등이 집약되어 있다• 버전 관리 시스템을 이용• 반복 검증 가능한 CI 시스템을 도입• 환경의 영향을 최소화하고 항상 배포 가능 상태로 둔다• 모두 기록해서 추적 가능하게 한다• 개발조직 뿐만 아니라 운영조직에도 필요함

Page 7: 코드로 인프라 관리하기 - 자동화 툴 소개

버전 관리•버전 관리 시스템이란 ?

•버전 관리 시스템의 역사와 분산 버전 관리 시스템의 도입•관리해야 할 것

• 소스 코드• 요건 정의서 , 설계서 등의 문서• 데이터베이스 스키마 및 데이터• 미들웨어 등의 설정 파일• 라이브러리 등의 의존 관계 정의• 시스템 설정 및 인프라

•브랜치 , 태그 등을 사용한 효율적인 개발

Page 8: 코드로 인프라 관리하기 - 자동화 툴 소개

티켓 관리•티켓 관리 시스템이란 ?•티켓 관리 시스템과 버전 관리 시스템의 연계

출처 : Jira 와 subversion 연동하여 이슈 처리

Page 9: 코드로 인프라 관리하기 - 자동화 툴 소개

지속적 통합 (Continous Integration)

•CI 란 ?• 통합이란 빌드 , 테스트를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시하는 것을

CI(Continuous Integration) 이라고 함•통합을 지속적으로 수행하는 것이 CI

• 원래 CI 는 애자일 개발 방법의 하나로 , 익스트림 프래그래밍 방법론으로 고안되었음 .• 가치 있는 소프트웨어를 고품질로 신속하게 전달하는 것을 목표로 하는 것• 애자일 개발 중에서도 가장 기본이자 핵심 방법론임 .• 통합 작업을 미루지 말고 개발 중에라도 실시해서 소프트웨어 개발의 복잡성을 제거하자는 것

•왜 CI 같은 방법론이 요구되는 걸까 ?• 비용 면에서의 이점• 시장 변화 속도• 속도와 품질 둘 다 확보

Page 10: 코드로 인프라 관리하기 - 자동화 툴 소개

지속적 통합 (Continous Integration)

•CI 에 필요한 것• 버전 관리 시스템 : subversion, Git• 빌드 도구 : make, Scons, Ant, Maven, Gradle, Rake, • 테스트 도구 : 테스트 주도 개발 프레임워크 , 행동 주도 개발 프레임워크 .

• 단위 테스트 (Unit Test), 통합 테스트 (Integration Test), 사용자 테스트 (User Acceptance Test), 회귀 테스트(Regressoin Test)

• CI 도구 : Jenkins, Travis CI

Page 11: 코드로 인프라 관리하기 - 자동화 툴 소개

배포 자동화 ( 지속적 전달 )

출처 : “ 성공으로 이끄는 팀 개발 실천 기술"

Page 12: 코드로 인프라 관리하기 - 자동화 툴 소개

배포 자동화 ( 지속적 전달 )

•배포 자동화의 이점• 작은 단위로 나누어 자주 배포하면 위험을 제어할 수 있음• 피드백을 빨리 받을 수 있다• 조직을 안정화 한다

•배포 자동화하기• 배포 자동화 기반 기술을 선택할 때는 개발자와 운영자 모두 공통으로 이용할 수 있는 것으로

해야 함• 개발부터 상용 환경에 배포하기까지 일관된 처리를 필요로 함• 배포 자동화시 공통으로 인식해야 할 것

• 모든 것을 버전 관리한다• 모든 환경을 같은 방법으로 구축한다• 배포 작업을 자동화하고 사전 검증을 한다• 반복 테스트한다 .

• 배포 파이프라인 : 애플리케이션 빌드 / 배포 / 테스트 / 배포라는 일련의 프로세스를 자동화 하는 것

• 자동화를 통해서 배포 속도를 가속화 : 속도와 정확도• 누구든지 배포할 수 있도록 하는 것 이 중요

Page 13: 코드로 인프라 관리하기 - 자동화 툴 소개

프로비저닝 툴체인

출처 : “ 성공으로 이끄는 팀 개발 실천 기술" 출처 : Web Ops 2.0: Achieving Fully Au-tomated Provisioning

Page 14: 코드로 인프라 관리하기 - 자동화 툴 소개

Automated Provisioning + Automated Lifecycle

출처 : http://dtosolutions.com/fully-automated-infrastructure/fully-automated-provisioning/

Page 15: 코드로 인프라 관리하기 - 자동화 툴 소개

프로비저닝 툴체인 - Bootstrapping

•Kickstart•Vagrant – 테스팅 환경에서 유용함 !!•Docker•Cloud 서비스

Page 16: 코드로 인프라 관리하기 - 자동화 툴 소개

프로비저닝 툴체인 - Configuration

•Puppet vs Chef vs Ansible vs Salt vs EtcTool Name Released by Method Approach

Ansible Tower Ansible Push Declarative & Imperative

CFEngine CFEngine Pull DeclarativeChef Chef Pull Imperative

Otter Inedo Push Declarative & Imperative

Puppet Puppet Pull Declarative

SaltStack SaltStack Push Declarative & Imperative

출처 : https://en.m.wikipedia.org/wiki/Infrastructure_as_Code

Page 18: 코드로 인프라 관리하기 - 자동화 툴 소개

– 프로비저닝 툴체인 Configuration - Puppet

https://forge.puppetlabs.com/

Page 19: 코드로 인프라 관리하기 - 자동화 툴 소개

– 프로비저닝 툴체인 Configuration - Foreman

출처 : http://theforeman.org/

•Foreman is a complete lifecycle management tool for physical and virtual servers. 

• Provisioning / Configuration / Monitoring• Support Puppet/Ansible/Saltstack and etc

Page 20: 코드로 인프라 관리하기 - 자동화 툴 소개

– 프로비저닝 툴체인 Configuration - 활용

출처 : “ 성공으로 이끄는 팀 개발 실천 기술"

Page 21: 코드로 인프라 관리하기 - 자동화 툴 소개

– 프로비저닝 툴체인 Orchestration•Capistrano : 병렬처리•Fabric : 직렬 / 병렬처리

• 순서가 필요한 경우 직렬 처리가 유용• 기타 : Func(Python) / Rex(Perl)•Jenkins : CI 도구이지만 배포 보조 도구로 활용 가능•Mcollective

• Ssh 대신 Publish Subscribe Middleware 기술 사용 ( 비동기 메시징 . MQ)

• 확장성이 용이하며 대규모 환경에서 사용 가능함 .•Rundeck : workflow 기능•Ansible/SaltStack : configuration + Orchestration

• SaltStack 은 zeromq 의 분산메시징 기술을 이용하여 성능 및 확장성을 높임 .

• 수작업으로 해야 한다면 ? ClusterSSH, Pssh, Dist, etc

Page 22: 코드로 인프라 관리하기 - 자동화 툴 소개

– 오케스트레이션 Mcollective

출처 : https://docs.puppetlabs.com/mcollective/reference/basic/messageflow.html

A : 노드 c 에 대한 정보 요청B : 전체노드에 브로드캐스트C : 모든 노드에서 메시지 받음D : 해당 머신 (c) 만 응답 보냄

Page 23: 코드로 인프라 관리하기 - 자동화 툴 소개

– 오케스트레이션 Saltstack

출처 : http://cy.cyworld.com/home/37141209/post/549F9EADB215773CBD468401

Page 24: 코드로 인프라 관리하기 - 자동화 툴 소개

– 오케스트레이션 Jenkins 와 Fabic 조합

출처 : “ 성공으로 이끄는 팀 개발 실천 기술"

• Fabic 실행을 Jenkins 슬레이브에서 실행함으로써 Fabic 실행 결과를 Jenk-ins 콘솔 로그로 남길 수 있음

• Fabric 은 원격 호스트 추가가 쉽고 코드로 관리할 수 있어서 버전 관리를 통한 본인 환경 검증 등 다양한 환경에서 동작시킬 수 있음

Page 25: 코드로 인프라 관리하기 - 자동화 툴 소개

– 오케스트레이션 workflow Rundeck 활용• 워크플로우 기능

• Workflow 정의 , 빌드 , 실행 관리 가능• Job 정의 -> 해당 팀에 job 넘겨줌

•사용용도• 표준 운영 프로시져 공유• 잡 스케쥴러• 빌드 후 자동화된 배포• 테스트 환경을 셀프서비스로 제공• 데이터 프로세싱

출처 : http://rundeck.org/

Page 26: 코드로 인프라 관리하기 - 자동화 툴 소개

CMDB

• 자동화된 인프라를 구축하기 위해서는 CMDB 관리가 중요함

• 인프라의 각 구성 요소별로 API 로 통신을 하거나 자동으로 처리할 수 있는 방법이 있어야 함

• 정보 흐름 통합

• HW – OS – 서비스 등 전체 과정에서의 정보를 통합적으로 관리

• OS install – OS – – – 설정 서비스 투입 반출 모니터링 등 각 단계별로 모든 정보를 중앙에서 관리

• 이 부분은 각 회사 , 조직별로 사용하는 프로그램 , 프로세스가 다를 것임

Page 27: 코드로 인프라 관리하기 - 자동화 툴 소개

AWS 인프라 구성 관리 솔루션

•AWS 인프라 구성 관리 솔루션 자료• http://

d0.awsstatic.com/aws-answers/AWS_Infrastructure_Configuration_Management.pdf 자료를 요약하였음

•AWS Resource Management• Inventory and Configuration Tracking

• AWS Config and Config Rules• AWS Config Partners

• Change Orchestration• AWS CloudFormation and AWS Service Catalog• HashCorp Terraform (https://www.terraform.io/)• AWS Elastic Beanstalk and AWS OpsWorks

•OS and Application Stack Management• AWS Managed Services : AWS Elastic Beanstalk and AWS OpsWorks• Third-Party Tools : Chef/Puppet/Ansible/Salt

• AMI 이미지 만들기• HashCorp Packer (https://www.packer.io)

Page 28: 코드로 인프라 관리하기 - 자동화 툴 소개

Docker Ecosystem•Docker and Containerization

• Docker / Rtk

•Service Discovery and Global Configuration Stores• Etc / consul / zookeeper / etc

•Networking Tools• Flannel / weave / pipework

•Scheduling, Cluster Management, and Orchestration• Fleet / Marathon / Docker Swarm / Mesos / Kubernetes / Rancher• Docker compose

Page 29: 코드로 인프라 관리하기 - 자동화 툴 소개

참고자료• 지속적인 전달 (Continuous Delivery)

• 신뢰할 수 있는 소프트웨어 출시• 성공으로 이끄는 팀 개발 실천기술 : 개발 , 버전관리 , 티켓관리 , 지속적

통합 , 배포 자동화 ( 지속적 전달 ), 회귀 테스트 / kickstart, puppet 류의설정관리 , capistrano 등의 오케스트레이션 을 골고루 다루고 있음

• 인프라를 코드로 관리하기• https://en.wikipedia.org/wiki/Infrastructure_as_Code• Infrastructure as Code

• http://shop.oreilly.com/product/0636920039297.do

• DevOps 소개 자료 : http://www.slideshare.net/ssuser2f0173/devops-41731364

Page 30: 코드로 인프라 관리하기 - 자동화 툴 소개

참고자료• 자동화된 인프라 구축

자동화된 인프라 : http://www.slideshare.net/ssuser2f0173/2009-49436077

Building an Automated Infrastructure (O’REILY Velocity 2008) :http://en.oreilly.com/velocity2008/public/schedule/detail/2238

Reliable, Repeatable, Reproducible Infrastructurehttp://sysadmin.miniconf.org/presentations08.html#02

Web Ops 2.0: Achieving Fully Automated Provisioninghttp://www.puppetlabs.com/wp-content/uploads/2010/03/FullyAutomatedProvisioning_Whitepaper7.pdf

Scalable System Operations (O’REILY Velocity 2012)http://velocityconf.com/velocity2012/public/schedule/detail/23605

Using Open Source to Provide Infrastructure Serviceshttp://blog.mague.com/?p=552

Page 31: 코드로 인프라 관리하기 - 자동화 툴 소개

질의 응답