Skip to content

Commit f9d0884

Browse files
committed
feat: tke - support extension addon
1 parent 0149916 commit f9d0884

File tree

5 files changed

+253
-2
lines changed

5 files changed

+253
-2
lines changed

examples/tencentcloud-tke/main.tf

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,61 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
4141
}
4242
}
4343

44+
#examples for MANAGED_CLUSTER cluster with add-on
45+
resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
46+
vpc_id = var.vpc
47+
cluster_cidr = "10.1.0.0/16"
48+
cluster_max_pod_num = 32
49+
cluster_name = "test"
50+
cluster_desc = "test cluster desc"
51+
cluster_max_service_num = 32
52+
cluster_internet = true
53+
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
54+
cluster_deploy_type = "MANAGED_CLUSTER"
55+
56+
worker_config {
57+
count = 1
58+
availability_zone = "ap-guangzhou-3"
59+
instance_type = var.default_instance_type
60+
system_disk_type = "CLOUD_SSD"
61+
system_disk_size = 60
62+
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
63+
internet_max_bandwidth_out = 100
64+
public_ip_assigned = true
65+
subnet_id = var.subnet
66+
img_id = "img-rkiynh11"
67+
enhanced_security_service = false
68+
enhanced_monitor_service = false
69+
user_data = "dGVzdA=="
70+
password = "ZZXXccvv1212"
71+
}
72+
73+
extension_addon {
74+
name = "NodeProblemDetectorPlus"
75+
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\"}]}}"
76+
}
77+
extension_addon {
78+
name = "OOMGuard"
79+
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
80+
}
81+
extension_addon {
82+
name = "DNSAutoscaler"
83+
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
84+
}
85+
extension_addon {
86+
name = "COS"
87+
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
88+
}
89+
extension_addon {
90+
name = "CFS"
91+
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
92+
}
93+
extension_addon {
94+
name = "CBS"
95+
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
96+
}
97+
}
98+
4499
#examples for MANAGED_CLUSTER VPC-CNI network type cluster with customized master params
45100
resource "tencentcloud_kubernetes_cluster" "managed_vpc_cni_cluster" {
46101
cluster_version = "1.14.3"

tencentcloud/resource_tc_container_cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ func resourceTencentCloudContainerClusterCreate(d *schema.ResourceData, meta int
449449
runInstancesParas := runInstancesPara.ToJsonString()
450450
cvms.Work = []string{runInstancesParas}
451451

452-
id, err := service.CreateCluster(ctx, basic, cAdvanced, cvms, iAdvanced, cidrSet, map[string]string{}, nil, nil, nil)
452+
id, err := service.CreateCluster(ctx, basic, cAdvanced, cvms, iAdvanced, cidrSet, map[string]string{}, nil, nil, nil, nil)
453453
if err != nil {
454454
return err
455455
}

tencentcloud/resource_tc_kubernetes_cluster.go

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,81 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
193193
}
194194
```
195195
196+
Use extension addons
197+
198+
```hcl
199+
variable "availability_zone_first" {
200+
default = "ap-guangzhou-3"
201+
}
202+
203+
variable "cluster_cidr" {
204+
default = "10.31.0.0/16"
205+
}
206+
207+
variable "default_instance_type" {
208+
default = "S5.SMALL1"
209+
}
210+
211+
data "tencentcloud_vpc_subnets" "vpc_first" {
212+
is_default = true
213+
availability_zone = var.availability_zone_first
214+
}
215+
216+
resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
217+
vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id
218+
cluster_cidr = var.cluster_cidr
219+
cluster_max_pod_num = 32
220+
cluster_name = "test"
221+
cluster_desc = "test cluster desc"
222+
cluster_max_service_num = 32
223+
cluster_internet = true
224+
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
225+
cluster_deploy_type = "MANAGED_CLUSTER"
226+
227+
worker_config {
228+
count = 1
229+
availability_zone = var.availability_zone_first
230+
instance_type = var.default_instance_type
231+
system_disk_type = "CLOUD_SSD"
232+
system_disk_size = 60
233+
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
234+
internet_max_bandwidth_out = 100
235+
public_ip_assigned = true
236+
subnet_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id
237+
img_id = "img-rkiynh11"
238+
enhanced_security_service = false
239+
enhanced_monitor_service = false
240+
user_data = "dGVzdA=="
241+
password = "ZZXXccvv1212"
242+
}
243+
244+
extension_addon {
245+
name = "NodeProblemDetectorPlus"
246+
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\"}]}}"
247+
}
248+
extension_addon {
249+
name = "OOMGuard"
250+
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
251+
}
252+
extension_addon {
253+
name = "DNSAutoscaler"
254+
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
255+
}
256+
extension_addon {
257+
name = "COS"
258+
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
259+
}
260+
extension_addon {
261+
name = "CFS"
262+
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
263+
}
264+
extension_addon {
265+
name = "CBS"
266+
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
267+
}
268+
}
269+
```
270+
196271
Use node pool global config
197272
198273
```hcl
@@ -1143,6 +1218,26 @@ func resourceTencentCloudTkeCluster() *schema.Resource {
11431218
},
11441219
Description: "Specify cluster authentication configuration. Only available for managed cluster and `cluster_version` >= 1.20.",
11451220
},
1221+
"extension_addon": {
1222+
Type: schema.TypeList,
1223+
Optional: true,
1224+
ForceNew: true,
1225+
Elem: &schema.Resource{
1226+
Schema: map[string]*schema.Schema{
1227+
"name": {
1228+
Type: schema.TypeString,
1229+
Required: true,
1230+
Description: "Add-on name.",
1231+
},
1232+
"param": {
1233+
Type: schema.TypeString,
1234+
Required: true,
1235+
Description: "Description of the add-on resource object in JSON string format.",
1236+
},
1237+
},
1238+
},
1239+
Description: "Information of the add-on to be installed.",
1240+
},
11461241
"tags": {
11471242
Type: schema.TypeMap,
11481243
Optional: true,
@@ -1643,6 +1738,7 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface
16431738
iDiskMountSettings []*tke.InstanceDataDiskMountSetting
16441739
cidrSet ClusterCidrSettings
16451740
securityPolicies []string
1741+
extensionAddons []*tke.ExtensionAddon
16461742
clusterInternet = d.Get("cluster_internet").(bool)
16471743
clusterIntranet = d.Get("cluster_intranet").(bool)
16481744
intranetSubnetId = d.Get("cluster_intranet_subnet_id").(string)
@@ -1923,8 +2019,22 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface
19232019
return fmt.Errorf("master_config+worker_config and exist_instance can not exist at the same time")
19242020
}
19252021

