Deploy Node Partition

Application Scenario

Cloud Container Engine (CCE) is a high-reliability, high-performance enterprise-grade container management service that supports Kubernetes community native applications and tools. Node partition is a resource isolation mechanism provided by CCE, used to assign nodes in a cluster to different partitions, achieving physical and logical isolation of resources. By creating node partitions, you can deploy nodes to specified edge sites or regions, meeting the requirements of edge computing, hybrid cloud, and other scenarios. This best practice will introduce how to use Terraform to automatically deploy a CCE node partition, including querying availability zones and instance flavors, as well as creating VPC, subnet, ENI subnet, CCE cluster, node partition, node, and node pool.

This best practice involves the following main resources and data sources:

Data Sources

Resources

Resource/Data Source Dependencies

Implementation Steps

1. Script Preparation

Prepare the TF file (such as main.tf) for writing the current best practice script in the specified workspace, ensuring that it (or other TF files in the same directory) contains the provider version declaration and Huawei Cloud authentication information required for deploying resources. For configuration introduction, refer to the introduction in Preparation Before Deploying Huawei Cloud Resources.

2. Query Availability Zones Required for Node Partition Resource Creation Through Data Source

Add the following script to the TF file (such as main.tf) to inform Terraform to perform a data source query, the query results are used to create node partition related resources:

Parameter Description:

  • count: The number of data source queries, used to control whether to query availability zone information, only when var.availability_zone is empty, the availability zone information is queried

3. Create VPC Resource (Optional)

Add the following script to the TF file to inform Terraform to create VPC resources (if VPC ID is not specified):

Parameter Description:

  • count: The number of resource creations, used to control whether to create VPC resource, only when both var.vpc_id and var.subnet_id are empty, the VPC resource is created

  • name: The name of the VPC, assigned by referencing input variable vpc_name

  • cidr: The CIDR block of the VPC, assigned by referencing input variable vpc_cidr, default is "192.168.0.0/16"

4. Create VPC Subnet Resource (Optional)

Add the following script to the TF file to inform Terraform to create VPC subnet resources (if subnet ID is not specified):

Parameter Description:

  • count: The number of resource creations, used to control whether to create VPC subnet resource, only when var.subnet_id is empty, the VPC subnet resource is created

  • vpc_id: The VPC ID to which the subnet belongs, if the VPC ID is specified, use that value, otherwise assign by referencing the ID of the VPC resource (huaweicloud_vpc.test[0])

  • name: The name of the subnet, assigned by referencing input variable subnet_name

  • cidr: The CIDR block of the subnet, if the subnet CIDR is specified, use that value, otherwise automatically calculate based on the VPC's CIDR block using the cidrsubnet function

  • gateway_ip: The gateway IP of the subnet, if the gateway IP is specified, use that value, otherwise automatically calculate based on the subnet CIDR or automatically calculated subnet CIDR using the cidrhost function

  • availability_zone: The availability zone where the subnet is located, if the availability zone is specified, use that value, otherwise use the first availability zone from the availability zone list query data source

5. Create ENI Subnet Resource (Optional)

Add the following script to the TF file to inform Terraform to create ENI subnet resources (if ENI subnet ID is not specified):

Parameter Description:

  • count: The number of resource creations, used to control whether to create ENI subnet resource, only when var.eni_ipv4_subnet_id is empty, the ENI subnet resource is created

  • vpc_id: The VPC ID to which the ENI subnet belongs, if the VPC ID is specified, use that value, otherwise assign by referencing the ID of the VPC resource (huaweicloud_vpc.test[0])

  • name: The name of the ENI subnet, assigned by referencing input variable eni_subnet_name

  • cidr: The CIDR block of the ENI subnet, if the ENI subnet CIDR is specified, use that value, otherwise automatically calculate based on the VPC's CIDR block using the cidrsubnet function (using a different subnet index to avoid conflicts with the regular subnet)

  • gateway_ip: The gateway IP of the ENI subnet, if the gateway IP is specified, use that value, otherwise automatically calculate based on the ENI subnet CIDR or automatically calculated ENI subnet CIDR using the cidrhost function

  • availability_zone: The availability zone where the ENI subnet is located, if the availability zone is specified, use that value, otherwise use the first availability zone from the availability zone list query data source

Note: ENI subnet is a required network configuration for node partitions, used to provide high-performance network connections. The ENI subnet must be in the same VPC as the regular subnet, but must use a different CIDR block to avoid IP address conflicts.

6. Create CCE Cluster Resource

