-
Notifications
You must be signed in to change notification settings - Fork 0
/
chart.ts
111 lines (102 loc) · 2.95 KB
/
chart.ts
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import { Construct } from "constructs";
import path from "node:path";
import { IntOrString, Quantity } from "../../imports/k8s";
import {
ConfigMap,
getCanaryStage,
getDockerTag,
nginxUtil,
TalisChart,
TalisChartProps,
WebService,
} from "../../lib";
export class AdvancedWebServiceChart extends TalisChart {
constructor(scope: Construct, props: TalisChartProps) {
const release = getDockerTag("RELEASE", props.environment, "v0.2.1");
super(scope, { app: "advanced", release, ...props });
const stage = getCanaryStage("CANARY_STAGE");
const applicationPort = 8000;
const appConfigMap = new ConfigMap(this, "config", {
envFiles: [path.resolve(__dirname, "example.env")],
});
const nginxPort = 80;
const nginxConfigMap = nginxUtil.createConfigMap(this, {
includeDefaultConfig: true,
includeSameSiteCookiesConfig: true,
applicationPort,
nginxPort,
});
new WebService(this, "web", {
// Service annotations
description: "Advanced web service",
chatUrl: "https://example.slack.com/archives/ABCDEF123",
eksDashboardUrl: "https://example.io/dashboard",
externalUrl: "https://api.example.com/",
graphsUrl: "https://example.io/grafana",
incidentsUrl: "https://example.io/incidents",
issuesUrl: "https://github.com/talis/talis-cdk8s-constructs/issues",
logsUrl: "https://example.io/loki",
repositoryUrl: "https://github.com/talis/talis-cdk8s-constructs",
runbookUrl: "https://example.io/wiki/runbook",
uptimeUrl: "https://example.io/uptime",
tlsDomain: "*.example.com",
// Pod details
image: `docker.io/rodolphoalves/swapi-deno:${release}`,
release,
env: [
{
name: "ROLLUP_WATCH",
value: "0",
},
],
envFrom: [
{
configMapRef: { name: appConfigMap.name },
},
],
resources: {
requests: {
cpu: Quantity.fromString("50m"),
memory: Quantity.fromString("100Mi"),
},
},
livenessProbe: {
httpGet: {
path: "/",
port: IntOrString.fromNumber(applicationPort),
},
initialDelaySeconds: 0,
periodSeconds: 10,
failureThreshold: 3,
successThreshold: 1,
timeoutSeconds: 2,
},
readinessProbe: {
httpGet: {
path: "/portal",
port: IntOrString.fromNumber(applicationPort),
},
initialDelaySeconds: 0,
periodSeconds: 30,
failureThreshold: 3,
successThreshold: 1,
timeoutSeconds: 2,
},
// Canary releases
canary: true,
stage,
// Auto-scaling
horizontalPodAutoscaler: {
minReplicas: 1,
maxReplicas: 5,
cpuTargetUtilization: 50,
},
// Nginx reverse proxy
port: applicationPort,
nginx: {
configMap: nginxConfigMap.name,
port: nginxPort,
},
});
}
}