In this section, we'll create Elastic Kubernetes Service (EKS) cluster on Amazon using cli, publish images to ECR and configure kubectl.
To create cluster and manage on EKS we'll use a cli tool eksctl
which can be downloaded from here. And next we'll follow these steps:
-
In the
kube-config
folder create eks config fileeks-config.yaml
:-
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: mlzoomcamp-eks region: ap-south-1 nodeGroups: # for our case, we need only one node group (CPU) - name: ng-m5-xlarge instanceType: m5.xlarge desiredCapacity: 1
- Create eks cluster:
eksctl create cluster -f eks-config.yaml
-
-
Publish local docker images to ECR:
- Create aws ecr repository for eks cluster:
aws ecr create-repository --repository-name mlzoomcamp-images
- Bash commands to run in the terminal to push docker images to ecr repository:
-
# Registry URI ACCOUNT_ID=22782589 REGION=ap-south-123 REGISTRY_NAME=mlzoomcamp-images PREFIX=${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REGISTRY_NAME} # Tag local docker images to remote tag GATEWAY_LOCAL=zoomcamp-10-gateway:002 # gateway service GATEWAY_REMOTE=${PREFIX}:clothing-model-gateway-002 # notice the ':' is replaced with '-' before 002 docker tag ${GATEWAY_LOCAL} ${GATEWAY_REMOTE} MODEL_LOCAL=zoomcamp-10-model:xception-v4-001 # tf-serving model MODEL_REMOTE=${PREFIX}:clothing-model-xception-v4-001 # same thing ':' is replaced with '-' before xception docker tag ${MODEL_LOCAL} ${MODEL_REMOTE} # Push tagged docker images docker push ${MODEL_REMOTE} docker push ${GATEWAY_REMOTE}
- Login to ecr and push images:
$(aws ecr get-login --no-include-email)
, first push the model and then gateway remote image. - Get the uri of these images
echo ${MODEL_REMOTE}
andecho ${GATEWAY_REMOTE}
and add them tomodel-deployment.yaml
andgate-deployment.yaml
respectively.
-
- Apply all the yaml config files to remote node coming from eks (
kubectl get nodes
):kubectl apply -f model-deployment.yaml
kubectl apply -f model-service.yaml
kubectl apply -f gateway-deployment.yaml
kubectl apply -f gateway-service.yaml
- Testing the deployment pods and services should give us predictions.
- Executing
kubectl get service
should give us the external port address which need to add in thetest.py
as access url for predictions (e.g.,url = 'http://a3399e***-5180***.ap-south-123.elb.amazonaws.com/predict'
).
- Create aws ecr repository for eks cluster:
-
To delete the remote cluster:
eksctl delete cluster --name mlzoomcamp-eks
NB: EKS is not part of the Amazon Web Services Free Tier.
Add notes from the video (PRs are welcome)
The notes are written by the community. If you see an error here, please create a PR with a fix. |