Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions examples/tencentcloud-tke/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,61 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
}
}

#examples for MANAGED_CLUSTER cluster with add-on
resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
vpc_id = var.vpc
cluster_cidr = "10.1.0.0/16"
cluster_max_pod_num = 32
cluster_name = "test"
cluster_desc = "test cluster desc"
cluster_max_service_num = 32
cluster_internet = true
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
cluster_deploy_type = "MANAGED_CLUSTER"

worker_config {
count = 1
availability_zone = "ap-guangzhou-3"
instance_type = var.default_instance_type
system_disk_type = "CLOUD_SSD"
system_disk_size = 60
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
internet_max_bandwidth_out = 100
public_ip_assigned = true
subnet_id = var.subnet
img_id = "img-rkiynh11"
enhanced_security_service = false
enhanced_monitor_service = false
user_data = "dGVzdA=="
password = "ZZXXccvv1212"
}

extension_addon {
name = "NodeProblemDetectorPlus"
param = "{\"kind\":\"NodeProblemDetector\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"npd\"},\"spec\":{\"version\":\"v2.0.0\",\"selfCure\":true,\"uin\":\"12345\",\"subUin\":\"12345\",\"policys\":[{\"actions\":{\"CVM\":{\"reBootCVM\":true,\"retryCounts\":1},\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1},\"nodePod\":{\"evict\":true,\"retryCounts\":1}},\"conditionType\":\"Ready\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1}},\"conditionType\":\"KubeletProblem\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":false,\"retryCounts\":1}},\"conditionType\":\"DockerdProblem\"}]}}"
}
extension_addon {
name = "OOMGuard"
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
}
extension_addon {
name = "DNSAutoscaler"
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
}
extension_addon {
name = "COS"
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CFS"
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CBS"
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
}
}

#examples for MANAGED_CLUSTER VPC-CNI network type cluster with customized master params
resource "tencentcloud_kubernetes_cluster" "managed_vpc_cni_cluster" {
cluster_version = "1.14.3"
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/resource_tc_container_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ func resourceTencentCloudContainerClusterCreate(d *schema.ResourceData, meta int
runInstancesParas := runInstancesPara.ToJsonString()
cvms.Work = []string{runInstancesParas}

id, err := service.CreateCluster(ctx, basic, cAdvanced, cvms, iAdvanced, cidrSet, map[string]string{}, nil, nil, nil)
id, err := service.CreateCluster(ctx, basic, cAdvanced, cvms, iAdvanced, cidrSet, map[string]string{}, nil, nil, nil, nil)
if err != nil {
return err
}
Expand Down
112 changes: 111 additions & 1 deletion tencentcloud/resource_tc_kubernetes_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,81 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
}
```

Use extension addons

```hcl
variable "availability_zone_first" {
default = "ap-guangzhou-3"
}

variable "cluster_cidr" {
default = "10.31.0.0/16"
}

variable "default_instance_type" {
default = "S5.SMALL1"
}

data "tencentcloud_vpc_subnets" "vpc_first" {
is_default = true
availability_zone = var.availability_zone_first
}

resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id
cluster_cidr = var.cluster_cidr
cluster_max_pod_num = 32
cluster_name = "test"
cluster_desc = "test cluster desc"
cluster_max_service_num = 32
cluster_internet = true
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
cluster_deploy_type = "MANAGED_CLUSTER"

worker_config {
count = 1
availability_zone = var.availability_zone_first
instance_type = var.default_instance_type
system_disk_type = "CLOUD_SSD"
system_disk_size = 60
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
internet_max_bandwidth_out = 100
public_ip_assigned = true
subnet_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id
img_id = "img-rkiynh11"
enhanced_security_service = false
enhanced_monitor_service = false
user_data = "dGVzdA=="
password = "ZZXXccvv1212"
}

extension_addon {
name = "NodeProblemDetectorPlus"
param = "{\"kind\":\"NodeProblemDetector\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"npd\"},\"spec\":{\"version\":\"v2.0.0\",\"selfCure\":true,\"uin\":\"12345\",\"subUin\":\"12345\",\"policys\":[{\"actions\":{\"CVM\":{\"reBootCVM\":true,\"retryCounts\":1},\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1},\"nodePod\":{\"evict\":true,\"retryCounts\":1}},\"conditionType\":\"Ready\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1}},\"conditionType\":\"KubeletProblem\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":false,\"retryCounts\":1}},\"conditionType\":\"DockerdProblem\"}]}}"
}
extension_addon {
name = "OOMGuard"
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
}
extension_addon {
name = "DNSAutoscaler"
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
}
extension_addon {
name = "COS"
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CFS"
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CBS"
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
}
}
```

Use node pool global config

```hcl
Expand Down Expand Up @@ -1143,6 +1218,26 @@ func resourceTencentCloudTkeCluster() *schema.Resource {
},
Description: "Specify cluster authentication configuration. Only available for managed cluster and `cluster_version` >= 1.20.",
},
"extension_addon": {
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
Description: "Add-on name.",
},
"param": {
Type: schema.TypeString,
Required: true,
Description: "Description of the add-on resource object in JSON string format.",
},
},
},
Description: "Information of the add-on to be installed.",
},
"tags": {
Type: schema.TypeMap,
Optional: true,
Expand Down Expand Up @@ -1643,6 +1738,7 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface
iDiskMountSettings []*tke.InstanceDataDiskMountSetting
cidrSet ClusterCidrSettings
securityPolicies []string
extensionAddons []*tke.ExtensionAddon
clusterInternet = d.Get("cluster_internet").(bool)
clusterIntranet = d.Get("cluster_intranet").(bool)
intranetSubnetId = d.Get("cluster_intranet_subnet_id").(string)
Expand Down Expand Up @@ -1923,8 +2019,22 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface
return fmt.Errorf("master_config+worker_config and exist_instance can not exist at the same time")
}

