Deployment

rang-dev·2020년 3월 25일
0

Deployment

Introduction

이전 과정에서는 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:

  • Learn how to deploy a containerized app using AWS' Kubernetes service: EKS
  • Create a continuous delivery pipeline with AWS CodePipeline.
  • Set up continuous integration with AWS CodeBuild.

Kubernetes

단일 컨테이너에서 애플리케이션을 실행하는 것만으로 containerization의 힘을 완전히 활용했다고 할 수 없다. 컨테이너를 사용하는 주요 장점 중 하나는 horizontal scaling(수평적 확장), 즉 수요에 맞게 컨테이너 인스턴스들을 늘리거나 줄일 수 있는 확장 용이성에 있다. 같은 images의 여러 copies를 한번에 실행하고 수요가 증가함에 따라 확장하며 같은 머신에서 running multiple cointainer들을 보다 전반적으로 관리하는 기능은 container orchestration tools의 기능 중 하나이다.

Orchestration 플랫폼들은 여러 컨테이너들의 배포 및 확장을 자동화한다. Kubernetes는 이런 종류의 가장 유명한 플랫폼 중 하나이다.

Kubernetes Concepts

  • Cluster: Kubernetes를 실행하는 머신들의 집합
  • Master: Kubernetes cluster를 제어하는 시스템. 당신이 cluster와 communicate할 때 주로 master와 interact할 것이다. Master는 api, scheduler, management demon을 포함한다.
  • Nodes: Cluster안에 있는 머신들. 이것은 virtual, physical 또는 둘의 결합이 될 수도 있다.
  • Pods: Single deployment of a containerized application. 이것은 container, 그것의 storage resource, unique IP address로 구성된다. Pods는 지속적이지 않으며 확장동안에 master에 의해 늘어나거나 줄어들 수 있다.
  • Service: An abstraction for communication with a set of pods.

Pods는 지속적이지 않으므로, application과 communicate하기 위한 지속적인 방법을 갖기 위하여 service라고 불리는 higher-level abstraction이 제공된다. 이것은 pods의 집합을 정의하고 그들과 communicate하기 위한 방법을 제공한다. 또한 데이터를 저장하기 위한 persistent way로 volumes이 pods에 attached된다.

EKS: Kubernetes as a managed service on AWS

Amazon Elastic Kubernetes Service(EKS)

  • A managed Kubernetes service
    • cluster를 설정하는 복잡함이 사라진다. Amazon이 클러스터 제어를 관리하여 제어 노드가 정상적으로 작동하는지 자동으로 확인한다.
  • Control layer runs the master system
    • EKS는 master system을 관리하기 위해 control layer를 사용한다.
  • You only setup Nodes, Pods, and Services
  • Multiple availability zones
    • 만약 하나의 zone에 문제가 생겨도 application을 중단하지 않는다.
  • Securing networks are set up automatically

AWSCLI

이번 강의에서는 AWS EKS, AWS service들과 주로 command line interface를 통해서 interacti 할 것이다. 그 중 awscli는 official AWS command line tool이다.

이 도구를 사용하면 EKS뿐만 아니라 다양한 AWS 서비스와 상호 작용할 수 있다. EKS 서비스를 생성하거나 수정하는 aws 명령이 있지만 다른 옵션을 사용하는 것보다 훨씬 수동적인 접근 방식이다.

Try awscli

  • Generate keys at the IAM console.
  • Run aws configure with the keys from above to setup your profile.
  • Check that your profile is set: aws configure list.
  • To test you installation, try listing your S3 buckets: aws s3 ls. This will show all of the S3 buckets in your account.

eksctl

This is a command line tool which greatly simplifies EKS cluster creation.

이 도구를 사용하면 kubernetes 클러스터에 대해 명령을 실행할 수 있다. 모든 관련 자원을 처리할 수 있기 때문에 command line을 통해 클러스터를 작성하거나 삭제하는 데 가장 적합한 도구이다.

kubectl

This is a command line tool for interacting with Kubernetes clusters. 이 도구는 존재하는 cluster와 상호작용 하는데에 사용된다. 클러스터 생성 및 삭제에는 사용될 수 없다.

Creating an EKS Cluster

  • Create the cluster: eksctl create cluster --name eksctl-demo
    • 이름을 지정해주지 않으면 random name으로 설정된다.
  • Go to the CloudFormation console to view progress. If you don’t see any progress, be sure that you are viewing clusters is the same region that they are being created. For example, if 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.
  • Once the status is ‘CREATE_COMPLETE’, check the health of your clusters nodes: kubectl get nodes
  • From the CloudFormation console, select your stack and choose delete from the actions menu, or delete using eksctl: eksctl delete cluster eksctl-demo.

CodePipeline

Continuous Delivery: Automation the preparation of code for release

  • Used for small incremental releases of frquent releases
  • 코드 컴파일, 테스팅, 패키징을 자동화
  • May involve human QA before final release or automated release to production.

Continuous delivery가 build test, deployment process의 대부분을 자동화하면서 더 자주, 큰 노력이 들지 않는 배포가 가능해졌다. 이것은 빈도 높은 release로 더 빠른 customer feedback이 가능하게 한다.

CodePipeline: Continuous delivery as a managed service


코드파이프라인(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.

CodePipeline Recap

  • Controls the release process through user defined pipelines
  • Pipelines are created either through the CodePipeline console or using awscli
  • Pipelines watch a source code repository, changes to this repository trigger pipeline action
  • Pipelines are made up of stages
  • Each stage consists of one or more actions
  • There are actions to define the source repository, as well as instructions for testing, building, deploying and options for approval
  • Pipelines can be managed and viewed in the CodePipeline console

Codebuild: An AWS Continuous Integration service

Continuous Integrtion: The first part of Continuous Delivery


Continuous delivery의 중요한 부분은 continous interation이다. Continuous delivery는 기본적으로 deployment와 approval stages가 추가된 continuous integration이다. CI의 motivation은 작은 코드 변화들을 더 자주 확인할 수 있다면 개발 과정의 더 이른 단계에서 버그들을 발견할 수 있다는 것이다. Codebuild는 AWS에서 제공되는 완전히 관리되는 continuous integration service이다. 이것은 테스트를 실행하고 코드를 컴파일할 수 있고 배포가 가능한 패키지를 만들 수 있으며 code pipeline stage에 action으로 추가될 수 있다.

CodeBuild Recap

  • Continuous Integration: frequent check-ins to a central repository which trigger automated builds and tests
  • CodeBuild: A fully managed continuous integration system offered by AWS
  • Codebuild can be added as an action to a CodePipeline stage
profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글