Upload
ifunfactory-inc
View
2.962
Download
0
Embed Size (px)
Citation preview
춘추전국시대?
출처: https://ko.wikipedia.org/wiki/%EC%B6%98%EC%B6%94_%EC%8B%9C%EB%8C%80
출처: http://www.meetup.com/fr/Expatriates-in-Paris/events/101742722/
생존?
출처: 영화 Cast Away
다루는 것
• 여러 종류 클라우드를 통합 관리할 때
• 만났던 문제점과 해결책
다루지 않는 것
• 클라우드 섞어 쓰기 (하이브리드/인터 클라우드)
• 특정 클라우드 사용법
• (게임) 서버 만드는 법
춘추 전국 시대라고는 했지만...
AWS만 쓰면 안 되나요?
출처: Gartner: Magic Quadrant for Cloud Infrastructure as a Service, Worldwide 보고서, Lydia Leong 외, 2015년 5월 18일 발행
AWS > 10 × 14 다른 클라우드"AWS’s IaaS cloud is ten times larger than the next 14
competitors in the MQ combined!”
출처: http://www.networkworld.com/article/2925186/cloud-computing/gartner-amazon-s-cloud-is-10x-bigger-than-its-next-14-competitors-combined.html
그럼에도 불구하고 다른 클라우드가 필요한 이유?
지연시간
AWS vs. KT ucloud bizroun
d-trip 시
간 평
균 (ms)
0
12.5
25
37.5
50
ping -c 30
11.16 ms
40.466 ms
AWS Tokyo KT ucloud biz
AWS Tokyo → KT ucloud biz 게임 서버 랙 해결
실시간성 + 지연시간 서비스 지역의 클라우드 필요
다만 ...
가격
AWS vs. DigitalOcean
0
0.075
0.15
0.225
0.3
2 CPU,(3.75G/4G RAM),(별도/60G SSD) 4 CPU,(7.5G/8G RAM),(별도/80G SSD)
US$0.119
US$0.060
US$0.276
US$0.138
AWS DigitalOcean
다양한 클라우드를 쉽게 통합 관리하려면?
클라우드 통합 관리
• 서버 인스턴스 및 인프라 생성 및 설정
• 서버 인스턴스 환경 설정
• 서버 인스턴스에 애플리케이션 배포
자동화!
변하는 것/변하지 않는 것분리
변하는 것 / 변하지 않는 것
• 서버 인스턴스 및 인프라 생성 ✖ 클라우드 벤더마다 API 상이
• 서버 인스턴스 환경 설정 ✔ 운영체제가 같다면 클라우드 벤더에 독립적
• 서버 인스턴스에 애플리케이션 배포✔ 클라우드 벤더에 독립적
멀티 클라우드 사용 전략
• 서버 인스턴스 및 인프라 생성 → 벤더 API
• 서버 환경 설정 및 패키지 배포 → 단일화
다양한 클라우드 API동일한 인터페이스?
문제 #1
Apache Libcloudhttps://libcloud.apache.org
Apache Libcloud
• AWS, Azure, Google Compute Engine 등을 포함한30개 이상의 클라우드 서비스 지원
• KT ucloud biz 지원
• 공통된 기능은 같은 인터페이스로 제공해 편리
Libcloud 사용하면 OK?
클라우드 사업자 독자적기능을 지원하지 못 함
예 - AWS VPC
• AWS VPC(virtual private cloud) → 임의로 독립적인 네트워크 생성 → Isolation
• libcloud → VPC 생성/삭제 불가
예 - ucloud biz 로드밸런서
• libcloud 가 load balancer 인터페이스 제공
• ucloud biz 미지원
libcloud 만으로는 부족
클라우드 구성 방식의미묘한 차이
문제 #2
• AWS - 각 인스턴스에 security group 을 부착
• ucloud biz - 퍼블릭 IP 에 방화벽 룰 설정
예 - Access Control List
예 - 퍼블릭 IP 할당
• AWS - 인스턴스에 퍼블릭 IP 할당
• ucloud biz - 프로젝트에 퍼블릭 IP 를 할당하고 원하는 서버 인스턴스로 트래픽 포워딩
예 - 로드밸런서
• AWS - 별 다른 설정 없이 서버 인스턴스를 로드밸런서에 부착
• ucloud biz - 퍼블릭 IP 를 로드밸런서에 부착
생각보다 유사하지 않다
해결책 (#1, #2)
• 기반 클라우드에 대한 지식
• 벤더 독자 API 를 사용하되, 전체 구성은 통일
지원하는 서비스범위의 차이
문제 #3
한번은 이런 일도...
• 나: DigitalOcean 로드밸런서 서비스 연동해 주세요. (당연히 있겠거니...)
• JK: DigitalOcean 에는 로드밸런서 서비스가 없는데요?
• 나: 아. 네.
튜토리얼만 있을 뿐...
지원하는 서비스 차이
AWS ucloud biz DigitalOcean
Instance 제어 및 관리 ✔ (❨Opsworks)❩ ✘ ✘
로드밸런서 ✔ (❨ELB)❩ ✔ ✘
데이터베이스 ✔ (❨RDS)❩ ✔ ✘
캐시 서버 ✔ (❨ElastiCache)❩ ✘ ✘
당연히 AWS 가 제일 많다
다
AWS만의 기능을 쓰면편하지만...
• 고비용: 직접 설치해 사용할 때 보다 당연히 비싸다
• Lock-in: 특정 클라우드에 종속
특정 클라우드와죽어도 같이 죽고 살아도 같이 살기?
해결책 #3
가능한 범용적인 stack 사용로드밸런서, RDBMS 서비스 → 직접 구성 가능
해결책 #3
해결책 - 예
• DigitalOcean 로드밸런서의 경우
• 서버 인스턴스 생성 + HAProxy(소프트웨어 로드밸런서)
• API 는 동일하게 유지
• HAProxy 는 실제 운영중인 게임 서버에서 사용중(DNS RR 과 함께)
AWS (ELB)
ucloud biz 로드밸런서
DigitalOcean 서버
agent HAProxy
API 서버
create remove
add_instances remove_instances
…
서버, 인프라 다 띄웠으니.. 서버 환경 설정!
설정 자동화 도구 사용
설정 자동화 도구 사용하려면...
• 통합 관리를 위한 마스터 서버 설정
• 서버 인스턴스 추가→ 해당 도구의 에이전트를 설치/설정
• 에이전트와 마스터 서버가 정상 연결 → 모든 시스템 관리 작업은 마스터 서버를 통해 가능
에이전트 설치도 자동화
CloudInit http://cloudinit.readthedocs.org/
클라우드시스템 서버 인스턴스
user-data
서버 인스턴스 생성 시
부팅 과정에서 CloudInit 은 해당 user-data 에 따라
서버에 다양한 설정을 해준다
CloudInit 하는 일
• 패키지 저장소 추가
• 사용자 추가 / 삭제
• 최초 부팅 시 특정 커맨드 실행
• SSH key 설정
• 최초 운영체제 설치 시 필요한 작업 대부분
에이전트 설치 자동화
• 에이전트 설치 명령 + 마스터 서버 주소 설정 → user-data 생성
• 서버 인스턴스 생성 API 호출 시 user-data 전달
• 이후 모든 관리 작업은 마스터에서
간단하게 끝날 듯 했으나 ...
ucloud biz 에서 작동 안함
원인 및 해결
• CloudInit 벤더 제공 운영체제 이미지 설치 X
• 해결 : 수동으로 이미지에 CloudInit 을 설치→ 해당 이미지 사용
잘 작동하는 듯 하다가 ... 다시 문제 발생
원인 및 해결
• AWS 과는 달리,user-data 크기가 4KB 초과 되면 문제 발생
• 해결: 쓸데 없는 정보를 줄이고, 데이터를 압축 → cloud-init 압축 지원
이후행복했을까요?
간헐적으로 문제 발생
문제 및 해결책
• github 의 ucloud biz Python 라이브러리가 ‘/‘ 를 잘못 인코딩해서 발생한 문제
• API 인자에 ‘/‘ 가 들어가는 경우만 발생 (예: CIDR 주소: 0.0.0.0/0)
• user-data base64 인코딩도 url safe 인코딩으로 변경
교훈
• 라이브러리/도구가 있어도 잡다하게 신경 쓸 부분이 많다
• 충분히 써보기 전까지는 안 되는 거다
전체 그림
AWS
ucloudbiz
DigitalOcean
Rackspace
통합 API 서버
대시보드
마스터 서버
⋯
에이전트
요약
• 특정 클라우드와 동고동락하거나
• Libcloud 사용해서 제한된 기능만 사용하거나
• 벤더 API 는 활용하되, 통합된 시스템을 구성해서
• 다양한 클라우드를 편하게 사용합시다
감사합니다.