Add the following script to the TF file to inform Terraform to create CCE cluster resources:

Parameter Description:

  • name: The name of the CCE cluster, assigned by referencing input variable cluster_name

  • flavor_id: The flavor ID of the CCE cluster, assigned by referencing input variable cluster_flavor_id, default is "cce.s1.small" for small cluster

  • cluster_version: The version of the CCE cluster, assigned by referencing input variable cluster_version, if null, the latest version will be used

  • cluster_type: The type of the CCE cluster, assigned by referencing input variable cluster_type, default is "VirtualMachine" for virtual machine type

  • container_network_type: Container network type, assigned by referencing input variable container_network_type, default is "eni" for ENI network mode (node partitions must use ENI network)

  • vpc_id: VPC ID, if the VPC ID is specified, use that value, otherwise assign by referencing the ID of the VPC resource (huaweicloud_vpc.test[0])

  • enable_distribute_management: Whether to enable distributed management, set to true, which is a prerequisite for node partition functionality

  • subnet_id: Subnet ID, if the subnet ID is specified, use that value, otherwise assign by referencing the ID of the VPC subnet resource (huaweicloud_vpc_subnet.test[0])

  • eni_subnet_id: ENI subnet ID, if the ENI subnet ID is specified, use that value, otherwise assign by referencing the IPv4 subnet ID of the ENI subnet resource (huaweicloud_vpc_subnet.eni[0])

  • description: Cluster description information, assigned by referencing input variable cluster_description

  • tags: Cluster tags, assigned by referencing input variable cluster_tags, used for resource classification and management

Note: Node partition functionality requires the cluster to enable distributed management (enable_distribute_management set to true), and must use ENI network mode (container_network_type set to "eni").

7. Query Instance Flavors Required for Node Partition Resource Creation Through Data Source

Add the following script to the TF file to inform Terraform to query instance flavors that meet the conditions:

Parameter Description:

  • count: The number of data source queries, used to control whether to query instance flavor information, only when var.node_flavor_id is empty, the instance flavor information is queried

  • performance_type: Performance type, assigned through input variable node_flavor_performance_type, default is "normal" for general purpose

  • cpu_core_count: CPU core count, assigned through input variable node_flavor_cpu_core_count, default is 2 cores

  • memory_size: Memory size (GB), assigned through input variable node_flavor_memory_size, default is 4GB

  • availability_zone: The availability zone where the instance flavor is located, if the availability zone is specified, use that value, otherwise use the first availability zone from the availability zone list query data source

8. Create CCE Node Partition Resource

Add the following script to the TF file to inform Terraform to create CCE node partition resources:

Parameter Description:

  • count: The number of resource creations, used to control whether to create node partition resource, only when var.node_partition is empty, the node partition resource is created

  • cluster_id: CCE cluster ID, assigned by referencing the ID of the CCE cluster resource (huaweicloud_cce_cluster.test)

  • name: The name of the node partition, assigned by referencing input variable partition_name

  • category: The category of the node partition, assigned by referencing input variable partition_category, default is "IES" for Intelligent Edge Site

  • public_border_group: The public border group of the node partition, assigned by referencing input variable partition_public_border_group, used to specify the location of the edge site

  • partition_subnet_id: Partition subnet ID, assigned by referencing the ID of the ENI subnet resource (huaweicloud_vpc_subnet.eni[0])

  • container_subnet_ids: Container subnet ID list, assigned by referencing the IPv4 subnet ID list of the ENI subnet resource (huaweicloud_vpc_subnet.eni[0])

Note: Node partition is used to assign nodes to specified edge sites or regions. If a node partition already exists, you can specify the partition ID through the node_partition variable without creating a new partition.

9. Create CCE Node Resource (Optional)

Add the following script to the TF file to inform Terraform to create CCE node resources:

Parameter Description:

  • cluster_id: CCE cluster ID, assigned by referencing the ID of the CCE cluster resource (huaweicloud_cce_cluster.test)

  • name: The name of the node, assigned by referencing input variable node_name

  • flavor_id: Node flavor ID, if the node flavor ID is specified, use that value, otherwise assign by using the first flavor ID from the instance flavor list query data source

  • availability_zone: The availability zone where the node is located, if the availability zone is specified, use that value, otherwise assign by using the first availability zone from the availability zone list query data source

  • password: The root password of the node, assigned by referencing input variable node_password, used for SSH login to the node

  • partition: The partition to which the node belongs, if the node partition ID is specified, use that value, otherwise assign by referencing the ID of the node partition resource (huaweicloud_cce_partition.test[0])

  • root_volume: Root volume configuration block

    • volumetype: Root volume type, assigned by referencing input variable root_volume_type, default is "SSD"

    • size: Root volume size (GB), assigned by referencing input variable root_volume_size, default is 40GB

  • data_volumes: Data volume configuration block, creates multiple data volume configurations through dynamic block (dynamic block) based on input variable data_volumes_configuration

    • volumetype: Data volume type, assigned through volumetype in input variable data_volumes_configuration

    • size: Data volume size (GB), assigned through size in input variable data_volumes_configuration

  • lifecycle: Lifecycle configuration block, used to ignore changes to certain fields, avoiding unnecessary resource recreation after node creation due to changes in these fields

