From 643f51d8ff766c29e81e62768be35770fffc9824 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Sun, 9 Jul 2023 23:52:59 -0500 Subject: [PATCH 01/14] Content related to EKS Workshop V2 - Spot --- .../fundamentals/mng/spot/deployment.yaml | 9 ++ .../fundamentals/mng/spot/kustomization.yaml | 6 + .../assets/managed-spot-arch.png | Bin 0 -> 251480 bytes .../managed-node-groups/spot/index.md | 148 ++++++++++++++++-- 4 files changed, 154 insertions(+), 9 deletions(-) create mode 100644 environment/workspace/modules/fundamentals/mng/spot/deployment.yaml create mode 100644 environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml create mode 100644 website/docs/fundamentals/managed-node-groups/assets/managed-spot-arch.png diff --git a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml new file mode 100644 index 000000000..5036f86bc --- /dev/null +++ b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml @@ -0,0 +1,9 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: catalog +spec: + template: + spec: + nodeSelector: + capacity_type: managed_spot \ No newline at end of file diff --git a/environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml b/environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml new file mode 100644 index 000000000..9aa2cc981 --- /dev/null +++ b/environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: +- ../../../../manifests/catalog/ +patches: +- deployment.yaml diff --git a/website/docs/fundamentals/managed-node-groups/assets/managed-spot-arch.png b/website/docs/fundamentals/managed-node-groups/assets/managed-spot-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..58a92ef5db0dda6aa9c9a60c277db78094467ed1 GIT binary patch literal 251480 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

