From 7aeed21cbdccdbe9c7db2600a42ada17834289f2 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Sun, 15 Sep 2024 12:15:26 +0300 Subject: [PATCH 01/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 2470de4807..2c15a3d897 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -125,12 +125,31 @@ Above the sliders, Instance Types Selected indicates how many of the available i To restore the instance types in a VNG to the default configuration, click Restore to Default. This behaves as follows: - For a Custom VNG: The instance types are set to all the instance types that are available in the Default VNG. -- For Default VNG: The instance types are set to the default Ocean configuration, which means that all instance types are available. Then Ocean can choose any combination of instance types that best fit the workload requirements. +- For Default VNG: The instance types are set to the default Ocean configuration, meaning all instance types are available. Then, Ocean can choose any combination of instance types that best fit the workload requirements. Note that when you update the default VNG instance types, Ocean actually updates the Ocean cluster types since these have the same configuration. + +## Set Advanced Parameters via the Console + +This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization for scaling processes. + +In the Virtual Node Groups tab, scroll down to the Instance Types panel, which provides these options: + +* Manual Selection: You can manually define a list of instance types that Ocean can scale from: +* Automatic: Let Spot select your instance types and sizes according to the needs of your applications. +* Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. + + + + + + + + + ## Create a VNG from an ASG The following procedure describes how to create a VNG in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a VNG from an ASG. From be26d6a878671e4f991d6b39b45109caffb81c08 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Sun, 15 Sep 2024 12:56:54 +0300 Subject: [PATCH 02/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 2c15a3d897..41523c2e72 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -136,13 +136,29 @@ Note that when you update the default VNG instance types, Ocean actually updates This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization for scaling processes. -In the Virtual Node Groups tab, scroll down to the Instance Types panel, which provides these options: - -* Manual Selection: You can manually define a list of instance types that Ocean can scale from: -* Automatic: Let Spot select your instance types and sizes according to the needs of your applications. -* Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. +1. In the Virtual Node Groups tab, scroll down to the Instance Types panel, which provides these options: + * Manual Selection: You can manually define a list of instance types that Ocean can scale from: + * Automatic: Let Spot select your instance types and sizes according to the needs of your applications. + * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. +2. If you selected Manual,... +3. If you selected Automatic, click **Save** to complete the procedure. +4. If you selected Advanced Selection: In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. +The Advanced VM Size Filtering controls to the right of the VM Selection list let you filter these attributes for the VMs: + * Upper and lower limits for No. Of vCPUs (up to 256). + * Upper and lower limits for the Memory (up to 1024 GiB). + * Upper and lower limits for the No. Of GPUs (up to 8). + * GPU type. + * Exclude Series: You can exclude any series by clicking Exclude in the VM Selection List row for that series (or by typing the series in the Exclude Series field. The series then appears in the Exclude Series filter in the filtering controls. + * Include Series: You can include VMs in the Include Series field. For example, to select a GPU type, include the series and VM types. +VM Types. + * Architectures (values taken from your Virtual Node Group template). + * Disk performance (standard or premium). + * Minimum no of data disks (up to 64). + * Minimum no. of NICs (up to 16). + * Turn Accelerated networking on or off. + * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. @@ -210,7 +226,7 @@ To see the configuration details of a VNG, click on the Name of the VNG. ### Edit in JSON Format -In the console, you can also review and edit the configuration directly in JSON format. This provides more flexibility and enables you to utilize VNG features that are supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API, but are not yet accessible in the UI.) +You can also review and edit the configuration directly in JSON format in the console. This provides more flexibility and enables you to utilize VNG features that are supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API, but are not yet accessible in the UI.) 1. To review and edit a VNG in JSON format, go to the Virtual Node Groups tab and click on the Name of the VNG. 2. Click JSON on the upper right. From 9e477c23079452ca5dc14ff2b47ef548e1fee83d Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Sun, 15 Sep 2024 14:45:39 +0300 Subject: [PATCH 03/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 41523c2e72..9dd32a688b 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -142,6 +142,8 @@ This section describes selecting instance sizes in your cluster per Virtual Node * Automatic: Let Spot select your instance types and sizes according to the needs of your applications. * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. +![aws-instance-panel](https://github.com/user-attachments/assets/2a8feba5-6817-4ad3-975e-62b653eb30ba) + 2. If you selected Manual,... 3. If you selected Automatic, click **Save** to complete the procedure. 4. If you selected Advanced Selection: In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. From 4871a2e998450290d3730b0a84d504abc1d6415f Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:28:35 +0300 Subject: [PATCH 04/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 80 ++++++++++--------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 9dd32a688b..5776868b39 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -1,41 +1,35 @@ -# Manage Virtual Node Groups +# Manage AWS Virtual Node Groups -[Virtual Node Groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. - -This tutorial describes how to create, view, edit, and delete VNGs in Ocean. +Cloud service provider relevance: AWS Kubernetes -## Relevance +This topic describes how to work with Virtual Mode Groups for AWS Kubernetes. -The following procedures are relevant for users of Ocean Kubernetes on AWS. +[Virtual Node Groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. ## Prerequisites -- An Ocean cluster up and running - -## Create a VNG - -This procedure describes how to create a VNG from scratch. +An Ocean cluster up and running -1. In the console, go to Ocean/Cloud Clusters and click the Ocean Cluster you want to add a VNG to. -2. Click the Virtual Node Groups tab. +## Create a Virtual Node Group From Scratch - +1. In the left main menu, click **Ocean > Cloud Clusters**. +2. Select a cluster from the list of clusters. +3. Click the **Virtual Node Groups** tab +4. Click **Create VNG**. -3. Click Create New Virtual Node Group. - - +![import-or-manual](https://github.com/user-attachments/assets/63cb8805-eb79-449c-858e-dc3d483bb473) -4. Click Configure Manually or choose to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) (AWS) or Node Pool (AKS and GKE). -5. Click Continue. +4. Click **Configure Manually** or choose to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) (AWS) or Node Pool (AKS and GKE). +5. Click **Continue**. When you choose Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Afterwards, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. ### New Virtual Node Group Page 1. In the New Virtual Node Group page, enter the VNG parameters you want to customize. Parameters that are left blank use values from the default VNG, as indicated in the illustration below. -2. When you have finished customizing the VNG, click Save. The VNG parameters are described below. +2. When you have finished customizing the Virtual Node Group, click **Save**. The VNG parameters are described below. - +![create-custom-vng](https://github.com/user-attachments/assets/1dd6db4f-b7e5-40fa-a5d9-26680179a59e) ## Configuration Parameters @@ -58,14 +52,17 @@ This section enables you to inform Ocean about the labels and taints that are se ## Advanced Parameters -- Maximum Nodes: The upper limit number of instances that you can scale up to. -- Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec at the same time. -- Tags: Key and Value pairs used to apply tags on the EC2 machine. Specific tags can be applied per VNG. -- Headroom: Spare resource capacity management enabling fast assignment of Pods without waiting for new resources to launch. -- Reserve: The number of units to retain as headroom, where each unit has the defined headroom CPU and memory. -- CPU (millicpu): Optionally configure the number of CPUs to allocate to the headroom. CPUs are denoted in millicores, where 1000 millicores = 1 vCPU. -- Memory (MiB): Optionally configure the amount of memory (MiB) to allocate to the headroom. -- GPUs: Optionally configure the number of GPUs to allocate for headroom unit. +* Maximum Nodes: The upper limit number of instances that you can scale up to. +* Minimum Nodes: +* Spot %: The percentage of spot nodes to use in the Virtual Node Group. +* Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this Virtual Node Group for bin packing purposes unless they are empty. +* Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec at the same time. +* Tags: Key and Value pairs used to apply tags on the EC2 machine. Specific tags can be applied per VNG. +* Headroom: Spare resource capacity management enabling fast assignment of Pods without waiting for new resources to launch. + * Reserve: The number of units to retain as headroom, where each unit has the defined headroom CPU and memory. + * CPU (millicpu): You can optionally configure the number of CPUs to allocate to the headroom. CPUs are denoted in millicuries, where 1000 millicuries = 1 vCPU. + * Memory (MiB): You can optionally configure the amount of memory (MiB) to allocate to the headroom. + * GPUs: Optionally configure the number of GPUs to allocate for headroom unit. ## Example: GPU Instance @@ -81,6 +78,8 @@ You can use a node selector or node affinity that requires your GPU-based pods t ## Choose Instance Types per VNG +**I ASSUME THAT THIS NOW STARTS WITH MANUAL SELECTION** + To choose spot instance types for a specific VNG, do the following: 1. Go to Clusters in the left menu tree and click the name of the relevant Ocean cluster. @@ -132,7 +131,7 @@ Note that when you update the default VNG instance types, Ocean actually updates -## Set Advanced Parameters via the Console +## Configure Instance Types This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization for scaling processes. @@ -142,11 +141,23 @@ This section describes selecting instance sizes in your cluster per Virtual Node * Automatic: Let Spot select your instance types and sizes according to the needs of your applications. * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. -![aws-instance-panel](https://github.com/user-attachments/assets/2a8feba5-6817-4ad3-975e-62b653eb30ba) +![aws-instance-panel](https://github.com/user-attachments/assets/28053b9c-359c-406a-b158-5be3c8d7caee) 2. If you selected Manual,... 3. If you selected Automatic, click **Save** to complete the procedure. -4. If you selected Advanced Selection: In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. +4. If you selected Advanced Selection: + + +### Configure Instance Types Manually + +![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d83b3563-ea28-49e4-be5e-25ddb406e3a1) + +### Configure Instance Types Using Advanced Filters + +![advanced-filters](https://github.com/user-attachments/assets/e7b40473-c45d-432f-a50b-166f9411f047) + + +In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. The Advanced VM Size Filtering controls to the right of the VM Selection list let you filter these attributes for the VMs: * Upper and lower limits for No. Of vCPUs (up to 256). * Upper and lower limits for the Memory (up to 1024 GiB). @@ -163,11 +174,6 @@ VM Types. * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. - - - - - ## Create a VNG from an ASG The following procedure describes how to create a VNG in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a VNG from an ASG. From 10600e20dc00529690adc9ced8bbe3c23866ccc2 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:43:16 +0300 Subject: [PATCH 05/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 5776868b39..971f8b896c 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -147,10 +147,9 @@ This section describes selecting instance sizes in your cluster per Virtual Node 3. If you selected Automatic, click **Save** to complete the procedure. 4. If you selected Advanced Selection: - ### Configure Instance Types Manually -![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d83b3563-ea28-49e4-be5e-25ddb406e3a1) +![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/b116f33a-d93c-43ce-bed8-9e0225be3770) ### Configure Instance Types Using Advanced Filters @@ -174,7 +173,7 @@ VM Types. * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. -## Create a VNG from an ASG +## Create a VNG from an Autoscaling Group The following procedure describes how to create a VNG in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a VNG from an ASG. From 9a6589d4e21aa2b7324d4e03789fd238b5d40915 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:22:08 +0300 Subject: [PATCH 06/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 971f8b896c..2301eb9037 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -111,13 +111,6 @@ The instance types that are grayed out are disabled for the following reasons: When you hover the cursor over the instance type, a tooltip appears stating which reason. -### Use the Sliders - -Instead of unmarking individual instances, you can use the vCPU, memory, or GPU sliders. When you use these, the instance types that are not in the range will be unmarked automatically. - - - -Above the sliders, Instance Types Selected indicates how many of the available instances you have marked (specifically: number of instances marked/number of instances available). This figure changes automatically when you move the sliders or when click or unclick instances. There are similar indicators in the Types column. For example, the illustration above shows that you have marked two Compute Optimized instances out of four that are available. ### Restore to Default @@ -141,7 +134,7 @@ This section describes selecting instance sizes in your cluster per Virtual Node * Automatic: Let Spot select your instance types and sizes according to the needs of your applications. * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. -![aws-instance-panel](https://github.com/user-attachments/assets/28053b9c-359c-406a-b158-5be3c8d7caee) +![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) 2. If you selected Manual,... 3. If you selected Automatic, click **Save** to complete the procedure. @@ -149,12 +142,11 @@ This section describes selecting instance sizes in your cluster per Virtual Node ### Configure Instance Types Manually -![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/b116f33a-d93c-43ce-bed8-9e0225be3770) +![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d1f79716-509a-49c3-be33-7583a05c9ecb) ### Configure Instance Types Using Advanced Filters -![advanced-filters](https://github.com/user-attachments/assets/e7b40473-c45d-432f-a50b-166f9411f047) - +![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. The Advanced VM Size Filtering controls to the right of the VM Selection list let you filter these attributes for the VMs: @@ -172,6 +164,13 @@ VM Types. * Turn Accelerated networking on or off. * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. +## Instance Parameters Available via API Only + + + + + + ## Create a VNG from an Autoscaling Group From 3867548c9b0065442f9ae1bb693a8e8bbddd0b8a Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:49:23 +0300 Subject: [PATCH 07/33] Update manage-virtual-node-groups.md --- .../ocean/tutorials/manage-virtual-node-groups.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 2301eb9037..a3f6952ffd 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -166,6 +166,19 @@ VM Types. ## Instance Parameters Available via API Only +* Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". +* Disk Types: NVMe, EBS, SSD, HDD. +* Excude Families: Types that will not be available for scaling (asterisk wildcard is also supported). For example, C* will exclude instance types from these families: c5, c4, c4a, etc. +* Exclude Metal: Metal types will not be available for scaling when set to true. +* Hypervisor TYpes: nitro, xen. +* Include Families: Types that will be available for scaling (asterisk wildcard is also supported). For example, C* will include instance types from these families: c5, c4, c4a, etc. +* Ena Support: Ena support when set to True. +* Max GPU: Maximum total number of GPUs. +* Max. Memory (GIB): Maximum amount of Memory (GiB). +* Max. Network Performance: Maximum Bandwidth in Gib/s of network performance. +* Max. vCPU: Maximum number of vCPUs available. +* Min. ENIs: Minimum number of network interfaces (ENIs). +* Min GPUs: Minimum total number of GPUs. From de56dbd43a2dde03caa3c4143aac38bdd572c949 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:16:15 +0300 Subject: [PATCH 08/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 224 +++++++----------- 1 file changed, 86 insertions(+), 138 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index a3f6952ffd..dfee740c54 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -8,45 +8,67 @@ This topic describes how to work with Virtual Mode Groups for AWS Kubernetes. ## Prerequisites -An Ocean cluster up and running +An Ocean cluster is up and running. -## Create a Virtual Node Group From Scratch +## Access the Virtual Node Groups Tab -1. In the left main menu, click **Ocean > Cloud Clusters**. +1. Click **Ocean > Cloud Clusters** in the left main menu. 2. Select a cluster from the list of clusters. 3. Click the **Virtual Node Groups** tab -4. Click **Create VNG**. + +The Virtual Node Groups tab lets you track live data per Virtual Node Group. You can review the resource allocation, number of nodes and pods running, and other information about the Virtual Node Groups. + +The Virtual Node Groups Summary List can display the following columns: + +* ID: The identification code of the VNG. +* Name: The user-defined name of the VNG. (If a VNG was defined without a time, it will appear in this column as Unnamed Virtual Node Group.) +* Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently used by the VNG. +* Running Pods: Number of pods the VNG currently uses. +* Nodes: Number of nodes the VNG currently uses. +* Node Labels: Number of node labels the VNG uses. +* Node Taints: Number of taints the VNG uses. +* Tags: Number of tags the VNG uses. +* Max Nodes: The maximum number of nodes defined for the VNG. + +> Notes: +> - Click the three dots on the right to select which columns to display in the list. +> - Use the search box to filter items in the list or search for a specific Virtual Node Group. +> - To view the configuration details of a Virtual Node Group, click on its Name. + +## Create a Virtual Node Group + +1. Click **Create VNG** in the Virtual Node Groups tab. ![import-or-manual](https://github.com/user-attachments/assets/63cb8805-eb79-449c-858e-dc3d483bb473) -4. Click **Configure Manually** or choose to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) (AWS) or Node Pool (AKS and GKE). -5. Click **Continue**. +2. Click **Configure Manually** or choose to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) (AWS) or Node Pool (AKS and GKE). +3. Click **Continue**. -When you choose Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Afterwards, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. +When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. ### New Virtual Node Group Page -1. In the New Virtual Node Group page, enter the VNG parameters you want to customize. Parameters that are left blank use values from the default VNG, as indicated in the illustration below. -2. When you have finished customizing the Virtual Node Group, click **Save**. The VNG parameters are described below. +1. On the New Virtual Node Group page, enter the Virtual Node Group parameters you want to customize. Parameters left blank use values from the default VNG, as indicated in the illustration below. +2. After customizing the Virtual Node Group, click **Save**. The VNG parameters are described below. ![create-custom-vng](https://github.com/user-attachments/assets/1dd6db4f-b7e5-40fa-a5d9-26680179a59e) ## Configuration Parameters -- Name: The name you assign to the new VNG. -- Image: The Amazon machine image (AMI) used for the VNG. -- Security Groups: The security groups that apply to the VNG. You can choose up to five groups as per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups). -- Subnets: The subnets that apply to the VNG. You can choose multiple subnets. -- Root Volume Size: The root volume size in GiB. This field and blockDeviceMappings cannot be used in the same VNG. -- Instance Profile: The iamRole object applicable to the instance profile. -- User Data (Startup Script): The user data script to be set in Base64-encoded MIME. +* Name: The name you assign to the new Virtual Node Group. +* Image: The Amazon machine image (AMI) used for the Virtual Node Group. +* Security Groups: The security groups that apply to the VNG. You can choose up to five groups as per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups). +* Subnets: The subnets that apply to the VNG. You can choose multiple subnets. +* Root Volume Size: The root volume size in GiB. This field and `blockDeviceMappings` cannot be used in the same VNG. +* Instance Profile: The iamRole object that is applicable to the instance profile. +* User Data (Startup Script): User data script to set in Base64-encoded MIME. ### Node Selection Parameters -This section enables you to inform Ocean about the labels and taints that are set on the nodes. When they are set, Ocean will use them to choose the right VNG for a pending pod. +This section lets you inform Ocean about the labels and taints set on the nodes. Ocean will use them to select the right VNG for a pending pod when they are set. -- Node Labels: Key/Value pairs defined on the Kubernetes nodes. -- Node [Taints](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/): Triplets of Key, Value, and Effect defined on the Kubernetes nodes. +* Node Labels: Key/Value pairs defined on the Kubernetes nodes. +* Node [Taints](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/): Triplets of Key, Value, and Effect defined on the Kubernetes nodes. > **Important**: **You must enter custom labels in both the VNG Node Selection configuration and in the VNG User Data (Startup Script) configuration for the labels to take full effect. For Kubernetes user data, see [Create Custom Labels](https://docs.spot.io/ocean/tutorials/create-custom-labels).** @@ -54,19 +76,19 @@ This section enables you to inform Ocean about the labels and taints that are se * Maximum Nodes: The upper limit number of instances that you can scale up to. * Minimum Nodes: -* Spot %: The percentage of spot nodes to use in the Virtual Node Group. +* Spot %: The percentage of spot nodes used in the Virtual Node Group. * Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this Virtual Node Group for bin packing purposes unless they are empty. -* Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec at the same time. -* Tags: Key and Value pairs used to apply tags on the EC2 machine. Specific tags can be applied per VNG. +* Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec simultaneously. +* Tags: Key and Value pairs are used to apply tags to the EC2 machine. Specific tags can be applied per VNG. * Headroom: Spare resource capacity management enabling fast assignment of Pods without waiting for new resources to launch. - * Reserve: The number of units to retain as headroom, where each unit has the defined headroom CPU and memory. + * Reserve: The number of units to retain as headroom, each with the defined headroom CPU and memory. * CPU (millicpu): You can optionally configure the number of CPUs to allocate to the headroom. CPUs are denoted in millicuries, where 1000 millicuries = 1 vCPU. * Memory (MiB): You can optionally configure the amount of memory (MiB) to allocate to the headroom. - * GPUs: Optionally configure the number of GPUs to allocate for headroom unit. + * GPUs: Optionally configure the number of GPUs to allocate for the headroom unit. ## Example: GPU Instance -If a pod requires a GPU instance, add the relevant GPU image in a VNG. Ocean will spin up instances accordingly. Specific labels are not required in this case. Example: +Add the relevant GPU image in a Virtual Node Group if a pod requires a GPU instance. Ocean will spin up instances accordingly. Specific labels are not required in this case. Example: ``` resources: @@ -76,73 +98,39 @@ resources: You can use a node selector or node affinity that requires your GPU-based pods to select the specific VNG containing the GPU image, based on the custom node label configured in the GPU VNG. -## Choose Instance Types per VNG - -**I ASSUME THAT THIS NOW STARTS WITH MANUAL SELECTION** - -To choose spot instance types for a specific VNG, do the following: - -1. Go to Clusters in the left menu tree and click the name of the relevant Ocean cluster. -2. Click the Virtual Node Groups tab and click the name of the relevant VNG in the list. - - - -3. In the VNG page, scroll down until you see Instance Types and click Customize Instance Types. - - - -4. Complete the Instance Types configuration as described below and then click Save. - -### Configure Instance Types - -The instance types shown in the default VNG are only the instance types supported in the region that the cluster is configured in. - -In the custom VNGs, Ocean automatically filters out instance types that are not selected in the default VNG and instance types that do not meet the AMI architecture of the custom VNG. - - - -1. Click an arrow to see the available instance options. -2. Unmark the available options, as needed. - -The instance types that are grayed out are disabled for the following reasons: - -- Does not exist in the default VNG. -- Does not fit the AMI architecture. + -When you hover the cursor over the instance type, a tooltip appears stating which reason. +## Configure Instance Types per Virtual Node Group -### Restore to Default +This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization to scale processes. -To restore the instance types in a VNG to the default configuration, click Restore to Default. This behaves as follows: +1. In the Virtual Node Groups tab, scroll down to the Instance Types panel and select one of the options: -- For a Custom VNG: The instance types are set to all the instance types that are available in the Default VNG. -- For Default VNG: The instance types are set to the default Ocean configuration, meaning all instance types are available. Then, Ocean can choose any combination of instance types that best fit the workload requirements. + * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() + * Automatic: Let Spot select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. + * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. See [Configure Instance Types Using Advanced Filters]() -Note that when you update the default VNG instance types, Ocean actually updates the Ocean cluster types since these have the same configuration. +![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) - +### Configure Instance Types Manually +![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d1f79716-509a-49c3-be33-7583a05c9ecb) -## Configure Instance Types +The instance types shown in the default Virtual Node Group are only those supported in the cluster's region. -This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization for scaling processes. +In other Virtual Node Groups, Ocean automatically grays out instance types that are not selected in the default Virtual Node Group and instance types that do not meet AMI architecture requirements for the specific Virtual Node Group. Hover over the instance type to view the reason. -1. In the Virtual Node Groups tab, scroll down to the Instance Types panel, which provides these options: +1. Click the name of the Virtual Node Group to configure. +2. Click COnfigure????? +3. Click a down arrow to see the available instance options. Check/uncheck options as required. - * Manual Selection: You can manually define a list of instance types that Ocean can scale from: - * Automatic: Let Spot select your instance types and sizes according to the needs of your applications. - * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. +Click **Restore to Default** to restore the instance types in a Virtual Node Group to their default configuration. -![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) +* For the default VNG: The instance types are set to the default Ocean configuration to make all instance types available. Then, Ocean can choose any combination of instance types that best fits the workload requirements. +* For other Virtual Node Groups: The instance types are those available in the Default Virtual Node Group. -2. If you selected Manual,... -3. If you selected Automatic, click **Save** to complete the procedure. -4. If you selected Advanced Selection: - -### Configure Instance Types Manually - -![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d1f79716-509a-49c3-be33-7583a05c9ecb) +>**Note**: When you update the default Virtual Node Group instance types, Ocean updates the Ocean cluster types since these have the same configuration. ### Configure Instance Types Using Advanced Filters @@ -164,7 +152,9 @@ VM Types. * Turn Accelerated networking on or off. * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. -## Instance Parameters Available via API Only +## Instance Parameters Available via API + +See [Spot API](https://docs.spot.io/api/#tag/Ocean-AWS/operation/OceanAWSLaunchSpecCreate) * Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". * Disk Types: NVMe, EBS, SSD, HDD. @@ -174,81 +164,40 @@ VM Types. * Include Families: Types that will be available for scaling (asterisk wildcard is also supported). For example, C* will include instance types from these families: c5, c4, c4a, etc. * Ena Support: Ena support when set to True. * Max GPU: Maximum total number of GPUs. +* Min. GPUs: Minimum total number of GPUs. * Max. Memory (GIB): Maximum amount of Memory (GiB). +* Min. Memory (GiBs): Minimum amount of Memory (GiB). * Max. Network Performance: Maximum Bandwidth in Gib/s of network performance. +* Min. Network Performance: Minimum Bandwidth in Gib/s of network performance. * Max. vCPU: Maximum number of vCPUs available. +* Min. vCPU: Minimum number of vCPUs available. * Min. ENIs: Minimum number of network interfaces (ENIs). -* Min GPUs: Minimum total number of GPUs. - - - - - ## Create a VNG from an Autoscaling Group -The following procedure describes how to create a VNG in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a VNG from an ASG. +IS THIS STILL VALID??? + +This section describes creating a Virtual Node Group in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a Virtual Node Group from an Autoscaling Group (ASG). 1. In the console, go to Ocean/Cloud Clusters and click the Cluster Name you want to add a VNG to. 2. In the summary page for the cluster, click Virtual Node Groups. 3. Click Create New Virtual Node Group. -4. Choose Import configurations from an Autoscaling Group, choose the Autoscaling Group in the dropdown list, and click Continue. +4. Choose Import Configurations from an Autoscaling Group, choose the Autoscaling Group in the dropdown list, and click Continue. -5. When the New Virtual Node Group page appears, you will see the fields populated with the values from the Autoscaling Group you chose. Review all of the parameters and update them if necessary. +5. When the New Virtual Node Group page appears, the fields will be populated with the values from the Autoscaling Group you chose. Review all of the parameters and update them if necessary. 6. When you are finished reviewing and updating the imported configuration, click Save. -## View VNGs - -Ocean provides a dashboard that enables you to track live data per VNG. You can review the resource allocation, number of nodes and pods running, and other information about the VNGs. - -1. In the console, go to Ocean/Cloud Clusters and click the Cluster you want to add a VNG to. -2. Click the Virtual Node Groups tab. The Virtual Node Groups tab opens and displays a summary of all the VNGs defined in the Ocean cluster. - - +## Edit a Virtual Node Group -### VNG Summary Table +* Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List. -The VNG summary table can display the following columns: +### Edit a Virtual Node Group in JSON Format -- ID: The identification code of the VNG. -- Name: The user-defined name of the VNG. (If a VNG was defined without a time, it will appear in this column as Unnamed Virtual Node Group.) -- Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently used by the VNG. -- Running Pods: Number of pods the VNG currently uses. -- Nodes: Number of nodes the VNG currently uses. -- Node Labels: Number of node labels the VNG uses. -- Node Taints: Number of taints the VNG uses. -- Tags: Number of tags the VNG uses. -- Max Nodes: The maximum number of nodes defined for the VNG. +You can also review and edit the configuration directly in JSON format in the console. This provides more flexibility and enables you to utilize VNG features supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API but are not yet accessible in the console.) -You can change the sort order in the table by clicking on the column headings. - -### Choose Columns - -To choose which columns to display in the table, click the three dots on the right. - - - -### Filter List - -Use the search box to filter items in the table or search for a specific VNG. - -### VNG Details - -To see the configuration details of a VNG, click on the Name of the VNG. - -## Edit a VNG - -1. To edit the configuration of a VNG, go to the Virtual Node Groups tab and click on the Name of the VNG. -2. Make the required changes in the configuration and click Save. - -### Edit in JSON Format - -You can also review and edit the configuration directly in JSON format in the console. This provides more flexibility and enables you to utilize VNG features that are supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API, but are not yet accessible in the UI.) - -1. To review and edit a VNG in JSON format, go to the Virtual Node Groups tab and click on the Name of the VNG. -2. Click JSON on the upper right. +* Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List, and click **JSON** on the upper right. @@ -256,8 +205,7 @@ In this view, you can see the full JSON configuration of the VNG. If you would l ## Delete a VNG -1. To delete a VNG, go to the Virtual Node Groups tab. -2. In the VNG summary table, mark the VNG(s) to delete and click Delete. - -Alternatively, if you are already on the configuration page of a VNG, just click Delete VNG at the bottom. +In the Virtual Node Groups summary list, check the Virtual Node Groups to delete and click **Delete**. +OR +If you are already configuring a Virtual Node Group, click *8Delete VNG** at the bottom. From e59c58adba68c297891fc5733b54bc4e885749b7 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:50:47 +0300 Subject: [PATCH 09/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index dfee740c54..d6d1ca3d17 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -1,6 +1,6 @@ # Manage AWS Virtual Node Groups -Cloud service provider relevance: AWS Kubernetes +Cloud service provider relevance: AWS Kubernetes and EKS This topic describes how to work with Virtual Mode Groups for AWS Kubernetes. @@ -41,7 +41,10 @@ The Virtual Node Groups Summary List can display the following columns: ![import-or-manual](https://github.com/user-attachments/assets/63cb8805-eb79-449c-858e-dc3d483bb473) -2. Click **Configure Manually** or choose to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) (AWS) or Node Pool (AKS and GKE). +2. Select one of these options: + * Click **Configure Manually** + * For AWS Kubernetes only, select to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) + * For EKS only, select to import from an existing [node group](NEED LINK) 3. Click **Continue**. When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. From 7724d9ccd07250c26de35fa9ac8da7c635d2d700 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:55:00 +0300 Subject: [PATCH 10/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index d6d1ca3d17..a8584ba779 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -48,6 +48,9 @@ The Virtual Node Groups Summary List can display the following columns: 3. Click **Continue**. When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. +Review all of the parameters and update them if necessary before saving. + +If you are configuring manually, see [New Virtual Node Group Page]() ### New Virtual Node Group Page @@ -176,22 +179,6 @@ See [Spot API](https://docs.spot.io/api/#tag/Ocean-AWS/operation/OceanAWSLaunchS * Min. vCPU: Minimum number of vCPUs available. * Min. ENIs: Minimum number of network interfaces (ENIs). -## Create a VNG from an Autoscaling Group - -IS THIS STILL VALID??? - -This section describes creating a Virtual Node Group in an Ocean cluster using the configuration from an existing Amazon autoscaling group. This process is referred to as importing a Virtual Node Group from an Autoscaling Group (ASG). - -1. In the console, go to Ocean/Cloud Clusters and click the Cluster Name you want to add a VNG to. -2. In the summary page for the cluster, click Virtual Node Groups. -3. Click Create New Virtual Node Group. -4. Choose Import Configurations from an Autoscaling Group, choose the Autoscaling Group in the dropdown list, and click Continue. - - - -5. When the New Virtual Node Group page appears, the fields will be populated with the values from the Autoscaling Group you chose. Review all of the parameters and update them if necessary. -6. When you are finished reviewing and updating the imported configuration, click Save. - ## Edit a Virtual Node Group * Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List. From 36d258cfd01bc3925ba0fd34e0a2c67bdbf6dde9 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:26:36 +0300 Subject: [PATCH 11/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index a8584ba779..6ba53cbc58 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -144,23 +144,6 @@ Click **Restore to Default** to restore the instance types in a Virtual Node Gro In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. The Advanced VM Size Filtering controls to the right of the VM Selection list let you filter these attributes for the VMs: - * Upper and lower limits for No. Of vCPUs (up to 256). - * Upper and lower limits for the Memory (up to 1024 GiB). - * Upper and lower limits for the No. Of GPUs (up to 8). - * GPU type. - * Exclude Series: You can exclude any series by clicking Exclude in the VM Selection List row for that series (or by typing the series in the Exclude Series field. The series then appears in the Exclude Series filter in the filtering controls. - * Include Series: You can include VMs in the Include Series field. For example, to select a GPU type, include the series and VM types. -VM Types. - * Architectures (values taken from your Virtual Node Group template). - * Disk performance (standard or premium). - * Minimum no of data disks (up to 64). - * Minimum no. of NICs (up to 16). - * Turn Accelerated networking on or off. - * Click Apply to filter the VM Selection list. All your filters are applied to the VM list. A color-coded bar appears above the list to provide a rating for the applied filter. - -## Instance Parameters Available via API - -See [Spot API](https://docs.spot.io/api/#tag/Ocean-AWS/operation/OceanAWSLaunchSpecCreate) * Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". * Disk Types: NVMe, EBS, SSD, HDD. @@ -179,6 +162,8 @@ See [Spot API](https://docs.spot.io/api/#tag/Ocean-AWS/operation/OceanAWSLaunchS * Min. vCPU: Minimum number of vCPUs available. * Min. ENIs: Minimum number of network interfaces (ENIs). +You can also configure these parameters via the [Spot API](https://docs.spot.io/api/#tag/Ocean-AWS/operation/OceanAWSLaunchSpecCreate) + ## Edit a Virtual Node Group * Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List. From 5fa3ab456d826e231d768b3e3b9a71352905c357 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 23 Sep 2024 19:35:13 +0300 Subject: [PATCH 12/33] Update manage-virtual-node-groups.md --- .../ocean/tutorials/manage-virtual-node-groups.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 6ba53cbc58..e53ba200ea 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -18,7 +18,9 @@ An Ocean cluster is up and running. The Virtual Node Groups tab lets you track live data per Virtual Node Group. You can review the resource allocation, number of nodes and pods running, and other information about the Virtual Node Groups. -The Virtual Node Groups Summary List can display the following columns: +ADD SCREENSHOT HERE + +The Virtual Node Groups Summary List displays the following columns: * ID: The identification code of the VNG. * Name: The user-defined name of the VNG. (If a VNG was defined without a time, it will appear in this column as Unnamed Virtual Node Group.) @@ -43,8 +45,8 @@ The Virtual Node Groups Summary List can display the following columns: 2. Select one of these options: * Click **Configure Manually** - * For AWS Kubernetes only, select to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg) - * For EKS only, select to import from an existing [node group](NEED LINK) + * For AWS Kubernetes only, select to import from an existing [Autoscaling Group](ocean/tutorials/manage-virtual-node-groups?id=create-a-vng-from-an-asg). + * For EKS only, select to import from an existing node group. 3. Click **Continue**. When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. @@ -176,11 +178,11 @@ You can also review and edit the configuration directly in JSON format in the co -In this view, you can see the full JSON configuration of the VNG. If you would like to edit the JSON, just click Edit Mode, make your changes, and click Save. +In this view, you can see the full JSON configuration of the VNG. To edit the JSON, click **Edit** Mode and make changes. ## Delete a VNG In the Virtual Node Groups summary list, check the Virtual Node Groups to delete and click **Delete**. OR -If you are already configuring a Virtual Node Group, click *8Delete VNG** at the bottom. +If you are already configuring a Virtual Node Group, click **Delete VNG**. From 709eb015e545ea228a2a7a638ab95c082bc0f42d Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:02:12 +0300 Subject: [PATCH 13/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index e53ba200ea..b61500d0d9 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -1,8 +1,8 @@ # Manage AWS Virtual Node Groups -Cloud service provider relevance: AWS Kubernetes and EKS +Cloud service provider relevance: AWS Kubernetes -This topic describes how to work with Virtual Mode Groups for AWS Kubernetes. +This topic describes how to work with Virtual Node Groups for AWS Kubernetes. [Virtual Node Groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. @@ -23,8 +23,8 @@ ADD SCREENSHOT HERE The Virtual Node Groups Summary List displays the following columns: * ID: The identification code of the VNG. -* Name: The user-defined name of the VNG. (If a VNG was defined without a time, it will appear in this column as Unnamed Virtual Node Group.) -* Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently used by the VNG. +* Name: The user-defined name of the VNG. (If a VNG was defined without a name, it will appear in this column as Unnamed Virtual Node Group.) +* Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently running on nodes from this VNG. * Running Pods: Number of pods the VNG currently uses. * Nodes: Number of nodes the VNG currently uses. * Node Labels: Number of node labels the VNG uses. From b86ac558f63fddfeebf7faa920eae828814c2619 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 26 Sep 2024 15:28:52 +0300 Subject: [PATCH 14/33] Update manage-virtual-node-groups.md --- .../ocean/tutorials/manage-virtual-node-groups.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index b61500d0d9..d65c10d1ae 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -117,7 +117,7 @@ This section describes selecting instance sizes in your cluster per Virtual Node * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() * Automatic: Let Spot select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. - * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. See [Configure Instance Types Using Advanced Filters]() + * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. See [Configure Instance Types Using Advanced Filters](). ![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) @@ -130,7 +130,7 @@ The instance types shown in the default Virtual Node Group are only those suppor In other Virtual Node Groups, Ocean automatically grays out instance types that are not selected in the default Virtual Node Group and instance types that do not meet AMI architecture requirements for the specific Virtual Node Group. Hover over the instance type to view the reason. 1. Click the name of the Virtual Node Group to configure. -2. Click COnfigure????? +2. Click **Configure**. 3. Click a down arrow to see the available instance options. Check/uncheck options as required. Click **Restore to Default** to restore the instance types in a Virtual Node Group to their default configuration. @@ -142,6 +142,15 @@ Click **Restore to Default** to restore the instance types in a Virtual Node Gro ### Configure Instance Types Using Advanced Filters +Before configuring with this option, consider the following limitations: + +* If the VNG template/Default is set with `cluster.instanceTypes`,` filters != null` or `cluster.instanceTypes.whitelist/blacklist != null`, you cannot add filters on the custom VNG level. The **Advanced Selection** radio button is grayed with a tooltip on hover and a banner indicating the reason. + 1. Click **set to automatic** in the banner or the tooltip. The dialog that appears reflects the current configuration of the Template/Default VNG and the recommended change. + 2. Set the instanceTypes on the template/Default VNG to null and use filters on the custom VNG or accept the settings. +* If any custom VNG is set with `launchSpec.instanceTypesFilters!=null`, you cannot add a whitelist or filters on the template/default VNG level. The **Advanced Selection** and **Manual Selection** radio buttons are grayed, with a tooltip on hover and a banner indicating the reason. + 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null`. + 2. If you want to set filters on the template/default VNG, click the VNG name and then configure by either **Manual Selection** or **Automatic Selection**. + ![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. From 350f72676d997200004dbb8892a3178560fd852b Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:33:05 +0300 Subject: [PATCH 15/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index d65c10d1ae..d40119d61e 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -129,9 +129,7 @@ The instance types shown in the default Virtual Node Group are only those suppor In other Virtual Node Groups, Ocean automatically grays out instance types that are not selected in the default Virtual Node Group and instance types that do not meet AMI architecture requirements for the specific Virtual Node Group. Hover over the instance type to view the reason. -1. Click the name of the Virtual Node Group to configure. -2. Click **Configure**. -3. Click a down arrow to see the available instance options. Check/uncheck options as required. +Click a down arrow to see the available instance options. Check/uncheck options as required. Click **Restore to Default** to restore the instance types in a Virtual Node Group to their default configuration. From 970170b46dd0188f809110f88d528125c83ca3b0 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:41:02 +0300 Subject: [PATCH 16/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index d40119d61e..a6f5b7f54a 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -109,7 +109,7 @@ You can use a node selector or node affinity that requires your GPU-based pods t -## Configure Instance Types per Virtual Node Group +## Configure Instance Types This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization to scale processes. From 05d337f45f852ca34db55b948bcb39d7be701a8c Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:45:38 +0300 Subject: [PATCH 17/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index a6f5b7f54a..201747ae7c 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -131,7 +131,7 @@ In other Virtual Node Groups, Ocean automatically grays out instance types that Click a down arrow to see the available instance options. Check/uncheck options as required. -Click **Restore to Default** to restore the instance types in a Virtual Node Group to their default configuration. +Click **Restore to default values** (above and to the right of the instance types list) to restore the instance types in a Virtual Node Group to their default configuration. * For the default VNG: The instance types are set to the default Ocean configuration to make all instance types available. Then, Ocean can choose any combination of instance types that best fits the workload requirements. * For other Virtual Node Groups: The instance types are those available in the Default Virtual Node Group. From adbb05e6537266784331b3bec18a690d3b1d6e64 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:46:30 +0300 Subject: [PATCH 18/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 65 +++++++++---------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 201747ae7c..21b621ec7d 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -1,10 +1,10 @@ -# Manage AWS Virtual Node Groups +# Manage AWS virtual node groups Cloud service provider relevance: AWS Kubernetes -This topic describes how to work with Virtual Node Groups for AWS Kubernetes. +This topic describes how to work with virtual node groups for AWS Kubernetes. -[Virtual Node Groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. +[virtual node groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. ## Prerequisites @@ -14,16 +14,16 @@ An Ocean cluster is up and running. 1. Click **Ocean > Cloud Clusters** in the left main menu. 2. Select a cluster from the list of clusters. -3. Click the **Virtual Node Groups** tab +3. Click the **virtual node groups** tab -The Virtual Node Groups tab lets you track live data per Virtual Node Group. You can review the resource allocation, number of nodes and pods running, and other information about the Virtual Node Groups. +The virtual node groups tab lets you track live data per virtual node group. You can review the resource allocation, number of nodes and pods running, and other information about the virtual node groups. ADD SCREENSHOT HERE -The Virtual Node Groups Summary List displays the following columns: +The virtual node groups Summary List displays the following columns: * ID: The identification code of the VNG. -* Name: The user-defined name of the VNG. (If a VNG was defined without a name, it will appear in this column as Unnamed Virtual Node Group.) +* Name: The user-defined name of the VNG. (If a VNG was defined without a name, it will appear in this column as Unnamed virtual node group.) * Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently running on nodes from this VNG. * Running Pods: Number of pods the VNG currently uses. * Nodes: Number of nodes the VNG currently uses. @@ -34,12 +34,12 @@ The Virtual Node Groups Summary List displays the following columns: > Notes: > - Click the three dots on the right to select which columns to display in the list. -> - Use the search box to filter items in the list or search for a specific Virtual Node Group. -> - To view the configuration details of a Virtual Node Group, click on its Name. +> - Use the search box to filter items in the list or search for a specific virtual node group. +> - To view the configuration details of a virtual node group, click on its Name. ## Create a Virtual Node Group -1. Click **Create VNG** in the Virtual Node Groups tab. +1. Click **Create VNG** in the virtual node groups tab. ![import-or-manual](https://github.com/user-attachments/assets/63cb8805-eb79-449c-858e-dc3d483bb473) @@ -52,19 +52,19 @@ The Virtual Node Groups Summary List displays the following columns: When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. Review all of the parameters and update them if necessary before saving. -If you are configuring manually, see [New Virtual Node Group Page]() +If you are configuring manually, see [New virtual node group Page]() ### New Virtual Node Group Page -1. On the New Virtual Node Group page, enter the Virtual Node Group parameters you want to customize. Parameters left blank use values from the default VNG, as indicated in the illustration below. -2. After customizing the Virtual Node Group, click **Save**. The VNG parameters are described below. +1. On the New Virtual Node Group page, enter the virtual node group parameters you want to customize. Parameters left blank use values from the default VNG, as indicated in the illustration below. +2. After customizing the virtual node group, click **Save**. The VNG parameters are described below. ![create-custom-vng](https://github.com/user-attachments/assets/1dd6db4f-b7e5-40fa-a5d9-26680179a59e) ## Configuration Parameters -* Name: The name you assign to the new Virtual Node Group. -* Image: The Amazon machine image (AMI) used for the Virtual Node Group. +* Name: The name you assign to the new virtual node group. +* Image: The Amazon machine image (AMI) used for the virtual node group. * Security Groups: The security groups that apply to the VNG. You can choose up to five groups as per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups). * Subnets: The subnets that apply to the VNG. You can choose multiple subnets. * Root Volume Size: The root volume size in GiB. This field and `blockDeviceMappings` cannot be used in the same VNG. @@ -84,8 +84,8 @@ This section lets you inform Ocean about the labels and taints set on the nodes. * Maximum Nodes: The upper limit number of instances that you can scale up to. * Minimum Nodes: -* Spot %: The percentage of spot nodes used in the Virtual Node Group. -* Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this Virtual Node Group for bin packing purposes unless they are empty. +* Spot %: The percentage of spot nodes used in the virtual node group. +* Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this virtual node group for bin packing purposes unless they are empty. * Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec simultaneously. * Tags: Key and Value pairs are used to apply tags to the EC2 machine. Specific tags can be applied per VNG. * Headroom: Spare resource capacity management enabling fast assignment of Pods without waiting for new resources to launch. @@ -96,7 +96,7 @@ This section lets you inform Ocean about the labels and taints set on the nodes. ## Example: GPU Instance -Add the relevant GPU image in a Virtual Node Group if a pod requires a GPU instance. Ocean will spin up instances accordingly. Specific labels are not required in this case. Example: +Add the relevant GPU image in a virtual node group if a pod requires a GPU instance. Ocean will spin up instances accordingly. Specific labels are not required in this case. Example: ``` resources: @@ -111,9 +111,9 @@ You can use a node selector or node affinity that requires your GPU-based pods t ## Configure Instance Types -This section describes selecting instance sizes in your cluster per Virtual Node Group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization to scale processes. +This section describes selecting instance sizes in your cluster per virtual node group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization to scale processes. -1. In the Virtual Node Groups tab, scroll down to the Instance Types panel and select one of the options: +1. In the virtual node groups tab, scroll down to the Instance Types panel and select one of the options: * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() * Automatic: Let Spot select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. @@ -125,18 +125,17 @@ This section describes selecting instance sizes in your cluster per Virtual Node ![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d1f79716-509a-49c3-be33-7583a05c9ecb) -The instance types shown in the default Virtual Node Group are only those supported in the cluster's region. +The instance types shown in the default virtual node group are only those supported in the cluster's region. -In other Virtual Node Groups, Ocean automatically grays out instance types that are not selected in the default Virtual Node Group and instance types that do not meet AMI architecture requirements for the specific Virtual Node Group. Hover over the instance type to view the reason. +In other virtual node groups, Ocean automatically grays out instance types that are not selected in the default virtual node group or do not meet AMI architecture requirements for the specific virtual node group. Hover over the instance type to view the reason. -Click a down arrow to see the available instance options. Check/uncheck options as required. +You can manually configure the instance types as follows: + * Click a down arrow to see the available instance options. Check/uncheck options as required. + * Click **Restore to default values** (above and to the right of the instance types list) to restore the instance types in a virtual node group to their default configuration. + * For the default virtual node group, the instance types are set to the default Ocean configuration to make all instance types available. Ocean can select the combination of instance types that match the workload requirements. + * For other virtual node groups, the instance types are those available in the Default virtual node group. -Click **Restore to default values** (above and to the right of the instance types list) to restore the instance types in a Virtual Node Group to their default configuration. - -* For the default VNG: The instance types are set to the default Ocean configuration to make all instance types available. Then, Ocean can choose any combination of instance types that best fits the workload requirements. -* For other Virtual Node Groups: The instance types are those available in the Default Virtual Node Group. - ->**Note**: When you update the default Virtual Node Group instance types, Ocean updates the Ocean cluster types since these have the same configuration. +>**Note**: When you update the default virtual node group instance types, Ocean updates the Ocean cluster types because these have the same configuration. ### Configure Instance Types Using Advanced Filters @@ -175,13 +174,13 @@ You can also configure these parameters via the [Spot API](https://docs.spot.io/ ## Edit a Virtual Node Group -* Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List. +* Click on the name of the virtual node group in the virtual node groups Summary List. ### Edit a Virtual Node Group in JSON Format You can also review and edit the configuration directly in JSON format in the console. This provides more flexibility and enables you to utilize VNG features supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API but are not yet accessible in the console.) -* Click on the name of the Virtual Node Group in the Virtual Node Groups Summary List, and click **JSON** on the upper right. +* Click on the name of the virtual node group in the virtual node groups Summary List, and click **JSON** on the upper right. @@ -189,7 +188,7 @@ In this view, you can see the full JSON configuration of the VNG. To edit the JS ## Delete a VNG -In the Virtual Node Groups summary list, check the Virtual Node Groups to delete and click **Delete**. +In the virtual node groups summary list, check the virtual node groups to delete and click **Delete**. OR -If you are already configuring a Virtual Node Group, click **Delete VNG**. +If you are already configuring a virtual node group, click **Delete VNG**. From c7db6aa0131382bb29ff44c252693701ccd8c786 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:46:58 +0300 Subject: [PATCH 19/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 21b621ec7d..31873e58fc 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -1,4 +1,4 @@ -# Manage AWS virtual node groups +# Manage AWS Virtual Node Groups Cloud service provider relevance: AWS Kubernetes From c6d746983f937fedc4761ca989af3ad7f7ae8a6f Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 19:36:36 +0300 Subject: [PATCH 20/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 31873e58fc..8926d5e5e2 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -18,7 +18,7 @@ An Ocean cluster is up and running. The virtual node groups tab lets you track live data per virtual node group. You can review the resource allocation, number of nodes and pods running, and other information about the virtual node groups. -ADD SCREENSHOT HERE +![fig-create-vng-2](https://github.com/user-attachments/assets/6d4dd7e0-6dc7-4d1d-8193-27e34a517432) The virtual node groups Summary List displays the following columns: From 9aeaf7f870cb06d821078ef590e5e470fcd7587d Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 19:58:31 +0300 Subject: [PATCH 21/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 8926d5e5e2..79e24ac185 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -18,7 +18,6 @@ An Ocean cluster is up and running. The virtual node groups tab lets you track live data per virtual node group. You can review the resource allocation, number of nodes and pods running, and other information about the virtual node groups. -![fig-create-vng-2](https://github.com/user-attachments/assets/6d4dd7e0-6dc7-4d1d-8193-27e34a517432) The virtual node groups Summary List displays the following columns: @@ -54,7 +53,7 @@ Review all of the parameters and update them if necessary before saving. If you are configuring manually, see [New virtual node group Page]() -### New Virtual Node Group Page +### New Virtual Node Group 1. On the New Virtual Node Group page, enter the virtual node group parameters you want to customize. Parameters left blank use values from the default VNG, as indicated in the illustration below. 2. After customizing the virtual node group, click **Save**. The VNG parameters are described below. From f4ea475cdeeefe0bdeab16d22e011e399e68d8d9 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:17:58 +0300 Subject: [PATCH 22/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 79e24ac185..263b6ff36c 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -18,6 +18,7 @@ An Ocean cluster is up and running. The virtual node groups tab lets you track live data per virtual node group. You can review the resource allocation, number of nodes and pods running, and other information about the virtual node groups. +![vng-aws-list-ocean-listed-summed](https://github.com/user-attachments/assets/5d00cf04-b9e0-4881-9b3f-9bdadc54aa18) The virtual node groups Summary List displays the following columns: @@ -48,16 +49,12 @@ The virtual node groups Summary List displays the following columns: * For EKS only, select to import from an existing node group. 3. Click **Continue**. -When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new VMs, not as part of a managed Kubernetes service of node group entities. -Review all of the parameters and update them if necessary before saving. +When you select Import, a one-time process occurs. Import copies values from the cloud provider node group entity to the Ocean configuration. Later, there is no active connection between these two entities. Ocean will provision new instance types, not as part of a managed Kubernetes service of node group entities. -If you are configuring manually, see [New virtual node group Page]() - -### New Virtual Node Group - -1. On the New Virtual Node Group page, enter the virtual node group parameters you want to customize. Parameters left blank use values from the default VNG, as indicated in the illustration below. -2. After customizing the virtual node group, click **Save**. The VNG parameters are described below. +4. Review all the virtual node group parameters (listed below) and update if necessary before saving. +>**Note**: Parameters left blank use values from the default virtual node group. + ![create-custom-vng](https://github.com/user-attachments/assets/1dd6db4f-b7e5-40fa-a5d9-26680179a59e) ## Configuration Parameters @@ -67,12 +64,12 @@ If you are configuring manually, see [New virtual node group Page]() * Security Groups: The security groups that apply to the VNG. You can choose up to five groups as per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups). * Subnets: The subnets that apply to the VNG. You can choose multiple subnets. * Root Volume Size: The root volume size in GiB. This field and `blockDeviceMappings` cannot be used in the same VNG. -* Instance Profile: The iamRole object that is applicable to the instance profile. +* Instance Profile: The iamRole object that applies to the instance profile. * User Data (Startup Script): User data script to set in Base64-encoded MIME. ### Node Selection Parameters -This section lets you inform Ocean about the labels and taints set on the nodes. Ocean will use them to select the right VNG for a pending pod when they are set. +This section lets you inform Ocean about the labels and taints set on the nodes. When they are set, Ocean will use them to select the right VNG for a pending pod. * Node Labels: Key/Value pairs defined on the Kubernetes nodes. * Node [Taints](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/): Triplets of Key, Value, and Effect defined on the Kubernetes nodes. @@ -84,7 +81,7 @@ This section lets you inform Ocean about the labels and taints set on the nodes. * Maximum Nodes: The upper limit number of instances that you can scale up to. * Minimum Nodes: * Spot %: The percentage of spot nodes used in the virtual node group. -* Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this virtual node group for bin packing purposes unless they are empty. +* Restrict Scale-Down. When turned on, Ocean will not scale down nodes in this virtual node group for bin-packing purposes unless they are empty. * Block Device Mapping: Block devices that are exposed to the instance. You can specify virtual devices and EBS volumes. This parameter and rootVolumeSize cannot be in the spec simultaneously. * Tags: Key and Value pairs are used to apply tags to the EC2 machine. Specific tags can be applied per VNG. * Headroom: Spare resource capacity management enabling fast assignment of Pods without waiting for new resources to launch. @@ -103,7 +100,7 @@ resources: nvidia.com/gpu: 1 ``` -You can use a node selector or node affinity that requires your GPU-based pods to select the specific VNG containing the GPU image, based on the custom node label configured in the GPU VNG. +You can use a node selector or node affinity that requires your GPU-based pods to select the specific VNG containing the GPU image based on the custom node label configured in the GPU VNG. @@ -129,10 +126,10 @@ The instance types shown in the default virtual node group are only those suppor In other virtual node groups, Ocean automatically grays out instance types that are not selected in the default virtual node group or do not meet AMI architecture requirements for the specific virtual node group. Hover over the instance type to view the reason. You can manually configure the instance types as follows: - * Click a down arrow to see the available instance options. Check/uncheck options as required. + * Click a down arrow to see the available options and check/uncheck as required. * Click **Restore to default values** (above and to the right of the instance types list) to restore the instance types in a virtual node group to their default configuration. - * For the default virtual node group, the instance types are set to the default Ocean configuration to make all instance types available. Ocean can select the combination of instance types that match the workload requirements. - * For other virtual node groups, the instance types are those available in the Default virtual node group. + * The instance types are set to the default Ocean configuration for the default virtual node group (all types available). Ocean selects the combination of instance types that match the workload requirements. + * For other virtual node groups, the instance types are those available in the default virtual node group. >**Note**: When you update the default virtual node group instance types, Ocean updates the Ocean cluster types because these have the same configuration. @@ -149,8 +146,8 @@ Before configuring with this option, consider the following limitations: ![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) -In the VM Selection list, view each VM type's currently selected size, vCPU, Memory (GiB), and GPU units. -The Advanced VM Size Filtering controls to the right of the VM Selection list let you filter these attributes for the VMs: +In the instance types Selection list, view each instance type's currently selected size, vCPU, Memory (GiB), and GPU units. +The Advanced instance types Size Filtering controls to the right of the instance types Selection list let you filter these attributes for the instance types: * Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". * Disk Types: NVMe, EBS, SSD, HDD. From 73d690723e351768a693c2c157178bd738979c6f Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:45:20 +0300 Subject: [PATCH 23/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 263b6ff36c..5641f9ccec 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -18,7 +18,7 @@ An Ocean cluster is up and running. The virtual node groups tab lets you track live data per virtual node group. You can review the resource allocation, number of nodes and pods running, and other information about the virtual node groups. -![vng-aws-list-ocean-listed-summed](https://github.com/user-attachments/assets/5d00cf04-b9e0-4881-9b3f-9bdadc54aa18) +![aws_vng-aws-list](https://github.com/user-attachments/assets/6bd98303-54ee-44c4-9f96-4bc89b7faa5f) The virtual node groups Summary List displays the following columns: @@ -100,10 +100,7 @@ resources: nvidia.com/gpu: 1 ``` -You can use a node selector or node affinity that requires your GPU-based pods to select the specific VNG containing the GPU image based on the custom node label configured in the GPU VNG. - - - +You can use a node selector or node affinity that requires your GPU-based pods to select the specific virtual node group containing the GPU image based on the custom node label configured in the GPU virtual node group. ## Configure Instance Types From 160a3437fc3299553e32ddb54efffed92638e515 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 10 Oct 2024 20:57:57 +0300 Subject: [PATCH 24/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 5641f9ccec..20c2acb225 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -22,15 +22,15 @@ The virtual node groups tab lets you track live data per virtual node group. You The virtual node groups Summary List displays the following columns: -* ID: The identification code of the VNG. -* Name: The user-defined name of the VNG. (If a VNG was defined without a name, it will appear in this column as Unnamed virtual node group.) -* Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently running on nodes from this VNG. +* ID: The identification code of the virtual node group. +* Name: The user-defined name of the virtual node group. (If a virtual node group were defined without a name, it would appear as an Unnamed virtual node group.) +* Resource Allocation: Percent of defined resources (CPU, Memory, and GPU) currently running on nodes from this virtual node group. * Running Pods: Number of pods the VNG currently uses. -* Nodes: Number of nodes the VNG currently uses. -* Node Labels: Number of node labels the VNG uses. -* Node Taints: Number of taints the VNG uses. -* Tags: Number of tags the VNG uses. -* Max Nodes: The maximum number of nodes defined for the VNG. +* Max Nodes: The maximum number of nodes defined for the virtual node group. +* Node Count: Number of nodes the VNG currently uses. +* Node Labels: Number of node labels the virtual node group uses. +* Node Taints: Number of taints the virtual node group uses. +* Tags: Number of tags the virtual node group uses. > Notes: > - Click the three dots on the right to select which columns to display in the list. @@ -173,11 +173,12 @@ You can also configure these parameters via the [Spot API](https://docs.spot.io/ You can also review and edit the configuration directly in JSON format in the console. This provides more flexibility and enables you to utilize VNG features supported in the API without leaving the Ocean console. (These are usually new features that have been implemented in the API but are not yet accessible in the console.) -* Click on the name of the virtual node group in the virtual node groups Summary List, and click **JSON** on the upper right. +To edit in JSON format: - +1. Click on the name of the virtual node group in the virtual node groups Summary List, and click **JSON** on the upper right. +2. Click **Edit Mode**, edit and save your changes. -In this view, you can see the full JSON configuration of the VNG. To edit the JSON, click **Edit** Mode and make changes. +![json-example-edit-mode](https://github.com/user-attachments/assets/13fd52bb-067b-44ba-a03f-139ef0e7d71b) ## Delete a VNG From b618113c2242c252271a06d4183c3d7b835d62e4 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Mon, 14 Oct 2024 19:19:06 +0300 Subject: [PATCH 25/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 20c2acb225..bae7b6e0c0 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -104,13 +104,13 @@ You can use a node selector or node affinity that requires your GPU-based pods t ## Configure Instance Types -This section describes selecting instance sizes in your cluster per virtual node group (custom or template) according to your application needs. An advanced attributes filter lets you search for the optimal instances for the task from any of the families available on the [Amazon - LINK REQUIRED]() cloud. Once you have sized your instances, Ocean can use your customization to scale processes. +This section describes selecting instance types and sizes in your cluster per virtual node group (custom or template) according to your application needs. 1. In the virtual node groups tab, scroll down to the Instance Types panel and select one of the options: + * Automatic: Let Ocean Autoscaler select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() - * Automatic: Let Spot select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. - * Advanced Selection: Use attribute filters to select instance types with customized sizes from which Ocean can scale. See [Configure Instance Types Using Advanced Filters](). + * Advanced Selection: Use multiple filters to optimize instance types and sizes based on your application needs (supports all families available on the [Amazon link]() cloud). See [Configure Instance Types Using Advanced Filters](). ![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) @@ -144,7 +144,7 @@ Before configuring with this option, consider the following limitations: ![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) In the instance types Selection list, view each instance type's currently selected size, vCPU, Memory (GiB), and GPU units. -The Advanced instance types Size Filtering controls to the right of the instance types Selection list let you filter these attributes for the instance types: +The Advanced instance types size filtering controls to the right of the instance types selection list let you filter these attributes for the instance types: * Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". * Disk Types: NVMe, EBS, SSD, HDD. From 1299db0e0a08aa4756b44d23726d49c160dcdc71 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:59:52 +0300 Subject: [PATCH 26/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index bae7b6e0c0..1cbb9e77aa 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -112,11 +112,11 @@ This section describes selecting instance types and sizes in your cluster per vi * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() * Advanced Selection: Use multiple filters to optimize instance types and sizes based on your application needs (supports all families available on the [Amazon link]() cloud). See [Configure Instance Types Using Advanced Filters](). -![instance-types](https://github.com/user-attachments/assets/5cd0bbb7-af8e-40ae-ba40-3b671de497bd) + ### Configure Instance Types Manually -![aws-instance-panel-man-selection](https://github.com/user-attachments/assets/d1f79716-509a-49c3-be33-7583a05c9ecb) +![eks-manage-vngs](https://github.com/user-attachments/assets/6fbb580b-ac79-4d11-b649-985eccc3b8f3) The instance types shown in the default virtual node group are only those supported in the cluster's region. From d6be03a8505689f7eb8becb8b758d88d90b61052 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:04:10 +0300 Subject: [PATCH 27/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 1cbb9e77aa..66ea7ab652 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -116,7 +116,7 @@ This section describes selecting instance types and sizes in your cluster per vi ### Configure Instance Types Manually -![eks-manage-vngs](https://github.com/user-attachments/assets/6fbb580b-ac79-4d11-b649-985eccc3b8f3) +![eks-manage-vngs](https://github.com/user-attachments/assets/4443dc84-eb72-4a58-9855-fa597b3776a2) The instance types shown in the default virtual node group are only those supported in the cluster's region. From 61d6ad82e420022e4884f9fbf3e82b074e763fe1 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:23:48 +0200 Subject: [PATCH 28/33] Add files via upload --- src/docs/ocean/_media/eks-manage-vngs.png | Bin 0 -> 53461 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/docs/ocean/_media/eks-manage-vngs.png diff --git a/src/docs/ocean/_media/eks-manage-vngs.png b/src/docs/ocean/_media/eks-manage-vngs.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f9398365f07832518b844c6a459ab03a999137 GIT binary patch literal 53461 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 literal 0 HcmV?d00001 From 999c7595d4e2b5dd82d91728924db33ca302fe8e Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:19:39 +0200 Subject: [PATCH 29/33] Update manage-virtual-node-groups.md --- .../tutorials/manage-virtual-node-groups.md | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 66ea7ab652..448bef5cbe 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -53,9 +53,11 @@ When you select Import, a one-time process occurs. Import copies values from the 4. Review all the virtual node group parameters (listed below) and update if necessary before saving. ->**Note**: Parameters left blank use values from the default virtual node group. - -![create-custom-vng](https://github.com/user-attachments/assets/1dd6db4f-b7e5-40fa-a5d9-26680179a59e) +>**Note**: +>- Parameters left blank use values from the default virtual node group. +>- To restore attributes to default (template) virtual node group values, click the **Restore to vng template values** for the field or list. + + ## Configuration Parameters @@ -110,7 +112,7 @@ This section describes selecting instance types and sizes in your cluster per vi * Automatic: Let Ocean Autoscaler select your instance types and sizes according to your applications' needs. In this case, click **Save** to complete the procedure. * Manual Selection: You can manually define a list of instance types from which Ocean can scale. See [Configure Instance Types Manually]() - * Advanced Selection: Use multiple filters to optimize instance types and sizes based on your application needs (supports all families available on the [Amazon link]() cloud). See [Configure Instance Types Using Advanced Filters](). + * Advanced Selection: Use multiple filters to optimize instance types and sizes based on your application needs (supports all families available on the [Amazon link](https://aws.amazon.com/ec2/instance-types/) cloud). See [Configure Instance Types Using Advanced Filters](). @@ -124,27 +126,26 @@ In other virtual node groups, Ocean automatically grays out instance types that You can manually configure the instance types as follows: * Click a down arrow to see the available options and check/uncheck as required. - * Click **Restore to default values** (above and to the right of the instance types list) to restore the instance types in a virtual node group to their default configuration. - * The instance types are set to the default Ocean configuration for the default virtual node group (all types available). Ocean selects the combination of instance types that match the workload requirements. - * For other virtual node groups, the instance types are those available in the default virtual node group. - + >**Note**: When you update the default virtual node group instance types, Ocean updates the Ocean cluster types because these have the same configuration. ### Configure Instance Types Using Advanced Filters Before configuring with this option, consider the following limitations: -* If the VNG template/Default is set with `cluster.instanceTypes`,` filters != null` or `cluster.instanceTypes.whitelist/blacklist != null`, you cannot add filters on the custom VNG level. The **Advanced Selection** radio button is grayed with a tooltip on hover and a banner indicating the reason. +* If the VNG template/Default is set with `cluster.instanceTypes`.`filters != null` or `cluster.instanceTypes.whitelist/blacklist != null`, you cannot add filters on the custom VNG level. The **Advanced Selection** radio button is grayed with a tooltip on hover and a banner indicating the reason. 1. Click **set to automatic** in the banner or the tooltip. The dialog that appears reflects the current configuration of the Template/Default VNG and the recommended change. 2. Set the instanceTypes on the template/Default VNG to null and use filters on the custom VNG or accept the settings. * If any custom VNG is set with `launchSpec.instanceTypesFilters!=null`, you cannot add a whitelist or filters on the template/default VNG level. The **Advanced Selection** and **Manual Selection** radio buttons are grayed, with a tooltip on hover and a banner indicating the reason. - 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null`. - 2. If you want to set filters on the template/default VNG, click the VNG name and then configure by either **Manual Selection** or **Automatic Selection**. + 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null` + + need screen here with good example + + 3. If you want to set filters on the template/default VNG, click the VNG name and then configure by either **Manual Selection** or **Automatic Selection**. ![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) -In the instance types Selection list, view each instance type's currently selected size, vCPU, Memory (GiB), and GPU units. -The Advanced instance types size filtering controls to the right of the instance types selection list let you filter these attributes for the instance types: +The Advanced instance types size filtering controls to the right of the instance types selection list let you filter the following attributes: * Categories: One of the following: Accelerated_computing, Compute_optimized, General_purpose, Memory_optimized, Storage_optimized". * Disk Types: NVMe, EBS, SSD, HDD. From b050c82c6f2446066c7eeca7790c2c69c7e8552f Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:29:40 +0200 Subject: [PATCH 30/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 448bef5cbe..77db7a971f 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -133,15 +133,15 @@ You can manually configure the instance types as follows: Before configuring with this option, consider the following limitations: -* If the VNG template/Default is set with `cluster.instanceTypes`.`filters != null` or `cluster.instanceTypes.whitelist/blacklist != null`, you cannot add filters on the custom VNG level. The **Advanced Selection** radio button is grayed with a tooltip on hover and a banner indicating the reason. +* If the default virtual node group (template) is set with `cluster.instanceTypes`.`filters != null` or `cluster.instanceTypes.whitelist/blacklist != null`, you cannot add filters on the custom virtual node group level. The **Advanced Selection** radio button is grayed with a tooltip on hover and a banner indicating the reason. 1. Click **set to automatic** in the banner or the tooltip. The dialog that appears reflects the current configuration of the Template/Default VNG and the recommended change. - 2. Set the instanceTypes on the template/Default VNG to null and use filters on the custom VNG or accept the settings. + 2. Set the instanceTypes on the template/Default VNG to null and use filters on the custom virtual node group or accept the settings. * If any custom VNG is set with `launchSpec.instanceTypesFilters!=null`, you cannot add a whitelist or filters on the template/default VNG level. The **Advanced Selection** and **Manual Selection** radio buttons are grayed, with a tooltip on hover and a banner indicating the reason. 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null` need screen here with good example - 3. If you want to set filters on the template/default VNG, click the VNG name and then configure by either **Manual Selection** or **Automatic Selection**. + 3. If you want to set filters on the default virtual node group, click the virtual node group name and then configure by either **Manual Selection** or **Automatic Selection**. ![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) From 22af824f395d52df50906a132d7d3196cb0f3321 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:59:59 +0200 Subject: [PATCH 31/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 77db7a971f..276cd3f784 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -137,13 +137,13 @@ Before configuring with this option, consider the following limitations: 1. Click **set to automatic** in the banner or the tooltip. The dialog that appears reflects the current configuration of the Template/Default VNG and the recommended change. 2. Set the instanceTypes on the template/Default VNG to null and use filters on the custom virtual node group or accept the settings. * If any custom VNG is set with `launchSpec.instanceTypesFilters!=null`, you cannot add a whitelist or filters on the template/default VNG level. The **Advanced Selection** and **Manual Selection** radio buttons are grayed, with a tooltip on hover and a banner indicating the reason. +need screen here with good example 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null` + 2. If you want to set filters on the default virtual node group, click the virtual node group name and then configure by either **Manual Selection** or **Automatic Selection**. - need screen here with good example - 3. If you want to set filters on the default virtual node group, click the virtual node group name and then configure by either **Manual Selection** or **Automatic Selection**. - -![advanced-filtering](https://github.com/user-attachments/assets/cee0e71f-cdf0-4fec-a7d3-b97589ee7627) + + The Advanced instance types size filtering controls to the right of the instance types selection list let you filter the following attributes: From f5a741ed05707bee0b2d2c3551230404eb9b5b24 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 7 Nov 2024 16:11:11 +0200 Subject: [PATCH 32/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 276cd3f784..073b830e51 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -63,8 +63,8 @@ When you select Import, a one-time process occurs. Import copies values from the * Name: The name you assign to the new virtual node group. * Image: The Amazon machine image (AMI) used for the virtual node group. -* Security Groups: The security groups that apply to the VNG. You can choose up to five groups as per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups). -* Subnets: The subnets that apply to the VNG. You can choose multiple subnets. +* Security Groups: These are the security groups that apply to the virtual node group. As per the [AWS limitation](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups), you can select up to five groups. +* Subnets: The subnets that apply to the virtual node group. You can choose multiple subnets. * Root Volume Size: The root volume size in GiB. This field and `blockDeviceMappings` cannot be used in the same VNG. * Instance Profile: The iamRole object that applies to the instance profile. * User Data (Startup Script): User data script to set in Base64-encoded MIME. @@ -140,10 +140,8 @@ Before configuring with this option, consider the following limitations: need screen here with good example 1. Click **view details** in the banner or the tooltip. The dialog that appears includes all the custom VNGs set with `launchSpec.instanceTypesFilters != null` 2. If you want to set filters on the default virtual node group, click the virtual node group name and then configure by either **Manual Selection** or **Automatic Selection**. - - - - + + The Advanced instance types size filtering controls to the right of the instance types selection list let you filter the following attributes: From c93fdc80479e73a1bac72f31192c4399db1ca885 Mon Sep 17 00:00:00 2001 From: rickshar <159915991+rickshar@users.noreply.github.com> Date: Thu, 7 Nov 2024 16:17:24 +0200 Subject: [PATCH 33/33] Update manage-virtual-node-groups.md --- src/docs/ocean/tutorials/manage-virtual-node-groups.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docs/ocean/tutorials/manage-virtual-node-groups.md b/src/docs/ocean/tutorials/manage-virtual-node-groups.md index 073b830e51..2eb19618b1 100644 --- a/src/docs/ocean/tutorials/manage-virtual-node-groups.md +++ b/src/docs/ocean/tutorials/manage-virtual-node-groups.md @@ -2,9 +2,9 @@ Cloud service provider relevance: AWS Kubernetes -This topic describes how to work with virtual node groups for AWS Kubernetes. +This topic describes how to work with [virtual node groups (VNGs)](ocean/features/launch-specifications.md) for AWS Kubernetes. -[virtual node groups](ocean/features/launch-specifications.md) (VNGs) provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. +Virtual node groups provide a single layer of abstraction that enables you to manage different types of workloads on the same cluster. ## Prerequisites