2022+
if v, ok := d.GetOk("extension_addon"); ok {
2023+
for _, i := range v.([]interface{}) {
2024+
dMap := i.(map[string]interface{})
2025+
name := dMap["name"].(string)
2026+
param := dMap["param"].(string)
2027+
addon := &tke.ExtensionAddon{
2028+
AddonName: helper.String(name),
2029+
AddonParam: helper.String(param),
2030+
}
2031+
extensionAddons = append(extensionAddons, addon)
2032+
}
2033+
}
2034+
2035+
19262036
service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn}
1927-
id, err := service.CreateCluster(ctx, basic, advanced, cvms, iAdvanced, cidrSet, tags, existInstances, &overrideSettings, iDiskMountSettings)
2037+
id, err := service.CreateCluster(ctx, basic, advanced, cvms, iAdvanced, cidrSet, tags, existInstances, &overrideSettings, iDiskMountSettings, extensionAddons)
19282038
if err != nil {
19292039
return err
19302040
}

tencentcloud/service_tencentcloud_tke.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ func (me *TkeService) CreateCluster(ctx context.Context,
399399
existedInstance []*tke.ExistedInstancesForNode,
400400
overrideSettings *OverrideSettings,
401401
iDiskMountSettings []*tke.InstanceDataDiskMountSetting,
402+
extensionAddons []*tke.ExtensionAddon,
402403
) (id string, errRet error) {
403404

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

472+
if len(extensionAddons) > 0 {
473+
request.ExtensionAddons = extensionAddons
474+
}
475+
471476
if len(overrideSettings.Master)+len(overrideSettings.Work) > 0 &&
472477
len(overrideSettings.Master)+len(overrideSettings.Work) != (len(cvms.Master)+len(cvms.Work)) {
473478
return "", fmt.Errorf("len(overrideSettings) != (len(cvms.Master)+len(cvms.Work))")

website/docs/r/kubernetes_cluster.html.markdown

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,81 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" {
203203
}
204204
```
205205

206+
Use extension addons
207+
208+
```hcl
209+
variable "availability_zone_first" {
210+
default = "ap-guangzhou-3"
211+
}
212+
213+
variable "cluster_cidr" {
214+
default = "10.31.0.0/16"
215+
}
216+
217+
variable "default_instance_type" {
218+
default = "S5.SMALL1"
219+
}
220+
221+
data "tencentcloud_vpc_subnets" "vpc_first" {
222+
is_default = true
223+
availability_zone = var.availability_zone_first
224+
}
225+
226+
resource "tencentcloud_kubernetes_cluster" "cluster_with_addon" {
227+
vpc_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.vpc_id
228+
cluster_cidr = var.cluster_cidr
229+
cluster_max_pod_num = 32
230+
cluster_name = "test"
231+
cluster_desc = "test cluster desc"
232+
cluster_max_service_num = 32
233+
cluster_internet = true
234+
managed_cluster_internet_security_policies = ["3.3.3.3", "1.1.1.1"]
235+
cluster_deploy_type = "MANAGED_CLUSTER"
236+
237+
worker_config {
238+
count = 1
239+
availability_zone = var.availability_zone_first
240+
instance_type = var.default_instance_type
241+
system_disk_type = "CLOUD_SSD"
242+
system_disk_size = 60
243+
internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR"
244+
internet_max_bandwidth_out = 100
245+
public_ip_assigned = true
246+
subnet_id = data.tencentcloud_vpc_subnets.vpc_first.instance_list.0.subnet_id
247+
img_id = "img-rkiynh11"
248+
enhanced_security_service = false
249+
enhanced_monitor_service = false
250+
user_data = "dGVzdA=="
251+
password = "ZZXXccvv1212"
252+
}
253+
254+
extension_addon {
255+
name = "NodeProblemDetectorPlus"
256+
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\"}]}}"
257+
}
258+
extension_addon {
259+
name = "OOMGuard"
260+
param = "{\"kind\":\"OOMGuard\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"oom\"},\"spec\":{}}"
261+
}
262+
extension_addon {
263+
name = "DNSAutoscaler"
264+
param = "{\"kind\":\"DNSAutoscaler\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"da\"},\"spec\":{}}"
265+
}
266+
extension_addon {
267+
name = "COS"
268+
param = "{\"kind\":\"COS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cos\"},\"spec\":{\"version\":\"1.0.0\"}}"
269+
}
270+
extension_addon {
271+
name = "CFS"
272+
param = "{\"kind\":\"CFS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cfs\"},\"spec\":{\"version\":\"1.0.0\"}}"
273+
}
274+
extension_addon {
275+
name = "CBS"
276+
param = "{\"kind\":\"CBS\",\"apiVersion\":\"platform.tke/v1\",\"metadata\":{\"generateName\":\"cbs\"},\"spec\":{}}"
277+
}
278+
}
279+
```
280+
206281
Use node pool global config
207282

208283
```hcl
@@ -360,6 +435,7 @@ The following arguments are supported:
360435
* `enable_customized_pod_cidr` - (Optional) Whether to enable the custom mode of node podCIDR size. Default is false.
361436
* `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.
362437
* `exist_instance` - (Optional, ForceNew) create tke cluster by existed instances.
438+
* `extension_addon` - (Optional, ForceNew) Information of the add-on to be installed.
363439
* `extra_args` - (Optional, ForceNew) Custom parameter information related to the node.
364440
* `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.
365441
* `ignore_cluster_cidr_conflict` - (Optional, ForceNew) Indicates whether to ignore the cluster cidr conflict error. Default is false.
@@ -408,6 +484,11 @@ The `exist_instance` object supports the following:
408484
* `instances_para` - (Optional, ForceNew) Reinstallation parameters of an existing instance.
409485
* `node_role` - (Optional, ForceNew) Role of existed node. value:MASTER_ETCD or WORKER.
410486

487+
The `extension_addon` object supports the following:
488+
489+
* `name` - (Required) Add-on name.
490+
* `param` - (Required) Description of the add-on resource object in JSON string format.
491+
411492
The `instances_para` object supports the following:
412493

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

0 commit comments

Comments
 (0)