이전 과정에서는 application과 그의 environment, dependencies를 결합하는 도구로 Docker container를 배웠다. 확장 가능한 웹 애플리케이션을 구축하는 다음 단계는 클라우드에 컨테이너를 구축하는 것이다. 그러나 단일 컨테이너를 배치하는 것만으로는 충분하지 않다 - 또한 컨테이너의 확장 방법을 지정해야 한다.
Scaling을 관리하기 위해서는 - spinning up new container instances and shutting them down as they are no longer needed - container orchestration service를 사용하게 될 것이다. Container orchestration(컨테이너 조정)을 위한 몇 가지 옵션이 있으며, 우리는 Kubernetes에 초점을 맞출 것이다.
Application의 프로덕션 파이프라인을 정리(round up)하기 위해 변경이 발생했을 시 코드를 작성, 테스트 및 배포하는 프로세스를 자동화하는 몇 가지 도구에 대해 배울 것이다. 변경 발생시 자동으로 코드를 빌드하고 테스트하는 것을 continuous integration이라고 한다. 자동 배포(automated deployment)와 결합된 continuous integration을 continuous delivery라고 한다.
In this lessons, you will:
단일 컨테이너에서 애플리케이션을 실행하는 것만으로 containerization의 힘을 완전히 활용했다고 할 수 없다. 컨테이너를 사용하는 주요 장점 중 하나는 horizontal scaling(수평적 확장), 즉 수요에 맞게 컨테이너 인스턴스들을 늘리거나 줄일 수 있는 확장 용이성에 있다. 같은 images의 여러 copies를 한번에 실행하고 수요가 증가함에 따라 확장하며 같은 머신에서 running multiple cointainer들을 보다 전반적으로 관리하는 기능은 container orchestration tools의 기능 중 하나이다.
Orchestration 플랫폼들은 여러 컨테이너들의 배포 및 확장을 자동화한다. Kubernetes는 이런 종류의 가장 유명한 플랫폼 중 하나이다.
Pods는 지속적이지 않으므로, application과 communicate하기 위한 지속적인 방법을 갖기 위하여 service라고 불리는 higher-level abstraction이 제공된다. 이것은 pods의 집합을 정의하고 그들과 communicate하기 위한 방법을 제공한다. 또한 데이터를 저장하기 위한 persistent way로 volumes이 pods에 attached된다.
이번 강의에서는 AWS EKS, AWS service들과 주로 command line interface를 통해서 interacti 할 것이다. 그 중 awscli는 official AWS command line tool이다.
이 도구를 사용하면 EKS뿐만 아니라 다양한 AWS 서비스와 상호 작용할 수 있다. EKS 서비스를 생성하거나 수정하는 aws 명령이 있지만 다른 옵션을 사용하는 것보다 훨씬 수동적인 접근 방식이다.
aws configure
with the keys from above to setup your profile.aws configure list
.aws s3 ls
. This will show all of the S3 buckets in your account.This is a command line tool which greatly simplifies EKS cluster creation.
이 도구를 사용하면 kubernetes 클러스터에 대해 명령을 실행할 수 있다. 모든 관련 자원을 처리할 수 있기 때문에 command line을 통해 클러스터를 작성하거나 삭제하는 데 가장 적합한 도구이다.
This is a command line tool for interacting with Kubernetes clusters. 이 도구는 존재하는 cluster와 상호작용 하는데에 사용된다. 클러스터 생성 및 삭제에는 사용될 수 없다.
eksctl create cluster --name eksctl-demo
eksctl
is using region us-west-2
, you’ll need to set the region to “US West (Oregon)” in the dropdown menu in the upper right of the console.kubectl get nodes
eksctl delete cluster eksctl-demo
.Continuous delivery가 build test, deployment process의 대부분을 자동화하면서 더 자주, 큰 노력이 들지 않는 배포가 가능해졌다. 이것은 빈도 높은 release로 더 빠른 customer feedback이 가능하게 한다.
코드파이프라인(CodePipeline)은 AWS에서 제공되는 완전히 관리되는 continous delivery service이다. 그것은 당신의 own resource processes를 파이프라인으로 정의할 수 있게 해준다. CodePipeline 콘솔 또는 AWS command line tool을 사용하여 직접 파이프라인을 생성할 수 있다. Pipeline은 GitHub 또는 변경사항과 같은 코드 저장소를 또는 변경사항을 감시하고 이러한 변경사항은 파이프라인이 작동하도록 유발한다.
파이프라인은 stage들로 이루어져 있으며 각 stage 사이에는 전환(transition)이 있으며 코드 등이 전해지는 곳이다. Stages는 하나 이상의 action으로 구성된다. watch repository가 무엇인지, 빌드 및 테스트가 어떻게 실행되는지, 배포가 어떻게 수행되어야 하는지를 정의하는 다양한 작업 유형과 승인 옵션이 있다.
위의 Codepipeline 이미지를 보면, 첫 번째의 source action은 코드 소스를 S3 버킷으로 정의하는데 사용한다. 두 번째 단계는 두 가지 행동이 있다. 첫 번째는 코드를 작성하고 두 번째는 준비 환경(staging environment)에 배포한다. 마지막 단계는 생산 환경(production environment)에 배치하기 전에 approval action를 취한다. In between the stages are the transitions which pass along code and/or build artifacts.
Continuous delivery의 중요한 부분은 continous interation이다. Continuous delivery는 기본적으로 deployment와 approval stages가 추가된 continuous integration이다. CI의 motivation은 작은 코드 변화들을 더 자주 확인할 수 있다면 개발 과정의 더 이른 단계에서 버그들을 발견할 수 있다는 것이다. Codebuild는 AWS에서 제공되는 완전히 관리되는 continuous integration service이다. 이것은 테스트를 실행하고 코드를 컴파일할 수 있고 배포가 가능한 패키지를 만들 수 있으며 code pipeline stage에 action으로 추가될 수 있다.