Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Container 가상화를 이용한 Micro Service 설치 및 운영 자동화 (Ansible + Rancher + Docker)

3,097 views

Published on

마이크로 서비스 기반의 서비스를 개발하는 단계가 끝나게 되면, 이를 실제로 다양한 고객사 환경에 설치 및 운영하는 단계가 지속적으로 발생하게 되는데.. 이게 참 너무나도 다양한 변수가 많아서 생각보다 많은 시간과 노력이 필요하다. 이래서 DevOps를 적용하는 것이 정말 필요하다고 생각된다.

그래서, 이번에 개발된 웹서비스(마이크로서비스 구조)를 초기 설치 부터 운영까지 최대한 사람의 개입없이 자동화 하는 방안을 적용해 보기로 했다.
다양한 오픈소스 도구(ansible, rancher, docker)를 기반으로 전체 설치/운영 프로세스를 자동화 하고, 코드로 관리하여 사람의 실수를 최대한 방지하도록 설계하였다.

http://blog.naver.com/freepsw/221058337688 참고

Published in: Software

Container 가상화를 이용한 Micro Service 설치 및 운영 자동화 (Ansible + Rancher + Docker)

  1. 1. Container 가상화를 이용한 Micro Service 설치 및 운영 자동화 (Ansible + Rancher + Docker ) 2017.06 freepsw
  2. 2. 드디어 서비스 개발이 끝났다! 그럼 이제부터는?
  3. 3. 우리가 배포할 서비스는? 다양한 Hadoop Eco와 연동하는 확장 가능한 Micro Service API • 서비스 장애 복구 자동화 • 서비스 로드밸런싱 제공 • 서비스 확장성(Scale up / down) 제공 • 모듈별 독립적인 배포 (Web + DB) • 서버(host)의 변경에 따른 영향도 최소화 Micro Service Hadoop Eco • 대용량 Computing을 위한 용도 • 필요시 MR or Spark job을 실행후 종료 (EMR like) • 동적인 배포 및 종료기능 제공 • 데이터 보관용이 아님
  4. 4. 솔루션 개발 완료 후… 해야할 일들 단계별로 서비스 배포 및 운영에 필요한 작업들이 존재함 운영환경 설정 서비스 모듈 배포 서비스 확장 서비스 업데이트 서버 증설 OS별 library 및 util 설치 - java, python 등 서비스 로드 밸런싱 서비스 자동 복구 서비스 configuration 설정 서비스 재 배포 서비스 설정 변경
  5. 5. 처음 배포할 서버가 할당 되면? 모든 서버에 서비스 설치에 필요한 환경 구성 (java, python …) 운영환경 설정 서비스 모듈 배포 서비스 확장 / 업데이트 SDK 버전 및 경로 “ 예상되는 상황들… “ Human Error 발생 • Java version 별도 관리 • Java home 별도 관리 • Python & ruby도 동일 • 설정파일 copy & paste 오류 • 일부 작업 누락 등 • 에러가 발생하기 전 까지 인지 하지 못함! 서버 대수만큼 작업시간 증가 • Yum을 통한 sw 설치 • USER 생성 • SSH connection 설정 • Bash_profile 변경
  6. 6. 서비스를 안정적으로 배포 & 운영 하려면? 독립적인 운영환경을 제공하고, 부하분산 및 자동 Fail over 등이 필요 운영환경 설정 서비스 모듈 배포 및 실행 서비스 확장 / 업데이트 서버별 상이한 환경 “ 예상되는 상황들… “ 부하분산을 위한 설정 필요 • SDK_HOME PATH • 디렉토리 구조 • 가용 Memory 및 CPU Core • HAProxy를 이용한 분산 • L4 Switch 등을 이용한 부하분 산 (Infra팀과 사전 협의 필요) • 부하분산을 위한 정책 필요 서버 대수만큼 작업시간 증가 • 서비스 설치파일 복사 • 압축해제 및 경로 지정 • 설정파일(config) 변경 • 서비스 실행 (의존성에 따라 순차 실행) Auto Fail-over 방안 필요 • Crontab + shell을 이용하여 process를 모니터링하고, • 장애시 재시작하는 스크립트 작성 등의 운영관리 정책 필요
  7. 7. 서비스 설치 이후에는? 솔루션 업데이트, 서버변경/확장에 따른 배포관리 운영환경 설정 서비스 모듈 배포 및 실행 서비스 확장 / 업데이트 서비스 업데이트 “ 예상되는 상황들… “ 서버 변경/확장 • 기능 추가 및 버그 패치 • 배포된 서버환경에 따라 업데 이트 진행 • 파일 업데이트 > 환경 설정 > 기존 서비스 중지 > 신규서비 스 재시작 • Human Error 가능성 높고, • 서버 대수에 따라 작업시간 증 가 • 초기 운영환경 설정에 필요한 작업을 반복
  8. 8. 앞으로 이런일이 생기지 않을까? 사이트가 증가하고, 서비스 버전이 업데이트되고… 사이트별로 설치/응대 할 담당자가 할당되고… 그런데 우리는 전담 운영조직이 없다.
  9. 9. 서비스를 효율적으로 배포하고, 안정적으로 운영할 방법이 필요하다.
  10. 10. 그래서, 이런 오픈소스를 활용했다. 최대한 자동화하고 최소의 노력으로 배포/운영할 수 있도록 하자
  11. 11. Ansible은 무엇을 도와주나? • 서버별로 반복되는 작업을 실수없이 실행 • 서버 대수와 상관없이 한번의 클릭으로 설치하 여 생산성 향상 • 사이트별로 다른 환경설정 관리를 통해 작업자 의 시행착오 최소화
  12. 12. Docker는 무엇을 도와주나? • 사업별 서버환경과 서비스 배포환경을 분리하 여 단일화된 배포관리로 생산성 향상 • 도커 이미지를 이용하여 서비스 업데이트 절차 단순화 (기존 : 파일복사 à 수정 à 실행) • 서비스 장애 발생시 문제해결을 위한 접근이 단순함(기존 서버환경과 분리) à 생산성 향상
  13. 13. Rancher는 무엇을 도와주나? • 서비스 운영을 위한 Load balancing, Fail over 등을 제공하여 서비스 안정성 강화 • 운영환경 변화(서버 변경/삭제)에 따른 서비스 배포가 단순하여 작업시간 최소화 • 다양한 hadoop eco 클러스터를 클릭한번으로 설치 가능 (작업시간 최소화)
  14. 14. 그래서 이렇게 했다. Ansible로 서버설정을 하고, docker기반의 rancher로 서비스 운영 운영환경 설정 서비스 모듈 배포 서비스 확장 서비스 업데이트 서버 증설
  15. 15. 무엇이 개선될까? (초기 설치 자동화) 일부 자동화된 Shell script 방식을 완전 자동화된 방식으로 변경 기존 방식 서버 환경설정 • User & 작업공간 생성 • SSH 설정 • SDK 설치 • User Env 설정 솔루션 설치 • File 복사 및 압축해제 • 솔루션 config 변경 • 솔루션 순차 실행 • 정상 동작여부 확인 서버 대수 만큼 반복 개선 작업 정의 • 서버 환경설정 • 솔루션 배포 작업 실행 (1회) • 정의된 작업 실행 (등록된 서버 갯수만큼)
  16. 16. 무엇이 개선될까? (서비스 안정성 보장) 서비스 부하분산, Fail over, 쉬운 upgrade를 지원해야 한다 기존 방식 Load balancing • Haproxy 등 설치 및 설정 Fail over • 솔루션 모니터링을 위한 별도 process 설치 • 서버 중지시 재시작 서버 변경시 설정 변경 개선 Load balancing & Fail over • Rancher에서 container명칭으로 분산관리 • Container 중지시 자동 재시작 Upgrade • 정의된 upgrade 작업 실행으로 rolling upgrade 가능 Upgrade • File 복사 및 압축해제 • 서비스 config 변경 • 서비스 순차 실행 및 정상 동작여부 확인 서버 대수 만큼 반복
  17. 17. 그래서 실제 어떤 작업을 했는지 보자
  18. 18. 작업 실행 작업 실행 작업서버 들작업서버 들 우리가 자동화한 작업들은… (1/2) Ansible로 서버설정을 하고, docker기반 rancher로 서비스 운영 Rancher Server HostsUser 작업 Task.1 작업 실행 작업 실행작업 Task.2 • OS 별 User 및 ssh 설정 • Docker 설치 • 서비스 모듈 복사 및 설정 • Docker image 생성 Rancher server 실행 작업 실행 • Rancher Server 설치 • Rancher-server 와 host 간 ssh 설정 작업 Task.3 • Docker image load • Rancher host 생성 작업 실행 작업 실행 작업 실행 SSH SSH SSH
  19. 19. 작업 실행 작업 실행 작업서버 들작업서버 들 우리가 자동화한 작업들은… (2/2) Ansible로 서버설정을 하고, docker기반 rancher로 서비스 운영 Rancher server HostsUser 서비스 배포 작업 실행 • 웹서비스 배포 • Load balancer 실행 • Mariadb 실행 • 웹서비스 실행 작업 실행 작업 실행 작업 실행 Hadoop 배포 작업 실행 • Namenode 설치 • YARN resource manger • Job history server • Data node 설치 작업 실행 RANCHER API RANCHER API
  20. 20. Ansible을 이용한 작업들
  21. 21. 좀 더 자세히 보면, Ansible을 이용해서… 기존 서버환경별로 작성했던 command line들을 서버 대수 만큼 반복
  22. 22. 좀 더 자세히 보면, Ansible을 이용해서… Role 별로 분리하여 자동화할 절차를 관리하고 [SSH 설정] [솔루션 설치파일 및 docker 배포] [Rancher 서버 구동 및 host등록]
  23. 23. 좀 더 자세히 보면, Ansible을 이용해서… 각 role에 대한 세부 task를 정의하여 서버별 설치를 자동화 한다 ⋅⋅⋅
  24. 24. 좀 더 자세히 보면, Ansible을 이용해서… 각 role별로 구성한 ansible 자동화 스크립트 (예시) [SSH 설정] [솔루션 설치파일 및 docker 배포] [Rancher 서버 구동 및 host등록]
  25. 25. 좀 더 자세히 보면, Ansible을 이용해서… 각 role별로 구성한 ansible 자동화 스크립트 실행하기
  26. 26. Docker & Rancher를 이용한 작업들
  27. 27. 27 Why Rancher? https://stackshare.io/stackups/kubernetes-vs-rancher-vs-docker-swarm
  28. 28. 28 Why Rancher?
  29. 29. 29 Rancher 아키텍처 Rancher supplies the entire software stack needed to manage containers in production.
  30. 30. 좀 더 자세히 보면, Rancher을 이용해서… 정의된 서비스 및 Hadoop cluster를 API로 쉽게 구성 Rancher cluster REST API API를 이용한 Service 생성 Script IP IP Rancher 에서 service 배포
  31. 31. 좀 더 자세히 보면, Rancher을 이용해서… API 요청에 따라 rancher에서 Service 배포 • Data를 관리하는 MariaDB가 설치되었고, 3306 port를 외부에 오픈 • Mirco Service용으로 구성된 vert.x web service가 2개 배포되었다. (외부에 공개된 port는 없음) • Load Balancer 서비스를 실행하여 vert.x 서비스로의 부하분산을 처리한다. (7070 port로 오픈)
  32. 32. 좀 더 자세히 보면, Rancher을 이용해서… 배포된 서비스의 scale up & down • “Scale”의 숫자를 수정하여 쉽게 서비스를 확장(scale up) 하거나, 축소(scale down) 가능 서비스 확장
  33. 33. 좀 더 자세히 보면, Rancher을 이용해서… 배포된 서비스의 Log를 모니터링 • 현재 동작중인 container의 로그를 바로 확인하여, 프로세스의 상태 및 오류를 체크할 수 있음 서비스 확장
  34. 34. 좀 더 자세히 보면, Rancher을 이용해서… 배포된 container에서 사용하는 자원 현황을 모니터링 • CPU, Memory, Network, Storage 등의 container에서 사용중인 자원 현황을 조회 가능
  35. 35. 좀 더 자세히 보면, Rancher을 이용해서… 다양한 OSS를 ”Click”만으로 서비스로 배포 가능
  36. 36. 좀 더 자세히 보면, Rancher을 이용해서… Hadoop 설치 • Hadoop 설치에 필요한 기본 설정들을 사용자가 정의 • 다양한 설정을 변경하려면, • 해당 container의 dockerfile을 확인하고, • 외부에서 ENV로 설정할 수 있는 configuration에 값을 변경 Click
  37. 37. 좀 더 자세히 보면, Rancher을 이용해서… • Hadoop 설치에 필요한 기본 설정들을 사용자가 정의 • 다양한 설정을 변경하려면, • 해당 container의 dockerfile을 확인하고, • 외부에서 ENV로 설정할 수 있는 configuration에 값을 변경 Hadoop cluster가 구성된 결과를 Web에서 확인 • Image를 다운받는 속도를 제외하면, Hadoop cluster 배포에 약 1분 이하면 된다.!!
  38. 38. 서비스가 배포된 아키텍처는? Container간 연결로 외부접근을 차단하고, 필요한 서비스만 노출하여 부하를 분산하는 구조 Rancher server 사용자 Rancher HostsRancher Hosts Rancher Hosts Web App #1 Web App #2 Web App #3 MariaDB #1 Load balancer Rancher Hosts Rancher Hosts Namenode #1 DataNode #2 DataNode #1 Service STACK Hadoop STACK
  39. 39. Ansible + Rancher + Docker 생각보다 괜찮다!
  40. 40. 무엇이 괜찮았나? • Ansible로 서비스 배포를 위한 사전환경을 구성하고 • Rancher API로 배포하는데 사용자 작업이 거의 없음 • Rancher의 사용자 친화적인 UI & API를 이용하여, 빠르고 안정 적으로 docker기반 서비스 운영 가능 • Rancher의 Catalog 서비스로 OSS 배포가 가능하여, 작업 생산 성 향상 (Hadoop, Spark 등)
  41. 41. 앞으로 어떤걸 더 개선하면 좋을까? • Jenkins와 같은 CI도구와 연동하여, • Test를 통과한 Solution package를 rancher를 통해 업그레이드
  42. 42. 앞으로 어떤걸 더 개선하면 좋을까? • 운영자를 위한 web service를 구성하여, • UI를 통하여 설치 & 배포 à 운영 생산성 향상 Web App • Ansible 설정값을 Web UI에서 설정 • Web에서 ”Install & Deploy” 실행 • Web에서 넘겨받은 파라미터로 • 서버에 접속하여 설치 자동화 • Service 배포
  43. 43. 실제 작업한 코드들은? Github에 쉽게 따라할 수 있도록 설치가이드 및 코드를 정리 https://github.com/freepsw/ansible-rancher-docker-deploy
  44. 44. END

×