Note: Nodes must specify the partition to which they belong, configured through the partition parameter. Node partitions are used to deploy nodes to specified edge sites or regions.

10. Create CCE Node Pool Resource (Optional)

Add the following script to the TF file to inform Terraform to create CCE node pool resources:

Parameter Description:

  • count: The number of resource creations, used to control whether to create node pool resource, only when var.node_pool_name is not empty, the node pool resource is created

  • cluster_id: CCE cluster ID, assigned by referencing the ID of the CCE cluster resource (huaweicloud_cce_cluster.test)

  • name: The name of the node pool, assigned by referencing input variable node_pool_name

  • os: The operating system type of the nodes, assigned by referencing input variable node_pool_os_type, default is "EulerOS 2.9"

  • flavor_id: Node flavor ID, if the node flavor ID is specified, use that value, otherwise assign by using the first flavor ID from the instance flavor list query data source

  • initial_node_count: Initial node count, assigned by referencing input variable node_pool_initial_node_count, default is 1

  • availability_zone: The availability zone where the nodes are located, if the availability zone is specified, use that value, otherwise assign by using the first availability zone from the availability zone list query data source

  • password: The root password of the nodes, assigned by referencing input variable node_pool_password, used for SSH login to the nodes

  • type: The type of the node pool, set to "vm" for virtual machine type

  • partition: The partition to which the node pool belongs, if the node partition ID is specified, use that value, otherwise assign by referencing the ID of the node partition resource (huaweicloud_cce_partition.test[0])

  • root_volume: Root volume configuration block

    • volumetype: Root volume type, assigned by referencing input variable root_volume_type, default is "SSD"

    • size: Root volume size (GB), assigned by referencing input variable root_volume_size, default is 40GB

  • data_volumes: Data volume configuration block, creates multiple data volume configurations through dynamic block (dynamic block) based on input variable data_volumes_configuration

    • volumetype: Data volume type, assigned through volumetype in input variable data_volumes_configuration

    • size: Data volume size (GB), assigned through size in input variable data_volumes_configuration

  • lifecycle: Lifecycle configuration block, used to ignore changes to certain fields, avoiding unnecessary resource recreation after node pool creation due to changes in these fields

Note: Node pools must specify the partition to which they belong, configured through the partition parameter. All nodes in the node pool will be deployed to the specified partition.

11. Preset Input Parameters Required for Resource Deployment

In this practice, some resources and data sources use input variables to assign configuration content, and these input parameters need to be manually entered during subsequent deployment. At the same time, Terraform provides a method to preset these configurations through tfvars files, which can avoid repeated input during each execution.

Create a terraform.tfvars file in the working directory, example content is as follows:

Usage:

  1. Save the above content as a terraform.tfvars file in the working directory (this filename allows users to automatically import the content in the tfvars file when executing terraform commands, other naming requires adding .auto before tfvars, such as variables.auto.tfvars)

  2. Modify the parameter values according to actual needs

  3. When executing terraform plan or terraform apply, Terraform will automatically read the variable values in this file

In addition to using the terraform.tfvars file, you can also set variable values through the following methods:

  1. Command line parameters: terraform apply -var="vpc_name=my-vpc" -var="subnet_name=my-subnet"

  2. Environment variables: export TF_VAR_vpc_name=my-vpc

  3. Custom named variable file: terraform apply -var-file="custom.tfvars"

Note: If the same variable is set through multiple methods, Terraform will use variable values according to the following priority: command line parameters > variable file > environment variables > default values.

12. Initialize and Apply Terraform Configuration

After completing the above script configuration, execute the following steps to create resources:

  1. Run terraform init to initialize the environment

  2. Run terraform plan to view the resource creation plan

  3. After confirming that the resource plan is correct, run terraform apply to start creating node partition

  4. Run terraform show to view the created node partition

Reference Information

Last updated