if v, ok := d.GetOk("extension_addon"); ok {
for _, i := range v.([]interface{}) {
dMap := i.(map[string]interface{})
name := dMap["name"].(string)
param := dMap["param"].(string)
addon := &tke.ExtensionAddon{
AddonName: helper.String(name),
AddonParam: helper.String(param),
}
extensionAddons = append(extensionAddons, addon)
}
}


service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn}
id, err := service.CreateCluster(ctx, basic, advanced, cvms, iAdvanced, cidrSet, tags, existInstances, &overrideSettings, iDiskMountSettings)
id, err := service.CreateCluster(ctx, basic, advanced, cvms, iAdvanced, cidrSet, tags, existInstances, &overrideSettings, iDiskMountSettings, extensionAddons)
if err != nil {
return err
}
Expand Down
5 changes: 5 additions & 0 deletions tencentcloud/service_tencentcloud_tke.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,7 @@ func (me *TkeService) CreateCluster(ctx context.Context,
existedInstance []*tke.ExistedInstancesForNode,
overrideSettings *OverrideSettings,
iDiskMountSettings []*tke.InstanceDataDiskMountSetting,
extensionAddons []*tke.ExtensionAddon,
) (id string, errRet error) {

logId := getLogId(ctx)
Expand Down Expand Up @@ -468,6 +469,10 @@ func (me *TkeService) CreateCluster(ctx context.Context,
request.InstanceAdvancedSettings.DataDisks = iAdvanced.DataDisks
}

if len(extensionAddons) > 0 {
request.ExtensionAddons = extensionAddons
}

if len(overrideSettings.Master)+len(overrideSettings.Work) > 0 &&
len(overrideSettings.Master)+len(overrideSettings.Work) != (len(cvms.Master)+len(cvms.Work)) {
return "", fmt.Errorf("len(overrideSettings) != (len(cvms.Master)+len(cvms.Work))")
Expand Down
81 changes: 81 additions & 0 deletions website/docs/r/kubernetes_cluster.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,81 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
}
```

Use extension addons

```hcl
variable "availability_zone_first" {
default = "ap-guangzhou-3"
}

variable "cluster_cidr" {
default = "10.31.0.0/16"
}

variable "default_instance_type" {
default = "S5.SMALL1"
}

data "tencentcloud_vpc_subnets" "vpc_first" {
is_default = true
availability_zone = var.availability_zone_first
}

resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id
cluster_cidr = var.cluster_cidr
cluster_max_pod_num = 32
cluster_name = "test"
cluster_desc = "test cluster desc"
cluster_max_service_num = 32
cluster_internet = true
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
cluster_deploy_type = "MANAGED_CLUSTER"

worker_config {
count = 1
availability_zone = var.availability_zone_first
instance_type = var.default_instance_type
system_disk_type = "CLOUD_SSD"
system_disk_size = 60
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
internet_max_bandwidth_out = 100
public_ip_assigned = true
subnet_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id
img_id = "img-rkiynh11"
enhanced_security_service = false
enhanced_monitor_service = false
user_data = "dGVzdA=="
password = "ZZXXccvv1212"
}

extension_addon {
name = "NodeProblemDetectorPlus"
param = "{\"kind\":\"NodeProblemDetector\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"npd\"},\"spec\":{\"version\":\"v2.0.0\",\"selfCure\":true,\"uin\":\"12345\",\"subUin\":\"12345\",\"policys\":[{\"actions\":{\"CVM\":{\"reBootCVM\":true,\"retryCounts\":1},\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1},\"nodePod\":{\"evict\":true,\"retryCounts\":1}},\"conditionType\":\"Ready\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":true,\"retryCounts\":1}},\"conditionType\":\"KubeletProblem\"},{\"actions\":{\"runtime\":{\"reStartDokcer\":true,\"reStartKubelet\":false,\"retryCounts\":1}},\"conditionType\":\"DockerdProblem\"}]}}"
}
extension_addon {
name = "OOMGuard"
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
}
extension_addon {
name = "DNSAutoscaler"
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
}
extension_addon {
name = "COS"
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CFS"
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
}
extension_addon {
name = "CBS"
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
}
}
```

Use node pool global config

```hcl
Expand Down Expand Up @@ -360,6 +435,7 @@ The following arguments are supported:
* `enable_customized_pod_cidr` - (Optional) Whether to enable the custom mode of node podCIDR size. Default is false.
* `eni_subnet_ids` - (Optional) Subnet Ids for cluster with VPC-CNI network mode. This field can only set when field `network_type` is 'VPC-CNI'. `eni_subnet_ids` can not empty once be set.
* `exist_instance` - (Optional, ForceNew) create tke cluster by existed instances.
* `extension_addon` - (Optional, ForceNew) Information of the add-on to be installed.
* `extra_args` - (Optional, ForceNew) Custom parameter information related to the node.
* `globe_desired_pod_num` - (Optional, ForceNew) Indicate to set desired pod number in node. valid when enable_customized_pod_cidr=true, and it takes effect for all nodes.
* `ignore_cluster_cidr_conflict` - (Optional, ForceNew) Indicates whether to ignore the cluster cidr conflict error. Default is false.
Expand Down Expand Up @@ -408,6 +484,11 @@ The `exist_instance` object supports the following:
* `instances_para` - (Optional, ForceNew) Reinstallation parameters of an existing instance.
* `node_role` - (Optional, ForceNew) Role of existed node. value:MASTER_ETCD or WORKER.

The `extension_addon` object supports the following:

* `name` - (Required) Add-on name.
* `param` - (Required) Description of the add-on resource object in JSON string format.

The `instances_para` object supports the following:

* `instance_ids` - (Required, ForceNew) Cluster IDs.
Expand Down