현재 Hybrid Cloud 환경(AWS, GCP, On-Perm)에서 Kubernetes 기반으로 MLaaS(Machine Learning as a Service) 프로젝트를 진행하고 있습니다. ~~대용량 분산 딥러닝 학습을 위해 클라우드 플랫폼을 도입하는 클라우드 초짜 학생이니 편하게 읽어주시면 감사하겠습니다 ㅎㅎ~~

Hybrid Cluster환경을 구성할 수 있는 방법은 2가지가 있을 것 같습니다.

  1. kubespray로 Public IP로 전체 노드 클러스트링후 하나의 클러스터 환경으로 관리.
  2. 각 클라우드 벤더마다 kubernetes 환경 구성, 클러스팅 후 kubernetes federation을 통해 전체 클라우드 관리.

1번을 통해 진행 했을 경우, 전체 클러스터가 네트워크 latency에 의해 불안정해질수도 있고, 더불어 LoadBalancer와 같은 Service Object를 실행 시 On-perm 환경에서 프로비져닝 불가능할 경우(이는 On-perm 환경에서 미리 사용자가 AWS ELB와 같은 환경을 구성해주어야 하기 때문...), 전체 클러스터가 죽어버리는.. 경우가 발생할 수 있습니다.

2번을 통해 클러스트링을 진행하려고 합니다. AWS에 Kubernetes 매니지먼트 서비스인 EKS가 있고, eksctl을 통해 쉽게 사용할 수 있습니다. 하지만, 시간당 0.2$ (한달로 계산하면 0.2 * 24 * 30 = 144$)이고, 또한 중간에 클러스터 중지를 못한다는 단점이 있습니다.

따라서 AWS내에서 Terraform을 통한 VPC 환경 설정 후 kubeadm을 통한 kubernetes 환경 설정을 진행해보도록 하겠습니다.

kubeAdm을 사용한 이유는 아래 두가지 입니다.

  1. kubespray가 Ansible기반으로 너어어무 느림
  2. kops는 자동 Auto Scaling Group 기능이 있어 EKS 마찬가지로 중간에 끄질 못함..(-.-)

깃허브 코드 리뷰는 친한 형 깃허브인 alicek106/aws-terraform-kubernetes를 참조하였습니다.

Terraform을 처음 접하시는 분들을 위해 테라폼(Terraform) 기초 튜토리얼을 소개시켜 드립니다.

더불어 VPC 환경 설정에 관련해서는 AWS VPC 설정하기이 많은 도움이 되었습니다.

Terraform은 다음과 같은 ubuntu16.04 Docker 환경에서 사용하도록 하겠습니다.