/
k8s.go
86 lines (77 loc) · 2.63 KB
/
k8s.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package cpustress
import (
"github.com/DataDog/test-infra-definitions/common/config"
"github.com/DataDog/test-infra-definitions/common/utils"
componentskube "github.com/DataDog/test-infra-definitions/components/kubernetes"
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes"
appsv1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apps/v1"
corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func K8sAppDefinition(e config.CommonEnvironment, kubeProvider *kubernetes.Provider, namespace string, opts ...pulumi.ResourceOption) (*componentskube.Workload, error) {
opts = append(opts, pulumi.Provider(kubeProvider), pulumi.Parent(kubeProvider), pulumi.DeletedWith(kubeProvider))
k8sComponent := &componentskube.Workload{}
if err := e.Ctx.RegisterComponentResource("dd:apps", "cpustress", k8sComponent, opts...); err != nil {
return nil, err
}
opts = append(opts, pulumi.Parent(k8sComponent))
ns, err := corev1.NewNamespace(e.Ctx, namespace, &corev1.NamespaceArgs{
Metadata: metav1.ObjectMetaArgs{
Name: pulumi.String(namespace),
},
}, opts...)
if err != nil {
return nil, err
}
opts = append(opts, utils.PulumiDependsOn(ns))
if _, err := appsv1.NewDeployment(e.Ctx, "stress-ng", &appsv1.DeploymentArgs{
Metadata: &metav1.ObjectMetaArgs{
Name: pulumi.String("stress-ng"),
Namespace: pulumi.String(namespace),
Labels: pulumi.StringMap{
"app": pulumi.String("stress-ng"),
},
},
Spec: &appsv1.DeploymentSpecArgs{
Replicas: pulumi.Int(1),
Selector: &metav1.LabelSelectorArgs{
MatchLabels: pulumi.StringMap{
"app": pulumi.String("stress-ng"),
},
},
Template: &corev1.PodTemplateSpecArgs{
Metadata: &metav1.ObjectMetaArgs{
Labels: pulumi.StringMap{
"app": pulumi.String("stress-ng"),
},
},
Spec: &corev1.PodSpecArgs{
Containers: corev1.ContainerArray{
corev1.ContainerArgs{
Name: pulumi.String("stress-ng"),
Image: pulumi.String(getStressNGImage()),
Args: pulumi.StringArray{
pulumi.String("--cpu=1"),
pulumi.String("--cpu-load=15"),
},
Resources: &corev1.ResourceRequirementsArgs{
Limits: pulumi.StringMap{
"cpu": pulumi.String("200m"),
"memory": pulumi.String("64Mi"),
},
Requests: pulumi.StringMap{
"cpu": pulumi.String("200m"),
"memory": pulumi.String("64Mi"),
},
},
},
},
},
},
},
}, opts...); err != nil {
return nil, err
}
return k8sComponent, nil
}