AWS

Container Orchestration Tools

Container Orchestration Tools = Managing, scaling and deploying containers

  • Docker Swarm
  • Kubernetes
  • Mesos
  • Nomad
  • ECS(AWS Elastic Container Service)

What is ECS?

  • Container Orchestration Service
  • Manages the whole container lifecycle(start, re-schedule, load balance)

How does ECS work?

ecs1

Where are these containers hosted?

ECS hosted onEC2 Instances

ecs2

But you still have to do:

  • Create EC2 instances
  • Join to ECS cluster
  • Check resources
  • Manage Operating System
  • Docker Runtime, ECS Agent

ECS with AWS Fargate

If you want AWS to manage both Container Orchestration and Infrastructure Management, here is AWS Fargate.

  • Serverless way to launch containers

Tell AWS, Here is my container, please run it.

Pros:

  • No need to provision and manage servers.
  • on demand
  • Only the infrastructure resources needed to run your containers
  • pay only for what you use
  • Easily scales up/down without fixed resources defined before hand

EC2 Instance Pricing: Pay for whole Server.

Fargate Pricing: How long and how much capacity.

EKS (Elastic Kubernetes Service)

What if you want to use Kubernetes?

Thankfully, AWS has EKS which manages Kubernetes cluster on AWS infrastructure.

Pros:

  • Easier to migrate to another platform. e.g. Google Cloud, MS Azure
  • Kubernetes is open-source
  • Large community

ecs3

Command

eksctl

Create cluster

eksctl create cluster \
--name kf-demo \
--version 1.19 \
--region us-east-2 \
--with-oidc \
--ssh-access \
--ssh-public-key aws-hictc-kfserving-key \
--nodes 1 \
--node-type m5.large \
--node-volume-size=20 \
--managed

Delete cluster

Delete whole cluster

eksctl delete cluster --name=kf-demo --region=us-east-2

Delete a nodegroup separately using eksctl delete nodegroup

# List EKS Clusters
eksctl get clusters

# Capture Node Group name
eksctl get nodegroup --cluster=<clusterName>
eksctl get nodegroup --cluster=eksdemo1

# Delete Node Group
eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>
eksctl delete nodegroup --cluster=eksdemo1 --name=eksdemo1-ng-public1

more