Deploy Kubernetes and Authenticate with Config
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. When using the Kubernetes provider to manage Kubernetes resources in a CCE cluster, it is necessary to correctly configure the Kubernetes provider to connect to the CCE cluster. This best practice will introduce how to use Terraform to automatically configure the Kubernetes provider by saving the KubeConfig configuration of the CCE cluster to a local file, and then using that configuration file to configure the Kubernetes provider to achieve connection to the CCE cluster. This approach is suitable for scenarios that require persisting KubeConfig configuration or using standard Kubernetes configuration files. This best practice includes querying availability zones and instance flavors, as well as creating infrastructure such as VPC, subnet, Elastic IP, CCE cluster, node, and generating KubeConfig configuration files and configuring the Kubernetes provider.
Related Resources/Data Sources
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. Configure Kubernetes Provider
Since this best practice requires using the Kubernetes provider to manage Kubernetes resources, you need to configure the Kubernetes provider in the providers.tf file. Add the following script to the providers.tf file:
Parameter Description:
config_path: The path to the Kubernetes configuration file, referencing the filename of the local file resource (local_file.test), which contains the KubeConfig configuration obtained from the CCE cluster
config_context: Kubernetes configuration context, set to "external" to use the external access context
Note: The Kubernetes provider connects to the CCE cluster by reading the local KubeConfig configuration file. The configuration file is obtained from the kube_config_raw attribute of the CCE cluster by the local_file resource and saved to the local file.
3. Query Availability Zones Required for 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 related resources:
Parameter Description:
count: The number of data source queries, used to control whether to query availability zone information, only when
var.availability_zoneis empty, the availability zone information is queried
4. 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_idandvar.subnet_idare empty, the VPC resource is createdname: The name of the VPC, assigned by referencing input variable
vpc_namecidr: The CIDR block of the VPC, assigned by referencing input variable
vpc_cidr, default is "192.168.0.0/16"
5. 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_idis empty, the VPC subnet resource is createdvpc_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_namecidr: 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
cidrsubnetfunctiongateway_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
cidrhostfunctionavailability_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
6. Create Elastic IP Resource (Optional)
Add the following script to the TF file to inform Terraform to create Elastic IP resources (if EIP address is not specified):
Parameter Description:
count: The number of resource creations, used to control whether to create Elastic IP resource, only when
var.eip_addressis empty, the Elastic IP resource is createdpublicip: Public IP configuration block
type: Public IP type, assigned by referencing input variable
eip_type, default is "5_bgp" for full dynamic BGP
bandwidth: Bandwidth configuration block
name: The name of the bandwidth, assigned by referencing input variable
bandwidth_namesize: Bandwidth size (Mbps), assigned by referencing input variable
bandwidth_size, default is 5share_type: Bandwidth share type, assigned by referencing input variable
bandwidth_share_type, default is "PER" for dedicatedcharge_mode: Bandwidth charge mode, assigned by referencing input variable
bandwidth_charge_mode, default is "traffic" for pay-per-traffic
7. 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_nameflavor_id: The flavor ID of the CCE cluster, assigned by referencing input variable
cluster_flavor_id, default is "cce.s1.small" for small clustercluster_version: The version of the CCE cluster, assigned by referencing input variable
cluster_version, if null, the latest version will be usedcluster_type: The type of the CCE cluster, assigned by referencing input variable
cluster_type, default is "VirtualMachine" for virtual machine typecontainer_network_type: Container network type, assigned by referencing input variable
container_network_type, default is "overlay_l2" for L2 networkvpc_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])
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])
eip: Elastic IP address, if the EIP address is specified, use that value, otherwise assign by referencing the address of the Elastic IP resource (huaweicloud_vpc_eip.test[0])
authentication_mode: The authentication mode of the cluster, assigned by referencing input variable
authentication_mode, default is "rbac" for role-based access controldelete_all: Whether to delete all resources on termination, assigned by referencing input variable
delete_all_resources_on_terminal, default is "true" to delete all resources
8. Query Instance Flavors Required for Node 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_idis empty, the instance flavor information is queriedperformance_type: Performance type, assigned through input variable
node_performance_type, default is "general" for general purposecpu_core_count: CPU core count, assigned through input variable
node_cpu_core_count, default is 4 coresmemory_size: Memory size (GB), assigned through input variable
node_memory_size, default is 8GBavailability_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
9. Create Key Pair Resource
Add the following script to the TF file to inform Terraform to create key pair resources:
Parameter Description:
name: The name of the key pair, assigned by referencing input variable
keypair_name
10. Create CCE Node Resource
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_nameflavor_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
key_pair: Key pair name, assigned by referencing the name of the key pair resource (huaweicloud_kps_keypair.test)
root_volume: Root volume configuration block
volumetype: Root volume type, assigned by referencing input variable
root_volume_type, default is "SATA"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_configurationvolumetype: Data volume type, assigned through
volumetypein input variabledata_volumes_configurationsize: Data volume size (GB), assigned through
sizein input variabledata_volumes_configuration
11. Create Local KubeConfig Configuration File
Add the following script to the TF file to inform Terraform to create a local KubeConfig configuration file:
Parameter Description:
content: File content, referencing the kube_config_raw attribute of the CCE cluster resource (huaweicloud_cce_cluster.test), which contains the complete KubeConfig configuration content
filename: File path, set to ".kube/config", which is the standard Kubernetes configuration file path
provisioner: Local executor configuration block, used to clean up the .kube directory when the resource is destroyed
command: Command to execute, delete the .kube directory
when: Execution timing, set to "destroy" to execute when the resource is destroyed
Note: The local_file resource saves the KubeConfig configuration of the CCE cluster to a local file, and the Kubernetes provider can connect to the CCE cluster by reading this file. The provisioner is used to clean up the configuration file when the resource is destroyed to avoid leaving sensitive information.
12. 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:
Save the above content as a
terraform.tfvarsfile in the working directory (this filename allows users to automatically import the content in thetfvarsfile when executing terraform commands, other naming requires adding.autobefore tfvars, such asvariables.auto.tfvars)Modify the parameter values according to actual needs
When executing
terraform planorterraform 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:
Command line parameters:
terraform apply -var="vpc_name=my-vpc" -var="subnet_name=my-subnet"Environment variables:
export TF_VAR_vpc_name=my-vpcCustom 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.
13. Initialize and Apply Terraform Configuration
After completing the above script configuration, execute the following steps to create resources:
Run
terraform initto initialize the environment (this will download the Kubernetes provider and local provider)Run
terraform planto view the resource creation planAfter confirming that the resource plan is correct, run
terraform applyto start creating resources and configuration filesRun
terraform showto view the created resources
Note: After creation is complete, the KubeConfig configuration file will be saved in the
.kube/configfile, and the Kubernetes provider will use this file to connect to the CCE cluster. You can use this configuration file to manage cluster resources through kubectl commands or other Kubernetes tools.
Reference Information
Last updated