YR@;-naF)cBNP)*YURjXoOGD>TH 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 literal 0 HcmV?d00001 diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index 11f0a95f1..76090bcb9 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -3,21 +3,151 @@ title: Spot instances sidebar_position: 50 --- -All of our existing compute nodes are using On-Demand capacity. However, there are multiple "purchase options" available to EC2 customers, and that includes when using EKS. +All of our existing compute nodes are using On-Demand capacity. However, there are multiple "[purchase options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html)" available to EC2 customers for running their EKS workloads. -A Spot Instance is an instance that uses spare EC2 capacity that is available for less than the On-Demand price. Because Spot Instances enable you to request unused EC2 instances at steep discounts, you can lower your Amazon EC2 costs significantly. The hourly price for a Spot Instance is called a Spot price. The Spot price of each instance type in each Availability Zone is set by Amazon EC2, and is adjusted gradually based on the long-term supply of and demand for Spot Instances. Your Spot Instance runs whenever capacity is available. +A Spot Instance uses spare EC2 capacity that is available for less than the On-Demand price. Because Spot Instances enable you to request unused EC2 instances at steep discounts, you can lower your Amazon EC2 costs significantly. The hourly price for a Spot Instance is called a Spot price. The Spot price of each instance type in each Availability Zone is set by Amazon EC2, and is adjusted gradually based on the long-term supply of and demand for Spot Instances. Your Spot Instance runs whenever capacity is available. -Spot Instances are a cost-effective choice if you can be flexible about when your applications run and if your applications can be interrupted. For example, Spot Instances are well-suited for data analysis, batch jobs, background processing, and optional tasks. For more information, see [Amazon EC2 Spot Instances](https://aws.amazon.com/ec2/spot-instances/). +Spot Instances are a good fit for stateless, fault-tolerant, flexible applications. These include batch and machine learning training workloads, big data ETLs such as Apache Spark, queue processing applications, and stateless API endpoints. Because Spot is spare Amazon EC2 capacity, which can change over time, we recommend that you use Spot capacity for interruption-tolerant workloads. More specifically, Spot capacity is suitable for workloads that can tolerate periods where the required capacity isn't available. In this lab exercise, we'll look at how we can provision Spot capacity for our EKS cluster and deploy workloads that leverage it. # EKS managed node groups with Spot capacity -Amazon EKS managed node groups with Spot capacity enhances the managed node group experience with ease to provision and manage EC2 Spot Instances. EKS managed node groups launch an EC2 Auto Scaling group with Spot best practices and handle [Spot Instance interruptions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) automatically. This enables you to take advantage of the steep savings that Spot Instances provide for your interruption tolerant containerized applications. +Amazon EKS managed node groups with Spot capacity enhances the managed node group experience with ease to provision and manage EC2 Spot Instances. EKS managed node groups launch an EC2 Auto Scaling group with Spot best practices and handle Spot Instance interruptions automatically. This enables you to take advantage of the steep savings that Spot Instances provide for your interruption tolerant containerized applications. In addition, EKS managed node groups with Spot capacity have the following advantages: -In addition to the advantages of managed node groups, EKS managed node groups with Spot capacity have these additional advantages: - -* Allocation strategy to provision Spot capacity is set to [Capacity Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#use-capacity-optimized-allocation-strategy) to ensure that Spot nodes are provisioned in the optimal Spot capacity pools. -* Specify [multiple instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#be-instance-type-flexible) during managed node groups creation, to increase the number of Spot capacity pools available for allocating capacity. +* Allocation strategy to provision Spot capacity is set to Capacity Optimized to ensure that Spot nodes are provisioned in the optimal Spot capacity pools. +* Specify multiple instance types during managed node groups creation, to increase the number of Spot capacity pools available for allocating capacity. * Nodes provisioned under managed node groups with Spot capacity are automatically tagged with capacity type: `eks.amazonaws.com/capacityType: SPOT`. You can use this label to schedule fault tolerant applications on Spot nodes. -* Amazon EC2 Spot [Capacity Rebalancing](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) enabled to ensure Amazon EKS can gracefully drain and rebalance your Spot nodes to minimize application disruption when a Spot node is at elevated risk of interruption. +* Amazon EC2 Spot Capacity Rebalancing enabled to ensure Amazon EKS can gracefully drain and rebalance your Spot nodes to minimize application disruption when a Spot node is at elevated risk of interruption. + + +Let’s get started by listing all of the nodegroups in our existing EKS Cluster, The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster. To include additional labels such as `eks.amazonaws.com/capacityType` and `eks.amazonaws.com/nodegroup` in the output, you can use “-L, —label-columns” as additional attributes + +```bash +$ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup + +NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP +ip-10-42-10-232.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-system-20230605211737831800000026 +ip-10-42-10-96.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 +ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 +``` + +:::tip +You can leverage label selectors if you want to pull nodes based on specific capacity type, In this case we have set `capacityType=ON_DEMAND` + +```bash +$ kubectl get nodes -l eks.amazonaws.com/capacityType=ON_DEMAND + +NAME STATUS ROLES AGE VERSION +ip-10-42-10-119.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 +ip-10-42-10-200.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 +ip-10-42-11-94.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 +ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m v1.23.15-eks-49d8fe8 + +::: + +In the below diagram, there are two separate Node Group representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances, Both are associated with the specified EKS cluster. + +![spot arch](../assets/managed-spot-arch.png) + +As our existing cluster already has a nodegroup with `On-Demand` instances, The next step would be to setup a node group which has EC2 instances with capacity type as `SPOT`. + +To achieve that, We will do following: + +* Export the Managed Node Group name for SPOT + +* Use AWS CLI to create EKS managed node group for SPOT + +```bash + +$ export EKS_DEFAULT_MNG_NAME_SPOT=managed-spot +$ aws eks create-nodegroup \ +--cluster-name $EKS_CLUSTER_NAME \ +--nodegroup-name $EKS_DEFAULT_MNG_NAME_SPOT \ +--node-role $MANAGED_NODE_GROUP_IAM_ROLE_ARN \ +--subnets $PRIMARY_SUBNET_1 $PRIMARY_SUBNET_2 $PRIMARY_SUBNET_3 \ +--instance-types m5.large m5d.large m5a.large m5ad.large m5n.large m5dn.large \ +--capacity-type SPOT \ +--scaling-config minSize=2,maxSize=6,desiredSize=2 \ +--disk-size 20 \ +--labels capacity_type=managed_spot + +``` +To track the status of Node Group creation, You can running below command in a separate terminal. + +```bash +$ eksctl get nodegroup --cluster=$EKS_CLUSTER_NAME + +CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME TYPE +eks-workshop managed-ondemand-20230605211832165500000026 ACTIVE 2023-06-05T21:18:33Z 2 6 2 m5.large AL2_x86_64 eks-managed-ondemand-20230605211832165500000026-b2c446b6-828d-f79f-9338-456374559c7b managed +eks-workshop managed-ondemand-tainted-20230605211832655900000028 ACTIVE 2023-06-05T21:18:34Z 0 1 0 m5.large AL2_x86_64 eks-managed-ondemand-tainted-20230605211832655900000028-84c446b6-837c-bf91-2e90-93ee1ec37cf8 managed +eks-workshop managed-spot CREATING 2023-06-06T05:24:55Z 2 6 2 m5.large,m5d.large,m5a.large,m5ad.large,m5n.large,m5dn.large AL2_x86_64 managed +eks-workshop managed-system-20230605211832120700000024 ACTIVE 2023-06-05T21:18:34Z 1 2 1 m5.large AL2_x86_64 eks-managed-system-20230605211832120700000024-26c446b6-8271-ac8a-4b54-569cf51913f9 managed + +``` + +:::info +The aws `eks wait nodegroup-active` command can be used to wait until a specific EKS node group is active and ready for use. This command is part of the AWS CLI and can be used to ensure that the specified node group has been successfully created and all the associated instances are running and ready. + +```bash +$ aws eks wait nodegroup-active \ +--cluster-name $EKS_CLUSTER_NAME \ +--nodegroup-name $EKS_DEFAULT_MNG_NAME_SPOT +``` +::: + +Once the Managed node group `managed-spot` status shows as “Active”, Run the below command. +The output shows that two additional nodes got provisioned under the node group `managed-spot` with capacity type as `SPOT`. + +```bash +$ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup + +NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP +ip-10-42-10-232.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-system-20230605211737831800000026 +ip-10-42-10-96.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 +ip-10-42-11-17.us-west-2.compute.internal Ready 78s v1.23.17-eks-0a21954 SPOT managed-spot +ip-10-42-12-234.us-west-2.compute.internal Ready 77s v1.23.17-eks-0a21954 SPOT managed-spot +ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 + +``` +From the above output you can see that now we have two managed nodegroups available. Next, let’s deploy the “Sample Retail Store” app and leverage [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) as node selection constraint to deploy app on top of the spot instances instead of On-Demand. Using the nodeSelector field, you can specify key-value pairs to filter and select which nodes in the cluster should run particular pods. It is used to define constraints for pod placement based on node labels. + +Now because our existing manifest `deployment.yaml` located under `/workspace/manifests/catalog` does not have `nodeSelector` as an attribute, we will use [kustomize](https://www.eksworkshop.com/docs/introduction/kustomize/) to modify the existing resource configuration without directly modifying the original manifests. + +```kustomization +fundamentals/mng/spot/deployment.yaml +Deployment/catalog +``` + +Next, Deploy the app. + +```bash +$ kubectl apply -k /workspace/modules/fundamentals/mng/spot + +namespace/catalog created +serviceaccount/catalog created +configmap/catalog created +secret/catalog-db created +service/catalog created +service/catalog-mysql created +deployment.apps/catalog created +statefulset.apps/catalog-mysql created +``` + +To make sure your app got deployed successfully, We will use `kubectl rollout status` command that allows you to check the status of a deployment in Kubernetes. It provides information about the progress of the rollout and the current state of the associated resources. +```bash +$ kubectl rollout status deployment/catalog -n catalog --timeout=5m +``` +Once the application get’s deployed successfully, The Final step would be to check whether the app got deployed on `SPOT` instances, To do that run below script on your terminal. + +```bash +$ for pod in $(kubectl get pods -l app.kubernetes.io/name=catalog -n $CATALOG_RDS_DATABASE_NAME | awk 'NR>1 {print $1}'); do if [ "$pod" != "NAME" ]; then node=$(kubectl get pod $pod -o json -n $CATALOG_RDS_DATABASE_NAME | jq -r '.spec.nodeName'); node_group=$(kubectl get node $node -o json | jq -r '.metadata.labels."eks.amazonaws.com/capacityType"'); echo "$pod | $node | $node_group"; fi; done + +``` + +``` +Output: + +catalog-5c48f886c-txk8c | ip-10-42-11-113.us-west-2.compute.internal | managed_spot +catalog-mysql-0 | ip-10-42-12-155.us-west-2.compute.internal | managed_spot +``` From 6d74db982e52fc8955b684792c38a18d85a34190 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Wed, 12 Jul 2023 23:37:44 -0500 Subject: [PATCH 02/14] Applied all the proposed changes --- .../managed-node-groups/spot/index.md | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index 76090bcb9..b04c74c77 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -15,13 +15,15 @@ In this lab exercise, we'll look at how we can provision Spot capacity for our E Amazon EKS managed node groups with Spot capacity enhances the managed node group experience with ease to provision and manage EC2 Spot Instances. EKS managed node groups launch an EC2 Auto Scaling group with Spot best practices and handle Spot Instance interruptions automatically. This enables you to take advantage of the steep savings that Spot Instances provide for your interruption tolerant containerized applications. In addition, EKS managed node groups with Spot capacity have the following advantages: -* Allocation strategy to provision Spot capacity is set to Capacity Optimized to ensure that Spot nodes are provisioned in the optimal Spot capacity pools. +* The allocation strategy to provision Spot capacity is set to "capacity-optimized" to ensure that your Spot nodes are provisioned in the optimal Spot capacity pools. To increase the number of Spot capacity pools available for allocating capacity from, configure a managed node group to use multiple instance types. * Specify multiple instance types during managed node groups creation, to increase the number of Spot capacity pools available for allocating capacity. * Nodes provisioned under managed node groups with Spot capacity are automatically tagged with capacity type: `eks.amazonaws.com/capacityType: SPOT`. You can use this label to schedule fault tolerant applications on Spot nodes. * Amazon EC2 Spot Capacity Rebalancing enabled to ensure Amazon EKS can gracefully drain and rebalance your Spot nodes to minimize application disruption when a Spot node is at elevated risk of interruption. -Let’s get started by listing all of the nodegroups in our existing EKS Cluster, The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster. To include additional labels such as `eks.amazonaws.com/capacityType` and `eks.amazonaws.com/nodegroup` in the output, you can use “-L, —label-columns” as additional attributes +Let’s get started by listing all of the nodes in our existing EKS Cluster. The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster. To include additional labels such as `eks.amazonaws.com/capacityType` and `eks.amazonaws.com/nodegroup`, You can use “-L, —label-columns”. + +The following output provides a list of available nodes that are exclusively on-demand instances. ```bash $ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup @@ -33,7 +35,8 @@ ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-e ``` :::tip -You can leverage label selectors if you want to pull nodes based on specific capacity type, In this case we have set `capacityType=ON_DEMAND` + +If you want to retrieve nodes based on a specific capacity type, such as `on-demand` instances, you can utilize "label selectors". In this particular scenario, you can achieve this by setting the label selector to `capacityType=ON_DEMAND`. ```bash $ kubectl get nodes -l eks.amazonaws.com/capacityType=ON_DEMAND @@ -46,17 +49,13 @@ ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m v1.23.15- ::: -In the below diagram, there are two separate Node Group representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances, Both are associated with the specified EKS cluster. +In the below diagram, there are two separate "node groups" representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances. Both are associated with the specified EKS cluster. ![spot arch](../assets/managed-spot-arch.png) -As our existing cluster already has a nodegroup with `On-Demand` instances, The next step would be to setup a node group which has EC2 instances with capacity type as `SPOT`. - -To achieve that, We will do following: - -* Export the Managed Node Group name for SPOT +As our existing cluster already has a nodegroup with `On-Demand` instances, the next step would be to setup a node group which has EC2 instances with capacity type as `SPOT`. -* Use AWS CLI to create EKS managed node group for SPOT +To achieve that, we will perform the following steps: first, Export the environment variable EKS_DEFAULT_MNG_NAME_SPOT with the value set as 'managed-spot', and then use the AWS CLI to create an EKS managed node group specifically designed for `SPOT` instances. ```bash @@ -73,7 +72,7 @@ $ aws eks create-nodegroup \ --labels capacity_type=managed_spot ``` -To track the status of Node Group creation, You can running below command in a separate terminal. +To track the status of Node Group creation, Run below command in a separate terminal. ```bash $ eksctl get nodegroup --cluster=$EKS_CLUSTER_NAME @@ -110,9 +109,7 @@ ip-10-42-12-234.us-west-2.compute.internal Ready 77s v1.23.17-e ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 ``` -From the above output you can see that now we have two managed nodegroups available. Next, let’s deploy the “Sample Retail Store” app and leverage [nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) as node selection constraint to deploy app on top of the spot instances instead of On-Demand. Using the nodeSelector field, you can specify key-value pairs to filter and select which nodes in the cluster should run particular pods. It is used to define constraints for pod placement based on node labels. - -Now because our existing manifest `deployment.yaml` located under `/workspace/manifests/catalog` does not have `nodeSelector` as an attribute, we will use [kustomize](https://www.eksworkshop.com/docs/introduction/kustomize/) to modify the existing resource configuration without directly modifying the original manifests. +The above output indicates the availability of two managed node groups. To deploy the “Sample Retail Store” app and utilize `nodeSelector` for deploying it on spot instances instead of `On-Demand`, you can employ the `nodeSelector` field to define constraints based on node labels. As the existing deployment.yaml manifest in `/workspace/manifests/catalog` lacks the `nodeSelector` attribute, you can use kustomize to modify the resource configuration without directly altering the original manifests. ```kustomization fundamentals/mng/spot/deployment.yaml @@ -134,20 +131,21 @@ deployment.apps/catalog created statefulset.apps/catalog-mysql created ``` -To make sure your app got deployed successfully, We will use `kubectl rollout status` command that allows you to check the status of a deployment in Kubernetes. It provides information about the progress of the rollout and the current state of the associated resources. +To ensure the successful deployment of your app, you can utilize the kubectl rollout status command, which allows you to check the status of a deployment in Kubernetes. This command provides detailed information regarding the progress of the rollout and the current state of the associated resources, enabling you to verify the app's deployment status. + ```bash $ kubectl rollout status deployment/catalog -n catalog --timeout=5m ``` -Once the application get’s deployed successfully, The Final step would be to check whether the app got deployed on `SPOT` instances, To do that run below script on your terminal. +After successfully deploying the application, the final step is to verify if it has been deployed on the `SPOT` instances. To accomplish this, run the below command. ```bash -$ for pod in $(kubectl get pods -l app.kubernetes.io/name=catalog -n $CATALOG_RDS_DATABASE_NAME | awk 'NR>1 {print $1}'); do if [ "$pod" != "NAME" ]; then node=$(kubectl get pod $pod -o json -n $CATALOG_RDS_DATABASE_NAME | jq -r '.spec.nodeName'); node_group=$(kubectl get node $node -o json | jq -r '.metadata.labels."eks.amazonaws.com/capacityType"'); echo "$pod | $node | $node_group"; fi; done - +$ kubectl get pod -n $CATALOG_RDS_DATABASE_NAME -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName ``` - +The output of the command will display the details of the pods, including the node that is identified as a SPOT instance. ``` Output: -catalog-5c48f886c-txk8c | ip-10-42-11-113.us-west-2.compute.internal | managed_spot -catalog-mysql-0 | ip-10-42-12-155.us-west-2.compute.internal | managed_spot +NAME STATUS NODE +catalog-5c48f886c-rrbck Running ip-10-42-11-17.us-west-2.compute.internal +catalog-mysql-0 Running ip-10-42-12-234.us-west-2.compute.internal ``` From 2abe06f0479c654850453a7f5262fdaeffaf2924 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Thu, 10 Aug 2023 09:51:21 -0500 Subject: [PATCH 03/14] Latest Changes --- eks-workshop-v2 | 1 + 1 file changed, 1 insertion(+) create mode 160000 eks-workshop-v2 diff --git a/eks-workshop-v2 b/eks-workshop-v2 new file mode 160000 index 000000000..6d74db982 --- /dev/null +++ b/eks-workshop-v2 @@ -0,0 +1 @@ +Subproject commit 6d74db982e52fc8955b684792c38a18d85a34190 From 6c928847c55779525796c47e43b9175059c6ac28 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Mon, 28 Aug 2023 09:33:43 -0500 Subject: [PATCH 04/14] recent changes to the spot instances --- website/docs/fundamentals/managed-node-groups/spot/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index b04c74c77..4e83fc3a7 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -60,6 +60,7 @@ To achieve that, we will perform the following steps: first, Export the environm ```bash $ export EKS_DEFAULT_MNG_NAME_SPOT=managed-spot +$ export MANAGED_NODE_GROUP_IAM_ROLE_ARN=`aws eks describe-nodegroup --cluster-name eks-workshop --nodegroup-name default | jq -r .nodegroup.nodeRole` $ aws eks create-nodegroup \ --cluster-name $EKS_CLUSTER_NAME \ --nodegroup-name $EKS_DEFAULT_MNG_NAME_SPOT \ From e44d3b1556a69a80c6da73a4ba2c94b0bba7a774 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Mon, 28 Aug 2023 09:38:58 -0500 Subject: [PATCH 05/14] managed spot deployment --- .../workspace/modules/fundamentals/mng/spot/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml index 5036f86bc..4137650b1 100644 --- a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml +++ b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml @@ -6,4 +6,4 @@ spec: template: spec: nodeSelector: - capacity_type: managed_spot \ No newline at end of file + capacity_type: maanaged_spot From cc9c9ab99dca29c734b00b322fe1d96998187b09 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Mon, 28 Aug 2023 10:25:46 -0500 Subject: [PATCH 06/14] Added eks-node-viewer to the module --- .../managed-node-groups/spot/index.md | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index 4e83fc3a7..8bcc9f8c7 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -112,10 +112,10 @@ ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-e ``` The above output indicates the availability of two managed node groups. To deploy the “Sample Retail Store” app and utilize `nodeSelector` for deploying it on spot instances instead of `On-Demand`, you can employ the `nodeSelector` field to define constraints based on node labels. As the existing deployment.yaml manifest in `/workspace/manifests/catalog` lacks the `nodeSelector` attribute, you can use kustomize to modify the resource configuration without directly altering the original manifests. -```kustomization -fundamentals/mng/spot/deployment.yaml -Deployment/catalog -``` +#```kustomization +#fundamentals/mng/spot/deployment.yaml +#Deployment/catalog +#``` Next, Deploy the app. @@ -150,3 +150,26 @@ NAME STATUS NODE catalog-5c48f886c-rrbck Running ip-10-42-11-17.us-west-2.compute.internal catalog-mysql-0 Running ip-10-42-12-234.us-west-2.compute.internal ``` + +### Visualize the Node Usage + +Install "[eks-node-viewer](https://github.com/awslabs/eks-node-viewer)" for visualizing dynamic node usage within a cluster. + +```bash +$ go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest +$ sudo mv -v ~/go/bin/eks-node-viewer /usr/local/bin +``` +:::info +* This step may take about 2-3 minutes to download all the dependencies and install eks-node-viewer +* Post Installation, Make sure you run `eks-node-viewer` in a seperate terminal or else you will not see the colors in the output +::: + +Please open a separate terminal and execute below commands for the EKS Node Viewer tool for both `ON_DEMAND` and `SPOT` nodegroups. This will allow you to observe the number of pods currently running on each node and view the corresponding monthly cost associated with those nodes. + +```bash +$ eks-node-viewer --node-selector "eks.amazonaws.com/capacityType=ON_DEMAND" +``` + +```bash +$ eks-node-viewer --node-selector "eks.amazonaws.com/capacityType=SPOT" +``` \ No newline at end of file From 48314b7acf2be0ad81fc0615cd6f952d62b838c6 Mon Sep 17 00:00:00 2001 From: Bijith Nair Date: Wed, 30 Aug 2023 11:33:41 -0500 Subject: [PATCH 07/14] Latest changes being applied --- eks-workshop-v2 | 1 - .../fundamentals/mng/spot/deployment.yaml | 2 +- .../managed-node-groups/spot/index.md | 23 ------------------- 3 files changed, 1 insertion(+), 25 deletions(-) delete mode 160000 eks-workshop-v2 diff --git a/eks-workshop-v2 b/eks-workshop-v2 deleted file mode 160000 index 6d74db982..000000000 --- a/eks-workshop-v2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d74db982e52fc8955b684792c38a18d85a34190 diff --git a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml index 4137650b1..3ae54693a 100644 --- a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml +++ b/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml @@ -6,4 +6,4 @@ spec: template: spec: nodeSelector: - capacity_type: maanaged_spot + capacity_type: managed_spot diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index 8bcc9f8c7..e120e5c58 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -149,27 +149,4 @@ Output: NAME STATUS NODE catalog-5c48f886c-rrbck Running ip-10-42-11-17.us-west-2.compute.internal catalog-mysql-0 Running ip-10-42-12-234.us-west-2.compute.internal -``` - -### Visualize the Node Usage - -Install "[eks-node-viewer](https://github.com/awslabs/eks-node-viewer)" for visualizing dynamic node usage within a cluster. - -```bash -$ go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest -$ sudo mv -v ~/go/bin/eks-node-viewer /usr/local/bin -``` -:::info -* This step may take about 2-3 minutes to download all the dependencies and install eks-node-viewer -* Post Installation, Make sure you run `eks-node-viewer` in a seperate terminal or else you will not see the colors in the output -::: - -Please open a separate terminal and execute below commands for the EKS Node Viewer tool for both `ON_DEMAND` and `SPOT` nodegroups. This will allow you to observe the number of pods currently running on each node and view the corresponding monthly cost associated with those nodes. - -```bash -$ eks-node-viewer --node-selector "eks.amazonaws.com/capacityType=ON_DEMAND" -``` - -```bash -$ eks-node-viewer --node-selector "eks.amazonaws.com/capacityType=SPOT" ``` \ No newline at end of file From b516dada49eadf01ae490c32476732180ee20c35 Mon Sep 17 00:00:00 2001 From: Sai Vennam Date: Wed, 30 Aug 2023 11:52:50 -0500 Subject: [PATCH 08/14] fix kustomization --- .../modules/fundamentals/mng/spot/deployment.yaml | 0 .../modules/fundamentals/mng/spot/kustomization.yaml | 2 +- .../fundamentals/managed-node-groups/spot/index.md | 10 +++++----- 3 files changed, 6 insertions(+), 6 deletions(-) rename {environment/workspace => manifests}/modules/fundamentals/mng/spot/deployment.yaml (100%) rename {environment/workspace => manifests}/modules/fundamentals/mng/spot/kustomization.yaml (71%) diff --git a/environment/workspace/modules/fundamentals/mng/spot/deployment.yaml b/manifests/modules/fundamentals/mng/spot/deployment.yaml similarity index 100% rename from environment/workspace/modules/fundamentals/mng/spot/deployment.yaml rename to manifests/modules/fundamentals/mng/spot/deployment.yaml diff --git a/environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml b/manifests/modules/fundamentals/mng/spot/kustomization.yaml similarity index 71% rename from environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml rename to manifests/modules/fundamentals/mng/spot/kustomization.yaml index 9aa2cc981..96fdaa884 100644 --- a/environment/workspace/modules/fundamentals/mng/spot/kustomization.yaml +++ b/manifests/modules/fundamentals/mng/spot/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: -- ../../../../manifests/catalog/ +- ../../../../base-application/catalog patches: - deployment.yaml diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index e120e5c58..cea39e1d6 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -112,15 +112,15 @@ ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-e ``` The above output indicates the availability of two managed node groups. To deploy the “Sample Retail Store” app and utilize `nodeSelector` for deploying it on spot instances instead of `On-Demand`, you can employ the `nodeSelector` field to define constraints based on node labels. As the existing deployment.yaml manifest in `/workspace/manifests/catalog` lacks the `nodeSelector` attribute, you can use kustomize to modify the resource configuration without directly altering the original manifests. -#```kustomization -#fundamentals/mng/spot/deployment.yaml -#Deployment/catalog -#``` +```kustomization +modules/fundamentals/mng/spot/deployment.yaml +Deployment/catalog +``` Next, Deploy the app. ```bash -$ kubectl apply -k /workspace/modules/fundamentals/mng/spot +$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/spot namespace/catalog created serviceaccount/catalog created From 81fa52a166e04401ca14fc4c2106ec95eaf406ab Mon Sep 17 00:00:00 2001 From: Sai Vennam Date: Tue, 10 Oct 2023 16:02:15 -0500 Subject: [PATCH 09/14] add cleanup and clarity changes --- .../fundamentals/mng/.workshop/cleanup.sh | 9 ++ .../managed-node-groups/spot/index.md | 104 ++++++++---------- 2 files changed, 55 insertions(+), 58 deletions(-) diff --git a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh index edac0d30c..faf1ac390 100644 --- a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh +++ b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh @@ -8,4 +8,13 @@ if [ ! -z "$taint_result" ]; then echo "Deleting taint node group..." eksctl delete nodegroup taint-mng --cluster $EKS_CLUSTER_NAME --wait > /dev/null +fi + +spot_nodegroup=$(aws eks list-nodegroups --cluster-name $EKS_CLUSTER_NAME --query "nodegroups[? @ == 'managed-spot']" --output text) + +if [ ! -z "$spot_nodegroup" ]; then + echo "Deleting managed-spot node group..." + + aws eks delete-nodegroup --region $AWS_REGION --cluster-name $EKS_CLUSTER_NAME --nodegroup-name managed-spot > /dev/null + aws eks wait nodegroup-deleted --cluster-name $EKS_CLUSTER_NAME --nodegroup-name managed-spot > /dev/null fi \ No newline at end of file diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index cea39e1d6..a3d2aa3a4 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -13,25 +13,18 @@ In this lab exercise, we'll look at how we can provision Spot capacity for our E # EKS managed node groups with Spot capacity -Amazon EKS managed node groups with Spot capacity enhances the managed node group experience with ease to provision and manage EC2 Spot Instances. EKS managed node groups launch an EC2 Auto Scaling group with Spot best practices and handle Spot Instance interruptions automatically. This enables you to take advantage of the steep savings that Spot Instances provide for your interruption tolerant containerized applications. In addition, EKS managed node groups with Spot capacity have the following advantages: +In this module, we will first deploy a managed node group that creates Spot instances, followed by modifying the existing `catalog` component of our application to run on the newly created Spot instances. -* The allocation strategy to provision Spot capacity is set to "capacity-optimized" to ensure that your Spot nodes are provisioned in the optimal Spot capacity pools. To increase the number of Spot capacity pools available for allocating capacity from, configure a managed node group to use multiple instance types. -* Specify multiple instance types during managed node groups creation, to increase the number of Spot capacity pools available for allocating capacity. -* Nodes provisioned under managed node groups with Spot capacity are automatically tagged with capacity type: `eks.amazonaws.com/capacityType: SPOT`. You can use this label to schedule fault tolerant applications on Spot nodes. -* Amazon EC2 Spot Capacity Rebalancing enabled to ensure Amazon EKS can gracefully drain and rebalance your Spot nodes to minimize application disruption when a Spot node is at elevated risk of interruption. +Let’s get started by listing all of the nodes in our existing EKS Cluster. The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster, but to get additional detail about the capacity type, we'll use the `-L eks.amazonaws.com/capacityType` parameter. - -Let’s get started by listing all of the nodes in our existing EKS Cluster. The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster. To include additional labels such as `eks.amazonaws.com/capacityType` and `eks.amazonaws.com/nodegroup`, You can use “-L, —label-columns”. - -The following output provides a list of available nodes that are exclusively on-demand instances. +The following command shows that our nodes are currently **On-Demand** instances. ```bash -$ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup - -NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP -ip-10-42-10-232.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-system-20230605211737831800000026 -ip-10-42-10-96.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 -ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 +$ kubectl get nodes -L eks.amazonaws.com/capacityType +NAME STATUS ROLES AGE VERSION CAPACITYTYPE +ip-10-42-103-103.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND +ip-10-42-142-197.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND +ip-10-42-161-44.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND ``` :::tip @@ -53,51 +46,35 @@ In the below diagram, there are two separate "node groups" representing the mana ![spot arch](../assets/managed-spot-arch.png) -As our existing cluster already has a nodegroup with `On-Demand` instances, the next step would be to setup a node group which has EC2 instances with capacity type as `SPOT`. - -To achieve that, we will perform the following steps: first, Export the environment variable EKS_DEFAULT_MNG_NAME_SPOT with the value set as 'managed-spot', and then use the AWS CLI to create an EKS managed node group specifically designed for `SPOT` instances. +Let's create a node group with Spot instances. The following command executes two steps: +1. Set an environment variable with the same node role we used for the `default` node group. +1. Create a new node group `managed-spot` with our existing node role and subnets, and specify the instance types, capacity type, and scaling config for our new spot node group. ```bash - -$ export EKS_DEFAULT_MNG_NAME_SPOT=managed-spot $ export MANAGED_NODE_GROUP_IAM_ROLE_ARN=`aws eks describe-nodegroup --cluster-name eks-workshop --nodegroup-name default | jq -r .nodegroup.nodeRole` $ aws eks create-nodegroup \ --cluster-name $EKS_CLUSTER_NAME \ ---nodegroup-name $EKS_DEFAULT_MNG_NAME_SPOT \ +--nodegroup-name managed-spot \ --node-role $MANAGED_NODE_GROUP_IAM_ROLE_ARN \ --subnets $PRIMARY_SUBNET_1 $PRIMARY_SUBNET_2 $PRIMARY_SUBNET_3 \ --instance-types m5.large m5d.large m5a.large m5ad.large m5n.large m5dn.large \ --capacity-type SPOT \ ---scaling-config minSize=2,maxSize=6,desiredSize=2 \ +--scaling-config minSize=2,maxSize=3,desiredSize=2 \ --disk-size 20 \ --labels capacity_type=managed_spot - ``` -To track the status of Node Group creation, Run below command in a separate terminal. - -```bash -$ eksctl get nodegroup --cluster=$EKS_CLUSTER_NAME - -CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME TYPE -eks-workshop managed-ondemand-20230605211832165500000026 ACTIVE 2023-06-05T21:18:33Z 2 6 2 m5.large AL2_x86_64 eks-managed-ondemand-20230605211832165500000026-b2c446b6-828d-f79f-9338-456374559c7b managed -eks-workshop managed-ondemand-tainted-20230605211832655900000028 ACTIVE 2023-06-05T21:18:34Z 0 1 0 m5.large AL2_x86_64 eks-managed-ondemand-tainted-20230605211832655900000028-84c446b6-837c-bf91-2e90-93ee1ec37cf8 managed -eks-workshop managed-spot CREATING 2023-06-06T05:24:55Z 2 6 2 m5.large,m5d.large,m5a.large,m5ad.large,m5n.large,m5dn.large AL2_x86_64 managed -eks-workshop managed-system-20230605211832120700000024 ACTIVE 2023-06-05T21:18:34Z 1 2 1 m5.large AL2_x86_64 eks-managed-system-20230605211832120700000024-26c446b6-8271-ac8a-4b54-569cf51913f9 managed -``` - -:::info +:::tip The aws `eks wait nodegroup-active` command can be used to wait until a specific EKS node group is active and ready for use. This command is part of the AWS CLI and can be used to ensure that the specified node group has been successfully created and all the associated instances are running and ready. ```bash $ aws eks wait nodegroup-active \ --cluster-name $EKS_CLUSTER_NAME \ ---nodegroup-name $EKS_DEFAULT_MNG_NAME_SPOT +--nodegroup-name managed-spot ``` ::: -Once the Managed node group `managed-spot` status shows as “Active”, Run the below command. -The output shows that two additional nodes got provisioned under the node group `managed-spot` with capacity type as `SPOT`. +Once our new managed node group is **Active**, run the following command. ```bash $ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup @@ -110,43 +87,54 @@ ip-10-42-12-234.us-west-2.compute.internal Ready 77s v1.23.17-e ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 ``` -The above output indicates the availability of two managed node groups. To deploy the “Sample Retail Store” app and utilize `nodeSelector` for deploying it on spot instances instead of `On-Demand`, you can employ the `nodeSelector` field to define constraints based on node labels. As the existing deployment.yaml manifest in `/workspace/manifests/catalog` lacks the `nodeSelector` attribute, you can use kustomize to modify the resource configuration without directly altering the original manifests. + +The output shows that two additional nodes got provisioned under the node group `managed-spot` with capacity type as `SPOT`. + +Next, let's modify our sample retail store application to run the catalog component on the newly created Spot instances. To do so, we'll utilize Kustomize to apply a patch to the `catalog` Deployment, adding a `nodeSelector` field with `capacity_type: managed_spot`. ```kustomization modules/fundamentals/mng/spot/deployment.yaml Deployment/catalog ``` -Next, Deploy the app. +Apply the Kustomize patch with the following command. ```bash $ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/spot -namespace/catalog created -serviceaccount/catalog created -configmap/catalog created -secret/catalog-db created -service/catalog created -service/catalog-mysql created -deployment.apps/catalog created -statefulset.apps/catalog-mysql created +namespace/catalog unchanged +serviceaccount/catalog unchanged +configmap/catalog unchanged +secret/catalog-db unchanged +service/catalog unchanged +service/catalog-mysql unchanged +deployment.apps/catalog configured +statefulset.apps/catalog-mysql unchanged ``` -To ensure the successful deployment of your app, you can utilize the kubectl rollout status command, which allows you to check the status of a deployment in Kubernetes. This command provides detailed information regarding the progress of the rollout and the current state of the associated resources, enabling you to verify the app's deployment status. +Ensure the successful deployment of your app with the following command. ```bash $ kubectl rollout status deployment/catalog -n catalog --timeout=5m ``` -After successfully deploying the application, the final step is to verify if it has been deployed on the `SPOT` instances. To accomplish this, run the below command. + +Finally, let's verify that the catalog pods are running on Spot instances. Run the following two commands. ```bash -$ kubectl get pod -n $CATALOG_RDS_DATABASE_NAME -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName +$ kubectl get pods -l app.kubernetes.io/component=service -n catalog -o wide + +NAME READY STATUS RESTARTS AGE IP NODE +catalog-6bf46b9654-9klmd 1/1 Running 0 7m13s 10.42.118.208 ip-10-42-99-254.us-east-2.compute.internal ``` -The output of the command will display the details of the pods, including the node that is identified as a SPOT instance. +```bash +$ kubectl get nodes -l eks.amazonaws.com/capacityType=SPOT + +NAME STATUS ROLES AGE VERSION +ip-10-42-139-140.us-east-2.compute.internal Ready 16m v1.25.13-eks-43840fb +ip-10-42-99-254.us-east-2.compute.internal Ready 16m v1.25.13-eks-43840fb + ``` -Output: -NAME STATUS NODE -catalog-5c48f886c-rrbck Running ip-10-42-11-17.us-west-2.compute.internal -catalog-mysql-0 Running ip-10-42-12-234.us-west-2.compute.internal -``` \ No newline at end of file +The first command tells us that the catalog pod is running on node `ip-10-42-99-254.us-east-2.compute.internal`, which we verify is a Spot instance by matching it to the output of the second command. + +In this lab, you deployed a managed node group that creates Spot instances, and then modified the `catalog` deployment to run on the newly created Spot instances. Following this process, you can modify any of the running deployments in the cluster by adding the `nodeSelector` parameter, as specified in the Kustomization patch above. \ No newline at end of file From 5610ce58d496855bca21197eb5a5d4da2818bf04 Mon Sep 17 00:00:00 2001 From: Sai Vennam Date: Tue, 10 Oct 2023 16:33:43 -0500 Subject: [PATCH 10/14] fix output from node groups command --- .../fundamentals/managed-node-groups/spot/index.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index a3d2aa3a4..09246e9aa 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -9,8 +9,6 @@ A Spot Instance uses spare EC2 capacity that is available for less than the On-D Spot Instances are a good fit for stateless, fault-tolerant, flexible applications. These include batch and machine learning training workloads, big data ETLs such as Apache Spark, queue processing applications, and stateless API endpoints. Because Spot is spare Amazon EC2 capacity, which can change over time, we recommend that you use Spot capacity for interruption-tolerant workloads. More specifically, Spot capacity is suitable for workloads that can tolerate periods where the required capacity isn't available. -In this lab exercise, we'll look at how we can provision Spot capacity for our EKS cluster and deploy workloads that leverage it. - # EKS managed node groups with Spot capacity In this module, we will first deploy a managed node group that creates Spot instances, followed by modifying the existing `catalog` component of our application to run on the newly created Spot instances. @@ -79,12 +77,12 @@ Once our new managed node group is **Active**, run the following command. ```bash $ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup -NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP -ip-10-42-10-232.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-system-20230605211737831800000026 -ip-10-42-10-96.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 -ip-10-42-11-17.us-west-2.compute.internal Ready 78s v1.23.17-eks-0a21954 SPOT managed-spot -ip-10-42-12-234.us-west-2.compute.internal Ready 77s v1.23.17-eks-0a21954 SPOT managed-spot -ip-10-42-12-45.us-west-2.compute.internal Ready 113m v1.23.15-eks-49d8fe8 ON_DEMAND managed-ondemand-20230605211738568600000028 +NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP +ip-10-42-103-103.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default +ip-10-42-142-197.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default +ip-10-42-161-44.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default +ip-10-42-178-46.us-east-2.compute.internal Ready 103s v1.25.13-eks-43840fb SPOT managed-spot +ip-10-42-97-19.us-east-2.compute.internal Ready 104s v1.25.13-eks-43840fb SPOT managed-spot ``` From 12ee3f7d21017bd7ff5ea38d2be0e845d397e4f4 Mon Sep 17 00:00:00 2001 From: Sai Vennam Date: Wed, 18 Oct 2023 14:15:47 -0500 Subject: [PATCH 11/14] remove wait to clean-up nodegroups, fix spot node tests --- lab/bin/delete-nodegroup | 3 ++- .../fundamentals/mng/.workshop/cleanup.sh | 17 ++--------------- .../managed-node-groups/spot/index.md | 9 ++++----- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/lab/bin/delete-nodegroup b/lab/bin/delete-nodegroup index befad5d9d..604596fbf 100644 --- a/lab/bin/delete-nodegroup +++ b/lab/bin/delete-nodegroup @@ -13,5 +13,6 @@ if [ ! -z "$check" ]; then echo "Deleting node group $nodegroup..." aws eks delete-nodegroup --region $AWS_REGION --cluster-name $EKS_CLUSTER_NAME --nodegroup-name $nodegroup > /dev/null - aws eks wait nodegroup-deleted --cluster-name $EKS_CLUSTER_NAME --nodegroup-name $nodegroup > /dev/null + # Skip waiting for node group to finish, allowing reset-environment/prepare-environment to finish more quickly + # aws eks wait nodegroup-deleted --cluster-name $EKS_CLUSTER_NAME --nodegroup-name $nodegroup > /dev/null fi \ No newline at end of file diff --git a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh index faf1ac390..4a516deac 100644 --- a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh +++ b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh @@ -2,19 +2,6 @@ set -e -taint_result=$(aws eks list-nodegroups --cluster-name $EKS_CLUSTER_NAME | { grep taint || true; }) +delete-nodegroup taint-mng -if [ ! -z "$taint_result" ]; then - echo "Deleting taint node group..." - - eksctl delete nodegroup taint-mng --cluster $EKS_CLUSTER_NAME --wait > /dev/null -fi - -spot_nodegroup=$(aws eks list-nodegroups --cluster-name $EKS_CLUSTER_NAME --query "nodegroups[? @ == 'managed-spot']" --output text) - -if [ ! -z "$spot_nodegroup" ]; then - echo "Deleting managed-spot node group..." - - aws eks delete-nodegroup --region $AWS_REGION --cluster-name $EKS_CLUSTER_NAME --nodegroup-name managed-spot > /dev/null - aws eks wait nodegroup-deleted --cluster-name $EKS_CLUSTER_NAME --nodegroup-name managed-spot > /dev/null -fi \ No newline at end of file +delete-nodegroup managed-spot diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index 09246e9aa..f22d4349b 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -26,7 +26,6 @@ ip-10-42-161-44.us-east-2.compute.internal Ready 133m v1.25.6-e ``` :::tip - If you want to retrieve nodes based on a specific capacity type, such as `on-demand` instances, you can utilize "label selectors". In this particular scenario, you can achieve this by setting the label selector to `capacityType=ON_DEMAND`. ```bash @@ -37,7 +36,7 @@ ip-10-42-10-119.us-east-2.compute.internal Ready 3d10h v1.23.15- ip-10-42-10-200.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 ip-10-42-11-94.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m v1.23.15-eks-49d8fe8 - +``` ::: In the below diagram, there are two separate "node groups" representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances. Both are associated with the specified EKS cluster. @@ -46,9 +45,9 @@ In the below diagram, there are two separate "node groups" representing the mana Let's create a node group with Spot instances. The following command executes two steps: 1. Set an environment variable with the same node role we used for the `default` node group. -1. Create a new node group `managed-spot` with our existing node role and subnets, and specify the instance types, capacity type, and scaling config for our new spot node group. +2. Create a new node group `managed-spot` with our existing node role and subnets, and specify the instance types, capacity type, and scaling config for our new spot node group. -```bash +```bash wait=30 $ export MANAGED_NODE_GROUP_IAM_ROLE_ARN=`aws eks describe-nodegroup --cluster-name eks-workshop --nodegroup-name default | jq -r .nodegroup.nodeRole` $ aws eks create-nodegroup \ --cluster-name $EKS_CLUSTER_NAME \ @@ -65,7 +64,7 @@ $ aws eks create-nodegroup \ :::tip The aws `eks wait nodegroup-active` command can be used to wait until a specific EKS node group is active and ready for use. This command is part of the AWS CLI and can be used to ensure that the specified node group has been successfully created and all the associated instances are running and ready. -```bash +```bash wait=30 timeout=300 $ aws eks wait nodegroup-active \ --cluster-name $EKS_CLUSTER_NAME \ --nodegroup-name managed-spot From 9ece6e39c3bda03dd5daf73b4de0344ce8f0f7d9 Mon Sep 17 00:00:00 2001 From: Sai Vennam Date: Wed, 18 Oct 2023 16:05:14 -0500 Subject: [PATCH 12/14] move node role creation to terraform --- .../mng/.workshop/terraform/addon.tf | 28 +++++++++++++++++++ .../managed-node-groups/spot/index.md | 16 +++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf b/manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf index 759f04aa9..475b2b1b3 100644 --- a/manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf +++ b/manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf @@ -17,8 +17,36 @@ data "aws_subnets" "private" { } } +resource "aws_iam_role" "spot_node" { + name = "${local.addon_context.eks_cluster_id}-spot-node" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Effect = "Allow" + Sid = "" + Principal = { + Service = "ec2.amazonaws.com" + } + }, + ] + }) + + managed_policy_arns = [ + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEKS_CNI_Policy", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEKSWorkerNodePolicy", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonSSMManagedInstanceCore" + ] + + tags = local.tags +} + output "environment" { value = < Date: Tue, 31 Oct 2023 15:47:25 +0000 Subject: [PATCH 13/14] Ported some Spot content from the finhack workshop --- lab/scripts/installer.sh | 8 ++ .../fundamentals/mng/.workshop/cleanup.sh | 2 - .../mng/spot/.workshop/cleanup.sh | 5 + .../mng/spot/.workshop/terraform/addon.tf | 54 ++++++++ .../mng/spot/{ => deployment}/deployment.yaml | 2 +- .../spot/{ => deployment}/kustomization.yaml | 4 +- .../spot/create-spot-capacity.md | 77 +++++++++++ .../managed-node-groups/spot/index.md | 129 +----------------- .../spot/instance-diversification.md | 71 ++++++++++ .../managed-node-groups/spot/spot-workload.md | 51 +++++++ 10 files changed, 273 insertions(+), 130 deletions(-) create mode 100644 manifests/modules/fundamentals/mng/spot/.workshop/cleanup.sh create mode 100644 manifests/modules/fundamentals/mng/spot/.workshop/terraform/addon.tf rename manifests/modules/fundamentals/mng/spot/{ => deployment}/deployment.yaml (71%) rename manifests/modules/fundamentals/mng/spot/{ => deployment}/kustomization.yaml (54%) create mode 100644 website/docs/fundamentals/managed-node-groups/spot/create-spot-capacity.md create mode 100644 website/docs/fundamentals/managed-node-groups/spot/instance-diversification.md create mode 100644 website/docs/fundamentals/managed-node-groups/spot/spot-workload.md diff --git a/lab/scripts/installer.sh b/lab/scripts/installer.sh index e8f6d8340..ae4b579df 100644 --- a/lab/scripts/installer.sh +++ b/lab/scripts/installer.sh @@ -29,6 +29,9 @@ argocd_checksum='1b9a5f7c47b3c1326a622533f073cef46511e391d296d9b075f583b47478035 terraform_version='1.4.1' terraform_checksum='9e9f3e6752168dea8ecb3643ea9c18c65d5a52acc06c22453ebc4e3fc2d34421' +ec2_instance_selector_version='2.4.1' +ec2_instance_selector_checksum='dfd6560a39c98b97ab99a34fc261b6209fc4eec87b0bc981d052f3b13705e9ff' + download_and_verify () { url=$1 checksum=$2 @@ -109,6 +112,11 @@ download_and_verify "https://github.com/argoproj/argo-cd/releases/download/v${ar chmod +x ./argocd-linux-amd64 mv ./argocd-linux-amd64 /usr/local/bin/argocd +# ec2 instance selector +download_and_verify "https://github.com/aws/amazon-ec2-instance-selector/releases/download/v${ec2_instance_selector_version}/ec2-instance-selector-linux-amd64" "$ec2_instance_selector_checksum" "ec2-instance-selector-linux-amd64" +chmod +x ./ec2-instance-selector-linux-amd64 +mv ./ec2-instance-selector-linux-amd64 /usr/local/bin/ec2-instance-selector + REPOSITORY_OWNER=${REPOSITORY_OWNER:-"aws-samples"} REPOSITORY_NAME=${REPOSITORY_NAME:-"eks-workshop-v2"} diff --git a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh index 4a516deac..c8ea5b813 100644 --- a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh +++ b/manifests/modules/fundamentals/mng/.workshop/cleanup.sh @@ -3,5 +3,3 @@ set -e delete-nodegroup taint-mng - -delete-nodegroup managed-spot diff --git a/manifests/modules/fundamentals/mng/spot/.workshop/cleanup.sh b/manifests/modules/fundamentals/mng/spot/.workshop/cleanup.sh new file mode 100644 index 000000000..6af06077f --- /dev/null +++ b/manifests/modules/fundamentals/mng/spot/.workshop/cleanup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +delete-nodegroup managed-spot diff --git a/manifests/modules/fundamentals/mng/spot/.workshop/terraform/addon.tf b/manifests/modules/fundamentals/mng/spot/.workshop/terraform/addon.tf new file mode 100644 index 000000000..475b2b1b3 --- /dev/null +++ b/manifests/modules/fundamentals/mng/spot/.workshop/terraform/addon.tf @@ -0,0 +1,54 @@ +data "aws_vpc" "selected" { + tags = { + created-by = "eks-workshop-v2" + env = local.addon_context.eks_cluster_id + } +} + +data "aws_subnets" "private" { + tags = { + created-by = "eks-workshop-v2" + env = local.addon_context.eks_cluster_id + } + + filter { + name = "tag:Name" + values = ["*Private*"] + } +} + +resource "aws_iam_role" "spot_node" { + name = "${local.addon_context.eks_cluster_id}-spot-node" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Effect = "Allow" + Sid = "" + Principal = { + Service = "ec2.amazonaws.com" + } + }, + ] + }) + + managed_policy_arns = [ + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEKS_CNI_Policy", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEKSWorkerNodePolicy", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly", + "arn:${local.addon_context.aws_partition_id}:iam::aws:policy/AmazonSSMManagedInstanceCore" + ] + + tags = local.tags +} + +output "environment" { + value = < 133m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND +ip-10-42-142-197.us-east-2.compute.internal Ready 133m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND +ip-10-42-161-44.us-east-2.compute.internal Ready 133m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND +``` + +:::tip +If you want to retrieve nodes based on a specific capacity type, such as `on-demand` instances, you can utilize "label selectors". In this particular scenario, you can achieve this by setting the label selector to `capacityType=ON_DEMAND`. + +```bash +$ kubectl get nodes -l eks.amazonaws.com/capacityType=ON_DEMAND + +NAME STATUS ROLES AGE VERSION +ip-10-42-10-119.us-east-2.compute.internal Ready 3d10h vVAR::KUBERNETES_NODE_VERSION +ip-10-42-10-200.us-east-2.compute.internal Ready 3d10h vVAR::KUBERNETES_NODE_VERSION +ip-10-42-11-94.us-east-2.compute.internal Ready 3d10h vVAR::KUBERNETES_NODE_VERSION +ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m vVAR::KUBERNETES_NODE_VERSION +``` +::: + +In the below diagram, there are two separate "node groups" representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances. Both are associated with the specified EKS cluster. + +![spot arch](../assets/managed-spot-arch.png) + +Let's create a node group with Spot instances. The following command creates a new node group `managed-spot`. + +```bash wait=10 +$ aws eks create-nodegroup \ + --cluster-name $EKS_CLUSTER_NAME \ + --nodegroup-name managed-spot \ + --node-role $SPOT_NODE_ROLE \ + --subnets $PRIMARY_SUBNET_1 $PRIMARY_SUBNET_2 $PRIMARY_SUBNET_3 \ + --instance-types c5.large c5d.large c5a.large c5ad.large c6a.large \ + --capacity-type SPOT \ + --scaling-config minSize=2,maxSize=3,desiredSize=2 \ + --disk-size 20 +``` + +The `--capacity-type SPOT` argument indicates that all capacity in this managed node group should be Spot. + +:::tip +The aws `eks wait nodegroup-active` command can be used to wait until a specific EKS node group is active and ready for use. This command is part of the AWS CLI and can be used to ensure that the specified node group has been successfully created and all the associated instances are running and ready. + +```bash wait=30 timeout=300 +$ aws eks wait nodegroup-active \ + --cluster-name $EKS_CLUSTER_NAME \ + --nodegroup-name managed-spot +``` +::: + +Once our new managed node group is **Active**, run the following command. + +```bash +$ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup + +NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP +ip-10-42-103-103.us-east-2.compute.internal Ready 3h38m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND default +ip-10-42-142-197.us-east-2.compute.internal Ready 3h38m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND default +ip-10-42-161-44.us-east-2.compute.internal Ready 3h38m vVAR::KUBERNETES_NODE_VERSION ON_DEMAND default +ip-10-42-178-46.us-east-2.compute.internal Ready 103s vVAR::KUBERNETES_NODE_VERSION SPOT managed-spot +ip-10-42-97-19.us-east-2.compute.internal Ready 104s vVAR::KUBERNETES_NODE_VERSION SPOT managed-spot +``` + +The output shows that two additional nodes got provisioned under the node group `managed-spot` with capacity type as `SPOT`. \ No newline at end of file diff --git a/website/docs/fundamentals/managed-node-groups/spot/index.md b/website/docs/fundamentals/managed-node-groups/spot/index.md index e25750c17..689a9a774 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/index.md +++ b/website/docs/fundamentals/managed-node-groups/spot/index.md @@ -1,13 +1,14 @@ --- title: Spot instances sidebar_position: 50 +sidebar_custom_props: {"module": true} --- :::tip Before you start Prepare your environment for this section. -```bash timeout=600 wait=30 -$ prepare-environment fundamentals/mng +```bash timeout=300 wait=30 +$ prepare-environment fundamentals/mng/spot ``` ::: @@ -18,126 +19,4 @@ A Spot Instance uses spare EC2 capacity that is available for less than the On-D Spot Instances are a good fit for stateless, fault-tolerant, flexible applications. These include batch and machine learning training workloads, big data ETLs such as Apache Spark, queue processing applications, and stateless API endpoints. Because Spot is spare Amazon EC2 capacity, which can change over time, we recommend that you use Spot capacity for interruption-tolerant workloads. More specifically, Spot capacity is suitable for workloads that can tolerate periods where the required capacity isn't available. -# EKS managed node groups with Spot capacity - -In this module, we will first deploy a managed node group that creates Spot instances, followed by modifying the existing `catalog` component of our application to run on the newly created Spot instances. - -Let’s get started by listing all of the nodes in our existing EKS Cluster. The `kubectl get nodes` command can be used to list the nodes in your Kubernetes cluster, but to get additional detail about the capacity type, we'll use the `-L eks.amazonaws.com/capacityType` parameter. - -The following command shows that our nodes are currently **On-Demand** instances. - -```bash -$ kubectl get nodes -L eks.amazonaws.com/capacityType -NAME STATUS ROLES AGE VERSION CAPACITYTYPE -ip-10-42-103-103.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND -ip-10-42-142-197.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND -ip-10-42-161-44.us-east-2.compute.internal Ready 133m v1.25.6-eks-48e63af ON_DEMAND -``` - -:::tip -If you want to retrieve nodes based on a specific capacity type, such as `on-demand` instances, you can utilize "label selectors". In this particular scenario, you can achieve this by setting the label selector to `capacityType=ON_DEMAND`. - -```bash -$ kubectl get nodes -l eks.amazonaws.com/capacityType=ON_DEMAND - -NAME STATUS ROLES AGE VERSION -ip-10-42-10-119.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 -ip-10-42-10-200.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 -ip-10-42-11-94.us-east-2.compute.internal Ready 3d10h v1.23.15-eks-49d8fe8 -ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m v1.23.15-eks-49d8fe8 -``` -::: - -In the below diagram, there are two separate "node groups" representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances. Both are associated with the specified EKS cluster. - -![spot arch](../assets/managed-spot-arch.png) - -Let's create a node group with Spot instances. The following command creates a new node group `managed-spot`. - -```bash wait=30 -$ aws eks create-nodegroup \ ---cluster-name $EKS_CLUSTER_NAME \ ---nodegroup-name managed-spot \ ---node-role $SPOT_NODE_ROLE \ ---subnets $PRIMARY_SUBNET_1 $PRIMARY_SUBNET_2 $PRIMARY_SUBNET_3 \ ---instance-types m5.large m5d.large m5a.large m5ad.large m5n.large m5dn.large \ ---capacity-type SPOT \ ---scaling-config minSize=2,maxSize=3,desiredSize=2 \ ---disk-size 20 \ ---labels capacity_type=managed_spot -``` - -:::tip -The aws `eks wait nodegroup-active` command can be used to wait until a specific EKS node group is active and ready for use. This command is part of the AWS CLI and can be used to ensure that the specified node group has been successfully created and all the associated instances are running and ready. - -```bash wait=30 timeout=300 -$ aws eks wait nodegroup-active \ ---cluster-name $EKS_CLUSTER_NAME \ ---nodegroup-name managed-spot -``` -::: - -Once our new managed node group is **Active**, run the following command. - -```bash -$ kubectl get nodes -L eks.amazonaws.com/capacityType,eks.amazonaws.com/nodegroup - -NAME STATUS ROLES AGE VERSION CAPACITYTYPE NODEGROUP -ip-10-42-103-103.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default -ip-10-42-142-197.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default -ip-10-42-161-44.us-east-2.compute.internal Ready 3h38m v1.25.6-eks-48e63af ON_DEMAND default -ip-10-42-178-46.us-east-2.compute.internal Ready 103s v1.25.13-eks-43840fb SPOT managed-spot -ip-10-42-97-19.us-east-2.compute.internal Ready 104s v1.25.13-eks-43840fb SPOT managed-spot - -``` - -The output shows that two additional nodes got provisioned under the node group `managed-spot` with capacity type as `SPOT`. - -Next, let's modify our sample retail store application to run the catalog component on the newly created Spot instances. To do so, we'll utilize Kustomize to apply a patch to the `catalog` Deployment, adding a `nodeSelector` field with `capacity_type: managed_spot`. - -```kustomization -modules/fundamentals/mng/spot/deployment.yaml -Deployment/catalog -``` - -Apply the Kustomize patch with the following command. - -```bash -$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/spot - -namespace/catalog unchanged -serviceaccount/catalog unchanged -configmap/catalog unchanged -secret/catalog-db unchanged -service/catalog unchanged -service/catalog-mysql unchanged -deployment.apps/catalog configured -statefulset.apps/catalog-mysql unchanged -``` - -Ensure the successful deployment of your app with the following command. - -```bash -$ kubectl rollout status deployment/catalog -n catalog --timeout=5m -``` - -Finally, let's verify that the catalog pods are running on Spot instances. Run the following two commands. - -```bash -$ kubectl get pods -l app.kubernetes.io/component=service -n catalog -o wide - -NAME READY STATUS RESTARTS AGE IP NODE -catalog-6bf46b9654-9klmd 1/1 Running 0 7m13s 10.42.118.208 ip-10-42-99-254.us-east-2.compute.internal -``` -```bash -$ kubectl get nodes -l eks.amazonaws.com/capacityType=SPOT - -NAME STATUS ROLES AGE VERSION -ip-10-42-139-140.us-east-2.compute.internal Ready 16m v1.25.13-eks-43840fb -ip-10-42-99-254.us-east-2.compute.internal Ready 16m v1.25.13-eks-43840fb - -``` - -The first command tells us that the catalog pod is running on node `ip-10-42-99-254.us-east-2.compute.internal`, which we verify is a Spot instance by matching it to the output of the second command. - -In this lab, you deployed a managed node group that creates Spot instances, and then modified the `catalog` deployment to run on the newly created Spot instances. Following this process, you can modify any of the running deployments in the cluster by adding the `nodeSelector` parameter, as specified in the Kustomization patch above. \ No newline at end of file +In this lab we'll look at how we can leverage EC2 Spot capacity with EKS managed node groups. \ No newline at end of file diff --git a/website/docs/fundamentals/managed-node-groups/spot/instance-diversification.md b/website/docs/fundamentals/managed-node-groups/spot/instance-diversification.md new file mode 100644 index 000000000..97a243d2a --- /dev/null +++ b/website/docs/fundamentals/managed-node-groups/spot/instance-diversification.md @@ -0,0 +1,71 @@ +--- +title: "Instance type diversification" +sidebar_position: 10 +--- + +[Amazon EC2 Spot Instances](https://aws.amazon.com/ec2/spot/) offer spare compute capacity available in the AWS Cloud at steep discounts compared to On-Demand prices. EC2 can interrupt Spot Instances with two minutes of notification when EC2 needs the capacity back. You can use Spot Instances for various fault-tolerant and flexible applications. Some examples are analytics, containerized workloads, high-performance computing (HPC), stateless web servers, rendering, CI/CD, and other test and development workloads. + +One of the best practices to successfully adopt Spot Instances is to implement **Spot Instance diversification** as part of your configuration. Spot Instance diversification helps to procure capacity from multiple Spot Instance pools, both for scaling up and for replacing Spot Instances that may receive a Spot Instance termination notification. A Spot Instance pool is a set of unused EC2 instances with the same Instance type, operating system and Availability Zone (for example, `m5.large` on Red Hat Enterprise Linux in `us-east-1a`). + +### Cluster Autoscaler with Spot Instance Diversification + +Cluster Autoscaler is a tool that automatically adjusts the size of the Kubernetes cluster when there are pods that fail to run in the cluster due to insufficient resources (Scale Out) or there are nodes in the cluster that have been underutilized for a period of time (Scale In). + +:::tip +When using Spot Instances with [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) there are a few things that [should be considered](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md). One key consideration is, each Auto Scaling group should be composed of instance types that provide approximately equal capacity. Cluster Autoscaler will attempt to determine the CPU, memory, and GPU resources provided by an Auto Scaling Group based on first override provided in an ASG's Mixed Instances Policy. If any such overrides are found, only the first instance type found will be used. See [Using Mixed Instances Policies and Spot Instances](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md#Using-Mixed-Instances-Policies-and-Spot-Instances) for details. +::: + +When applying Spot diversification best practices to EKS and K8s clusters while using Cluster Autoscaler to dynamically scale capacity, we must implement diversification in a way that adheres to Cluster Autoscaler expected operational mode. + +We can diversify Spot Instance pools using two strategies: + + - By creating multiple node groups, each of different sizes. For example, a node group of size 4 vCPUs and 16GB RAM, and another node group of 8 vCPUs and 32GB RAM. + - By Implementing instance diversification within the node groups, by selecting a mix of instance types and families from different Spot Instance pools that meet the same vCPUs and memory criteria. + +In this workshop we will assume that our cluster node groups should be provisioned with instance types that have 2 vCPU and 4GiB of memory. + +We will use **[amazon-ec2-instance-selector](https://github.com/aws/amazon-ec2-instance-selector)** to help us select the relevant instance +types and families with sufficient number of vCPUs and RAM. + +There are over 350 different instance types available on EC2 which can make the process of selecting appropriate instance types difficult `amazon-ec2-instance-selector` helps you select compatible instance types for your application to run on. The command line interface can be passed resource criteria like vcpus, memory, network performance, and much more and then return the available, matching instance types. + +The CLI tool has be pre-installed in your IDE: + +```bash +$ ec2-instance-selector --version +``` + +Now that you have ec2-instance-selector installed, you can run `ec2-instance-selector --help` to understand how you could use it for selecting instances that match your workload requirements. For the purpose of this workshop we need to first get a group of instances that meet our target of 2 vCPUs and 4 GB of RAM. + +Run the following command to get the list of instances. + +```bash +$ ec2-instance-selector --vcpus 2 --memory 4 --gpus 0 --current-generation \ + -a x86_64 --deny-list 't.*' --output table-wide +Instance Type VCPUs Mem (GiB) Hypervisor Current Gen Hibernation Support CPU Arch Network Performance +------------- ----- --------- ---------- ----------- ------------------- -------- ------------------- +c5.large 2 4 nitro true true x86_64 Up to 10 Gigabit +c5a.large 2 4 nitro true false x86_64 Up to 10 Gigabit +c5ad.large 2 4 nitro true false x86_64 Up to 10 Gigabit +c5d.large 2 4 nitro true true x86_64 Up to 10 Gigabit +c6a.large 2 4 nitro true false x86_64 Up to 12.5 Gigabit +c6i.large 2 4 nitro true true x86_64 Up to 12.5 Gigabit +c6id.large 2 4 nitro true true x86_64 Up to 12.5 Gigabit +c6in.large 2 4 nitro true false x86_64 Up to 25 Gigabit +c7a.large 2 4 nitro true false x86_64 Up to 12.5 Gigabit +c7i.large 2 4 nitro true false x86_64 Up to 12.5 Gigabit +``` + +We'll use these instances when we define our node group in the next section. + +Internally `ec2-instance-selector` is making calls to the [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html) for the specific region and filtering the instances based on the criteria selected in the command line, in our case we filtered for instances that meet the following criteria: + + * Instances with no GPUs + * of x86_64 Architecture (no ARM instances like A1 or m6g instances for example) + * Instances that have 2 vCPUs and 4 GB of RAM + * Instances of current generation (4th gen onwards) + * Instances that don’t meet the regular expression `t.*` to filter out burstable instance types + +:::tip +Your workload may have other constraints that you should consider when selecting instance types. For example. **t2** and **t3** instance types are [burstable instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) and might not be appropriate for CPU bound workloads that require CPU execution determinism. Instances such as m5**a** are [AMD Instances](https://aws.amazon.com/ec2/amd/), if your workload is sensitive to numerical differences (i.e: financial risk calculations, industrial simulations) mixing these instance types might not be appropriate. +::: diff --git a/website/docs/fundamentals/managed-node-groups/spot/spot-workload.md b/website/docs/fundamentals/managed-node-groups/spot/spot-workload.md new file mode 100644 index 000000000..9d4fdbb1e --- /dev/null +++ b/website/docs/fundamentals/managed-node-groups/spot/spot-workload.md @@ -0,0 +1,51 @@ +--- +title: "Running a workload on Spot" +sidebar_position: 30 +--- + +Next, let's modify our sample retail store application to run the catalog component on the newly created Spot instances. To do so, we'll utilize Kustomize to apply a patch to the `catalog` Deployment, adding a `nodeSelector` field with `eks.amazonaws.com/capacityType: SPOT`. + +```kustomization +modules/fundamentals/mng/spot/deployment/deployment.yaml +Deployment/catalog +``` + +Apply the Kustomize patch with the following command. + +```bash +$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/spot/deployment + +namespace/catalog unchanged +serviceaccount/catalog unchanged +configmap/catalog unchanged +secret/catalog-db unchanged +service/catalog unchanged +service/catalog-mysql unchanged +deployment.apps/catalog configured +statefulset.apps/catalog-mysql unchanged +``` + +Ensure the successful deployment of your app with the following command. + +```bash +$ kubectl rollout status deployment/catalog -n catalog --timeout=5m +``` + +Finally, let's verify that the catalog pods are running on Spot instances. Run the following two commands. + +```bash +$ kubectl get pods -l app.kubernetes.io/component=service -n catalog -o wide + +NAME READY STATUS RESTARTS AGE IP NODE +catalog-6bf46b9654-9klmd 1/1 Running 0 7m13s 10.42.118.208 ip-10-42-99-254.us-east-2.compute.internal +$ kubectl get nodes -l eks.amazonaws.com/capacityType=SPOT + +NAME STATUS ROLES AGE VERSION +ip-10-42-139-140.us-east-2.compute.internal Ready 16m vVAR::KUBERNETES_NODE_VERSION +ip-10-42-99-254.us-east-2.compute.internal Ready 16m vVAR::KUBERNETES_NODE_VERSION + +``` + +The first command tells us that the catalog pod is running on node `ip-10-42-99-254.us-east-2.compute.internal`, which we verify is a Spot instance by matching it to the output of the second command. + +In this lab, you deployed a managed node group that creates Spot instances, and then modified the `catalog` deployment to run on the newly created Spot instances. Following this process, you can modify any of the running deployments in the cluster by adding the `nodeSelector` parameter, as specified in the Kustomization patch above. \ No newline at end of file From 9d80f042a83ee889e7820b94662030f1fc789d2d Mon Sep 17 00:00:00 2001 From: Niall Thomson Date: Fri, 3 Nov 2023 02:51:11 +0000 Subject: [PATCH 14/14] Restructure MNG in to a section with multiple labs --- cluster/eksctl/cluster.yaml | 2 + cluster/terraform/eks.tf | 4 ++ .../mng/{ => basics}/.workshop/cleanup.sh | 0 .../{ => basics}/.workshop/terraform/addon.tf | 0 .../mng/{ => basics}/taints/nodegroup.yaml | 0 .../nodeselector-w-toleration/deployment.yaml | 0 .../kustomization.yaml | 2 +- .../deployment.yaml | 0 .../kustomization.yaml | 2 +- .../managed-node-groups/_category_.json | 3 ++ .../{ => basics}/adding-nodes/index.md | 0 .../adding-nodes/tests/hook-add-node.sh | 0 .../adding-nodes/tests/hook-wait-node.sh | 0 .../{ => basics}/affinity/index.md | 0 .../{ => basics}/assets/added-nodes.png | Bin .../managed-node-groups/basics/index.md | 39 ++++++++++++++++++ .../{ => basics}/taints/configuring-taints.md | 5 ++- .../taints/implementing-tolerations.md | 8 ++-- .../{ => basics}/taints/index.md | 0 .../taints/tests/hook-configure-taints.sh | 0 .../taints/tests/hook-pending-pod.sh | 0 .../{ => basics}/tests/hook-suite.sh | 0 .../{ => basics}/upgrades/index.md | 0 .../fundamentals/managed-node-groups/index.md | 26 +----------- .../{ => spot}/assets/managed-spot-arch.png | Bin .../spot/create-spot-capacity.md | 2 +- 26 files changed, 59 insertions(+), 34 deletions(-) rename manifests/modules/fundamentals/mng/{ => basics}/.workshop/cleanup.sh (100%) rename manifests/modules/fundamentals/mng/{ => basics}/.workshop/terraform/addon.tf (100%) rename manifests/modules/fundamentals/mng/{ => basics}/taints/nodegroup.yaml (100%) rename manifests/modules/fundamentals/mng/{ => basics}/taints/nodeselector-w-toleration/deployment.yaml (100%) rename manifests/modules/fundamentals/mng/{ => basics}/taints/nodeselector-w-toleration/kustomization.yaml (72%) rename manifests/modules/fundamentals/mng/{ => basics}/taints/nodeselector-wo-toleration/deployment.yaml (100%) rename manifests/modules/fundamentals/mng/{ => basics}/taints/nodeselector-wo-toleration/kustomization.yaml (72%) create mode 100644 website/docs/fundamentals/managed-node-groups/_category_.json rename website/docs/fundamentals/managed-node-groups/{ => basics}/adding-nodes/index.md (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/adding-nodes/tests/hook-add-node.sh (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/adding-nodes/tests/hook-wait-node.sh (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/affinity/index.md (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/assets/added-nodes.png (100%) create mode 100644 website/docs/fundamentals/managed-node-groups/basics/index.md rename website/docs/fundamentals/managed-node-groups/{ => basics}/taints/configuring-taints.md (97%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/taints/implementing-tolerations.md (96%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/taints/index.md (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/taints/tests/hook-configure-taints.sh (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/taints/tests/hook-pending-pod.sh (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/tests/hook-suite.sh (100%) rename website/docs/fundamentals/managed-node-groups/{ => basics}/upgrades/index.md (100%) rename website/docs/fundamentals/managed-node-groups/{ => spot}/assets/managed-spot-arch.png (100%) diff --git a/cluster/eksctl/cluster.yaml b/cluster/eksctl/cluster.yaml index de897a098..880fd8a25 100644 --- a/cluster/eksctl/cluster.yaml +++ b/cluster/eksctl/cluster.yaml @@ -38,5 +38,7 @@ managedNodeGroups: instanceType: m5.large privateNetworking: true releaseVersion: 1.27.3-20230816 + updateConfig: + maxUnavailablePercentage: 50 labels: workshop-default: 'yes' diff --git a/cluster/terraform/eks.tf b/cluster/terraform/eks.tf index af7a06011..6b1ea6b7c 100644 --- a/cluster/terraform/eks.tf +++ b/cluster/terraform/eks.tf @@ -35,6 +35,10 @@ module "eks" { min_size = 3 max_size = 6 desired_size = 3 + + update_config = { + max_unavailable_percentage = 50 + } labels = { workshop-default = "yes" diff --git a/manifests/modules/fundamentals/mng/.workshop/cleanup.sh b/manifests/modules/fundamentals/mng/basics/.workshop/cleanup.sh similarity index 100% rename from manifests/modules/fundamentals/mng/.workshop/cleanup.sh rename to manifests/modules/fundamentals/mng/basics/.workshop/cleanup.sh diff --git a/manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf b/manifests/modules/fundamentals/mng/basics/.workshop/terraform/addon.tf similarity index 100% rename from manifests/modules/fundamentals/mng/.workshop/terraform/addon.tf rename to manifests/modules/fundamentals/mng/basics/.workshop/terraform/addon.tf diff --git a/manifests/modules/fundamentals/mng/taints/nodegroup.yaml b/manifests/modules/fundamentals/mng/basics/taints/nodegroup.yaml similarity index 100% rename from manifests/modules/fundamentals/mng/taints/nodegroup.yaml rename to manifests/modules/fundamentals/mng/basics/taints/nodegroup.yaml diff --git a/manifests/modules/fundamentals/mng/taints/nodeselector-w-toleration/deployment.yaml b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/deployment.yaml similarity index 100% rename from manifests/modules/fundamentals/mng/taints/nodeselector-w-toleration/deployment.yaml rename to manifests/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/deployment.yaml diff --git a/manifests/modules/fundamentals/mng/taints/nodeselector-w-toleration/kustomization.yaml b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/kustomization.yaml similarity index 72% rename from manifests/modules/fundamentals/mng/taints/nodeselector-w-toleration/kustomization.yaml rename to manifests/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/kustomization.yaml index f3561eda2..c244cf9b0 100644 --- a/manifests/modules/fundamentals/mng/taints/nodeselector-w-toleration/kustomization.yaml +++ b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- ../../../../../base-application/ui +- ../../../../../../base-application/ui patches: - path: deployment.yaml diff --git a/manifests/modules/fundamentals/mng/taints/nodeselector-wo-toleration/deployment.yaml b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/deployment.yaml similarity index 100% rename from manifests/modules/fundamentals/mng/taints/nodeselector-wo-toleration/deployment.yaml rename to manifests/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/deployment.yaml diff --git a/manifests/modules/fundamentals/mng/taints/nodeselector-wo-toleration/kustomization.yaml b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/kustomization.yaml similarity index 72% rename from manifests/modules/fundamentals/mng/taints/nodeselector-wo-toleration/kustomization.yaml rename to manifests/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/kustomization.yaml index f3561eda2..c244cf9b0 100644 --- a/manifests/modules/fundamentals/mng/taints/nodeselector-wo-toleration/kustomization.yaml +++ b/manifests/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- ../../../../../base-application/ui +- ../../../../../../base-application/ui patches: - path: deployment.yaml diff --git a/website/docs/fundamentals/managed-node-groups/_category_.json b/website/docs/fundamentals/managed-node-groups/_category_.json new file mode 100644 index 000000000..0d4475828 --- /dev/null +++ b/website/docs/fundamentals/managed-node-groups/_category_.json @@ -0,0 +1,3 @@ +{ + "collapsed": false +} diff --git a/website/docs/fundamentals/managed-node-groups/adding-nodes/index.md b/website/docs/fundamentals/managed-node-groups/basics/adding-nodes/index.md similarity index 100% rename from website/docs/fundamentals/managed-node-groups/adding-nodes/index.md rename to website/docs/fundamentals/managed-node-groups/basics/adding-nodes/index.md diff --git a/website/docs/fundamentals/managed-node-groups/adding-nodes/tests/hook-add-node.sh b/website/docs/fundamentals/managed-node-groups/basics/adding-nodes/tests/hook-add-node.sh similarity index 100% rename from website/docs/fundamentals/managed-node-groups/adding-nodes/tests/hook-add-node.sh rename to website/docs/fundamentals/managed-node-groups/basics/adding-nodes/tests/hook-add-node.sh diff --git a/website/docs/fundamentals/managed-node-groups/adding-nodes/tests/hook-wait-node.sh b/website/docs/fundamentals/managed-node-groups/basics/adding-nodes/tests/hook-wait-node.sh similarity index 100% rename from website/docs/fundamentals/managed-node-groups/adding-nodes/tests/hook-wait-node.sh rename to website/docs/fundamentals/managed-node-groups/basics/adding-nodes/tests/hook-wait-node.sh diff --git a/website/docs/fundamentals/managed-node-groups/affinity/index.md b/website/docs/fundamentals/managed-node-groups/basics/affinity/index.md similarity index 100% rename from website/docs/fundamentals/managed-node-groups/affinity/index.md rename to website/docs/fundamentals/managed-node-groups/basics/affinity/index.md diff --git a/website/docs/fundamentals/managed-node-groups/assets/added-nodes.png b/website/docs/fundamentals/managed-node-groups/basics/assets/added-nodes.png similarity index 100% rename from website/docs/fundamentals/managed-node-groups/assets/added-nodes.png rename to website/docs/fundamentals/managed-node-groups/basics/assets/added-nodes.png diff --git a/website/docs/fundamentals/managed-node-groups/basics/index.md b/website/docs/fundamentals/managed-node-groups/basics/index.md new file mode 100644 index 000000000..50268702a --- /dev/null +++ b/website/docs/fundamentals/managed-node-groups/basics/index.md @@ -0,0 +1,39 @@ +--- +title: MNG basics +sidebar_position: 30 +sidebar_custom_props: {"module": true} +--- + +:::tip Before you start +Prepare your environment for this section: + +```bash timeout=600 wait=30 +$ prepare-environment fundamentals/mng/basics +``` + +::: + +In the Getting started lab, we deployed our sample application to EKS and saw the running Pods. But where are these Pods running? + +We can inspect the default managed node group that was pre-provisioned for you: + +```bash +$ eksctl get nodegroup --cluster $EKS_CLUSTER_NAME --name $EKS_DEFAULT_MNG_NAME +``` + +There are several attributes of managed node groups that we can see from this output: +* Configuration of minimum, maximum and desired counts of the number of nodes in this group +* The instance type for this node group is `m5.large` +* Uses the `AL2_x86_64` EKS AMI type + + +We can also inspect the nodes and the placement in the availability zones. + +```bash +$ kubectl get nodes -o wide --label-columns topology.kubernetes.io/zone +``` + +You should see: +* Nodes are distributed over multiple subnets in various availability zones, providing high availability + +Over the course of this module we'll make changes to this node group to demonstrate the basic capabilities of MNGs. diff --git a/website/docs/fundamentals/managed-node-groups/taints/configuring-taints.md b/website/docs/fundamentals/managed-node-groups/basics/taints/configuring-taints.md similarity index 97% rename from website/docs/fundamentals/managed-node-groups/taints/configuring-taints.md rename to website/docs/fundamentals/managed-node-groups/basics/taints/configuring-taints.md index 28eeb1f6d..5ffb6dd4f 100644 --- a/website/docs/fundamentals/managed-node-groups/taints/configuring-taints.md +++ b/website/docs/fundamentals/managed-node-groups/basics/taints/configuring-taints.md @@ -6,7 +6,7 @@ sidebar_position: 10 For the purpose of this exercise we'll provision a separate managed node group which we'll apply taints to. ```file -manifests/modules/fundamentals/mng/taints/nodegroup.yaml +manifests/modules/fundamentals/mng/basics/taints/nodegroup.yaml ``` Note: This configuration file does not yet configure the taints, it only applies a label `tainted: 'yes'`. We will configure the taints on this node group further below. @@ -14,7 +14,8 @@ Note: This configuration file does not yet configure the taints, it only applies The following command creates this node group: ```bash timeout=600 hook=configure-taints -$ cat ~/environment/eks-workshop/modules/fundamentals/mng/taints/nodegroup.yaml | envsubst | eksctl create nodegroup -f - +$ cat ~/environment/eks-workshop/modules/fundamentals/mng/basics/taints/nodegroup.yaml \ + | envsubst | eksctl create nodegroup -f - ``` It will take *2-3* minutes for the node to join the EKS cluster, until you see this command give the following output: diff --git a/website/docs/fundamentals/managed-node-groups/taints/implementing-tolerations.md b/website/docs/fundamentals/managed-node-groups/basics/taints/implementing-tolerations.md similarity index 96% rename from website/docs/fundamentals/managed-node-groups/taints/implementing-tolerations.md rename to website/docs/fundamentals/managed-node-groups/basics/taints/implementing-tolerations.md index 532235777..6ef3980bd 100644 --- a/website/docs/fundamentals/managed-node-groups/taints/implementing-tolerations.md +++ b/website/docs/fundamentals/managed-node-groups/basics/taints/implementing-tolerations.md @@ -37,14 +37,14 @@ As anticipated, the application is running succesfully on a non-tainted node. Th Let's update our `ui` deployment to bind its pods to our tainted managed node group. We have pre-configured our tainted managed node group with a label of `tainted=yes` that we can use with a `nodeSelector`. The following `Kustomize` patch describes the changes needed to our deployment configuration in order to enable this setup: ```kustomization -modules/fundamentals/mng/taints/nodeselector-wo-toleration/deployment.yaml +modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/deployment.yaml Deployment/ui ``` To apply the Kustomize changes run the following command: ```bash -$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/taints/nodeselector-wo-toleration/ +$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/basics/taints/nodeselector-wo-toleration/ namespace/ui unchanged serviceaccount/ui unchanged configmap/ui unchanged @@ -94,12 +94,12 @@ Our changes are reflected in the new configuration of the `Pending` pod. We can To fix this, we need to add a toleration. Let's ensure our deployment and associated pods are able to tolerate the `frontend: true` taint. We can use the below `kustomize` patch to make the necessary changes: ```kustomization -modules/fundamentals/mng/taints/nodeselector-w-toleration/deployment.yaml +modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/deployment.yaml Deployment/ui ``` ```bash -$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/taints/nodeselector-w-toleration/ +$ kubectl apply -k ~/environment/eks-workshop/modules/fundamentals/mng/basics/taints/nodeselector-w-toleration/ namespace/ui unchanged serviceaccount/ui unchanged configmap/ui unchanged diff --git a/website/docs/fundamentals/managed-node-groups/taints/index.md b/website/docs/fundamentals/managed-node-groups/basics/taints/index.md similarity index 100% rename from website/docs/fundamentals/managed-node-groups/taints/index.md rename to website/docs/fundamentals/managed-node-groups/basics/taints/index.md diff --git a/website/docs/fundamentals/managed-node-groups/taints/tests/hook-configure-taints.sh b/website/docs/fundamentals/managed-node-groups/basics/taints/tests/hook-configure-taints.sh similarity index 100% rename from website/docs/fundamentals/managed-node-groups/taints/tests/hook-configure-taints.sh rename to website/docs/fundamentals/managed-node-groups/basics/taints/tests/hook-configure-taints.sh diff --git a/website/docs/fundamentals/managed-node-groups/taints/tests/hook-pending-pod.sh b/website/docs/fundamentals/managed-node-groups/basics/taints/tests/hook-pending-pod.sh similarity index 100% rename from website/docs/fundamentals/managed-node-groups/taints/tests/hook-pending-pod.sh rename to website/docs/fundamentals/managed-node-groups/basics/taints/tests/hook-pending-pod.sh diff --git a/website/docs/fundamentals/managed-node-groups/tests/hook-suite.sh b/website/docs/fundamentals/managed-node-groups/basics/tests/hook-suite.sh similarity index 100% rename from website/docs/fundamentals/managed-node-groups/tests/hook-suite.sh rename to website/docs/fundamentals/managed-node-groups/basics/tests/hook-suite.sh diff --git a/website/docs/fundamentals/managed-node-groups/upgrades/index.md b/website/docs/fundamentals/managed-node-groups/basics/upgrades/index.md similarity index 100% rename from website/docs/fundamentals/managed-node-groups/upgrades/index.md rename to website/docs/fundamentals/managed-node-groups/basics/upgrades/index.md diff --git a/website/docs/fundamentals/managed-node-groups/index.md b/website/docs/fundamentals/managed-node-groups/index.md index 47ed771ca..91acad1bc 100644 --- a/website/docs/fundamentals/managed-node-groups/index.md +++ b/website/docs/fundamentals/managed-node-groups/index.md @@ -1,7 +1,6 @@ --- title: Managed Node Groups sidebar_position: 30 -sidebar_custom_props: {"module": true} --- :::tip Before you start @@ -13,8 +12,6 @@ $ prepare-environment fundamentals/mng ::: -In the Getting started lab, we deployed our sample application to EKS and saw the running Pods. But where are these Pods running? - An EKS cluster contains one or more EC2 nodes that Pods are scheduled on. EKS nodes run in your AWS account and connect to the control plane of your cluster through the cluster API server endpoint. You deploy one or more nodes into a node group. A node group is one or more EC2 instances that are deployed in an EC2 Auto Scaling group. EKS nodes are standard Amazon EC2 instances. You're billed for them based on EC2 prices. For more information, see [Amazon EC2 pricing](https://aws.amazon.com/ec2/pricing/). @@ -31,25 +28,4 @@ Advantages of running Amazon EKS managed node groups include: * Node updates and terminations automatically and gracefully drain nodes to ensure that your applications stay available * No additional costs to use Amazon EKS managed node groups, pay only for the AWS resources provisioned -We can inspect the default managed node group that was pre-provisioned for you: - -```bash -$ eksctl get nodegroup --cluster $EKS_CLUSTER_NAME --name $EKS_DEFAULT_MNG_NAME -``` - -There are several attributes of managed node groups that we can see from this output: -* Configuration of minimum, maximum and desired counts of the number of nodes in this group -* The instance type for this node group is `m5.large` -* Uses the `AL2_x86_64` EKS AMI type - - -We can also inspect the nodes and the placement in the availability zones. - -```bash -$ kubectl get nodes -o wide --label-columns topology.kubernetes.io/zone -``` - -You should see: -* Nodes are distributed over multiple subnets in various availability zones, providing high availability - -Over the course of this module we'll make changes to this node group to demonstrate the capabilities of MNGs. +Tha labs in this section deal with various ways that EKS managed node groups can be used to provide compute capacity to a cluster. \ No newline at end of file diff --git a/website/docs/fundamentals/managed-node-groups/assets/managed-spot-arch.png b/website/docs/fundamentals/managed-node-groups/spot/assets/managed-spot-arch.png similarity index 100% rename from website/docs/fundamentals/managed-node-groups/assets/managed-spot-arch.png rename to website/docs/fundamentals/managed-node-groups/spot/assets/managed-spot-arch.png diff --git a/website/docs/fundamentals/managed-node-groups/spot/create-spot-capacity.md b/website/docs/fundamentals/managed-node-groups/spot/create-spot-capacity.md index 05d4dd6bd..d662ef125 100644 --- a/website/docs/fundamentals/managed-node-groups/spot/create-spot-capacity.md +++ b/website/docs/fundamentals/managed-node-groups/spot/create-spot-capacity.md @@ -33,7 +33,7 @@ ip-10-42-12-235.us-east-2.compute.internal Ready 4h34m vVAR::KUB In the below diagram, there are two separate "node groups" representing the managed node groups within the cluster. The first Node Group box represents the node group containing On-Demand instances while the second represents the node group containing Spot instances. Both are associated with the specified EKS cluster. -![spot arch](../assets/managed-spot-arch.png) +![spot arch](./assets/managed-spot-arch.png) Let's create a node group with Spot instances. The following command creates a new node group `managed-spot`.