@bluedynamics/cdk8s-monitoring 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +76 -0
- package/LICENSE +202 -0
- package/README.md +87 -0
- package/examples/synth.ts +17 -0
- package/lib/constructs/alloy.d.ts +29 -0
- package/lib/constructs/alloy.js +214 -0
- package/lib/constructs/grafana-password-secret.d.ts +57 -0
- package/lib/constructs/grafana-password-secret.js +99 -0
- package/lib/constructs/loki-s3-bucket.d.ts +24 -0
- package/lib/constructs/loki-s3-bucket.js +147 -0
- package/lib/constructs/loki-s3-credentials.d.ts +27 -0
- package/lib/constructs/loki-s3-credentials.js +71 -0
- package/lib/constructs/loki.d.ts +30 -0
- package/lib/constructs/loki.js +185 -0
- package/lib/constructs/namespace.d.ts +13 -0
- package/lib/constructs/namespace.js +34 -0
- package/lib/constructs/priority-class.d.ts +12 -0
- package/lib/constructs/priority-class.js +38 -0
- package/lib/constructs/prometheus-stack.d.ts +30 -0
- package/lib/constructs/prometheus-stack.js +477 -0
- package/lib/constructs/thanos-compactor.d.ts +35 -0
- package/lib/constructs/thanos-compactor.js +198 -0
- package/lib/constructs/thanos-query.d.ts +30 -0
- package/lib/constructs/thanos-query.js +205 -0
- package/lib/constructs/thanos-s3-bucket.d.ts +24 -0
- package/lib/constructs/thanos-s3-bucket.js +147 -0
- package/lib/constructs/thanos-s3-credentials.d.ts +27 -0
- package/lib/constructs/thanos-s3-credentials.js +93 -0
- package/lib/constructs/thanos-store.d.ts +30 -0
- package/lib/constructs/thanos-store.js +239 -0
- package/lib/default-config.d.ts +12 -0
- package/lib/default-config.js +77 -0
- package/lib/imports/external-secrets.io.d.ts +39243 -0
- package/lib/imports/external-secrets.io.js +23112 -0
- package/lib/imports/generators.external-secrets.io.d.ts +7831 -0
- package/lib/imports/generators.external-secrets.io.js +4895 -0
- package/lib/imports/k8s.d.ts +24537 -0
- package/lib/imports/k8s.js +18268 -0
- package/lib/imports/s3.aws.upbound.io.d.ts +2882 -0
- package/lib/imports/s3.aws.upbound.io.js +1828 -0
- package/lib/index.d.ts +17 -0
- package/lib/index.js +38 -0
- package/lib/monitoring-chart.d.ts +39 -0
- package/lib/monitoring-chart.js +127 -0
- package/lib/types.d.ts +142 -0
- package/lib/types.js +3 -0
- package/package.json +117 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LokiConstruct = void 0;
|
|
4
|
+
const cdk8s_1 = require("cdk8s");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
/**
|
|
7
|
+
* Creates Loki HelmChart for log aggregation.
|
|
8
|
+
*
|
|
9
|
+
* This construct deploys Loki in SimpleScalable mode with:
|
|
10
|
+
* - Backend (2 replicas) - Index and compaction
|
|
11
|
+
* - Read (2 replicas) - Query processing
|
|
12
|
+
* - Write (2 replicas) - Log ingestion
|
|
13
|
+
* - Gateway (1 replica) - HTTP API endpoint
|
|
14
|
+
* - S3 storage backend (Hetzner Object Storage)
|
|
15
|
+
*
|
|
16
|
+
* Prerequisites:
|
|
17
|
+
* - Namespace exists
|
|
18
|
+
* - PriorityClass 'high-priority' exists
|
|
19
|
+
* - Longhorn storage class available
|
|
20
|
+
* - S3 bucket exists (via Crossplane)
|
|
21
|
+
* - S3 credentials secret exists (via LokiS3CredentialsConstruct)
|
|
22
|
+
*
|
|
23
|
+
* Sync Wave: 2 (core services - after S3 credentials secret)
|
|
24
|
+
*/
|
|
25
|
+
class LokiConstruct extends constructs_1.Construct {
|
|
26
|
+
constructor(scope, id, props) {
|
|
27
|
+
super(scope, id);
|
|
28
|
+
const { namespace, config, s3CredentialsSecretName } = props;
|
|
29
|
+
// Generate Helm values YAML
|
|
30
|
+
const helmValues = this.generateHelmValues(config, s3CredentialsSecretName);
|
|
31
|
+
// Create HelmChart resource (K3S Helm controller)
|
|
32
|
+
// Wave 2: Core Services - log aggregation
|
|
33
|
+
new cdk8s_1.ApiObject(this, 'loki', {
|
|
34
|
+
apiVersion: 'helm.cattle.io/v1',
|
|
35
|
+
kind: 'HelmChart',
|
|
36
|
+
metadata: {
|
|
37
|
+
name: 'loki',
|
|
38
|
+
namespace: namespace,
|
|
39
|
+
labels: {
|
|
40
|
+
'app.kubernetes.io/name': 'loki',
|
|
41
|
+
'app.kubernetes.io/component': 'logging',
|
|
42
|
+
'app.kubernetes.io/managed-by': 'cdk8s',
|
|
43
|
+
'app.kubernetes.io/part-of': 'monitoring',
|
|
44
|
+
},
|
|
45
|
+
annotations: {
|
|
46
|
+
'argocd.argoproj.io/sync-wave': '2',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
spec: {
|
|
50
|
+
repo: 'https://grafana.github.io/helm-charts',
|
|
51
|
+
chart: 'loki',
|
|
52
|
+
version: config.versions.loki === 'latest' ? undefined : config.versions.loki,
|
|
53
|
+
targetNamespace: namespace,
|
|
54
|
+
valuesContent: helmValues,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
generateHelmValues(config, s3CredentialsSecretName) {
|
|
59
|
+
// S3 credentials are injected via environment variables from a Kubernetes secret
|
|
60
|
+
// The secret is created by LokiS3CredentialsConstruct using ExternalSecrets
|
|
61
|
+
// Loki expands environment variables in config when -config.expand-env=true is set
|
|
62
|
+
return `deploymentMode: SimpleScalable
|
|
63
|
+
|
|
64
|
+
loki:
|
|
65
|
+
auth_enabled: false
|
|
66
|
+
|
|
67
|
+
schemaConfig:
|
|
68
|
+
configs:
|
|
69
|
+
- from: 2024-01-01
|
|
70
|
+
store: tsdb
|
|
71
|
+
object_store: s3
|
|
72
|
+
schema: v13
|
|
73
|
+
index:
|
|
74
|
+
prefix: loki_index_
|
|
75
|
+
period: 24h
|
|
76
|
+
|
|
77
|
+
storage:
|
|
78
|
+
bucketNames:
|
|
79
|
+
chunks: ${config.s3.buckets.loki}
|
|
80
|
+
ruler: ${config.s3.buckets.loki}
|
|
81
|
+
type: s3
|
|
82
|
+
s3:
|
|
83
|
+
endpoint: ${config.s3.endpoint}
|
|
84
|
+
region: auto # Dummy region for Hetzner S3 (endpoint determines actual location)
|
|
85
|
+
# Credentials are expanded from environment variables at runtime
|
|
86
|
+
secretAccessKey: \${AWS_SECRET_ACCESS_KEY}
|
|
87
|
+
accessKeyId: \${AWS_ACCESS_KEY_ID}
|
|
88
|
+
s3ForcePathStyle: false
|
|
89
|
+
insecure: false
|
|
90
|
+
|
|
91
|
+
limits_config:
|
|
92
|
+
allow_structured_metadata: true
|
|
93
|
+
max_streams_per_user: 100000
|
|
94
|
+
ingestion_rate_mb: 10
|
|
95
|
+
ingestion_burst_size_mb: 20
|
|
96
|
+
retention_period: ${config.retention.loki}
|
|
97
|
+
reject_old_samples: true
|
|
98
|
+
reject_old_samples_max_age: 168h
|
|
99
|
+
|
|
100
|
+
compactor:
|
|
101
|
+
retention_enabled: true
|
|
102
|
+
delete_request_store: s3
|
|
103
|
+
|
|
104
|
+
backend:
|
|
105
|
+
replicas: ${config.replicas.lokiBackend}
|
|
106
|
+
extraArgs:
|
|
107
|
+
- "-config.expand-env=true"
|
|
108
|
+
extraEnvFrom:
|
|
109
|
+
- secretRef:
|
|
110
|
+
name: ${s3CredentialsSecretName}
|
|
111
|
+
resources:
|
|
112
|
+
limits:
|
|
113
|
+
cpu: ${config.resources.lokiBackend.limits.cpu}
|
|
114
|
+
memory: ${config.resources.lokiBackend.limits.memory}
|
|
115
|
+
requests:
|
|
116
|
+
cpu: ${config.resources.lokiBackend.requests.cpu}
|
|
117
|
+
memory: ${config.resources.lokiBackend.requests.memory}
|
|
118
|
+
persistence:
|
|
119
|
+
enabled: true
|
|
120
|
+
storageClass: longhorn
|
|
121
|
+
size: ${config.storage.lokiBackend}
|
|
122
|
+
priorityClassName: high-priority
|
|
123
|
+
|
|
124
|
+
read:
|
|
125
|
+
replicas: ${config.replicas.lokiRead}
|
|
126
|
+
extraArgs:
|
|
127
|
+
- "-config.expand-env=true"
|
|
128
|
+
extraEnvFrom:
|
|
129
|
+
- secretRef:
|
|
130
|
+
name: ${s3CredentialsSecretName}
|
|
131
|
+
resources:
|
|
132
|
+
limits:
|
|
133
|
+
cpu: ${config.resources.lokiRead.limits.cpu}
|
|
134
|
+
memory: ${config.resources.lokiRead.limits.memory}
|
|
135
|
+
requests:
|
|
136
|
+
cpu: ${config.resources.lokiRead.requests.cpu}
|
|
137
|
+
memory: ${config.resources.lokiRead.requests.memory}
|
|
138
|
+
priorityClassName: high-priority
|
|
139
|
+
|
|
140
|
+
write:
|
|
141
|
+
replicas: ${config.replicas.lokiWrite}
|
|
142
|
+
extraArgs:
|
|
143
|
+
- "-config.expand-env=true"
|
|
144
|
+
extraEnvFrom:
|
|
145
|
+
- secretRef:
|
|
146
|
+
name: ${s3CredentialsSecretName}
|
|
147
|
+
resources:
|
|
148
|
+
limits:
|
|
149
|
+
cpu: ${config.resources.lokiWrite.limits.cpu}
|
|
150
|
+
memory: ${config.resources.lokiWrite.limits.memory}
|
|
151
|
+
requests:
|
|
152
|
+
cpu: ${config.resources.lokiWrite.requests.cpu}
|
|
153
|
+
memory: ${config.resources.lokiWrite.requests.memory}
|
|
154
|
+
persistence:
|
|
155
|
+
enabled: true
|
|
156
|
+
storageClass: longhorn
|
|
157
|
+
size: ${config.storage.lokiWrite}
|
|
158
|
+
priorityClassName: high-priority
|
|
159
|
+
|
|
160
|
+
gateway:
|
|
161
|
+
enabled: true
|
|
162
|
+
replicas: ${config.replicas.grafana}
|
|
163
|
+
resources:
|
|
164
|
+
limits:
|
|
165
|
+
cpu: ${config.resources.lokiGateway.limits.cpu}
|
|
166
|
+
memory: ${config.resources.lokiGateway.limits.memory}
|
|
167
|
+
requests:
|
|
168
|
+
cpu: ${config.resources.lokiGateway.requests.cpu}
|
|
169
|
+
memory: ${config.resources.lokiGateway.requests.memory}
|
|
170
|
+
priorityClassName: high-priority
|
|
171
|
+
|
|
172
|
+
minio:
|
|
173
|
+
enabled: false
|
|
174
|
+
|
|
175
|
+
# Disable memcached caches to reduce memory footprint
|
|
176
|
+
# Memcached is an optimization for high query loads, not required for small clusters
|
|
177
|
+
chunksCache:
|
|
178
|
+
enabled: false
|
|
179
|
+
resultsCache:
|
|
180
|
+
enabled: false
|
|
181
|
+
`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.LokiConstruct = LokiConstruct;
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9raS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2xva2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWtDO0FBQ2xDLDJDQUF1QztBQVN2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQjtRQUN4RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRTdELDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFNUUsa0RBQWtEO1FBQ2xELDBDQUEwQztRQUMxQyxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUMxQixVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLElBQUksRUFBRSxXQUFXO1lBQ2pCLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsTUFBTTtnQkFDWixTQUFTLEVBQUUsU0FBUztnQkFDcEIsTUFBTSxFQUFFO29CQUNOLHdCQUF3QixFQUFFLE1BQU07b0JBQ2hDLDZCQUE2QixFQUFFLFNBQVM7b0JBQ3hDLDhCQUE4QixFQUFFLE9BQU87b0JBQ3ZDLDJCQUEyQixFQUFFLFlBQVk7aUJBQzFDO2dCQUNELFdBQVcsRUFBRTtvQkFDWCw4QkFBOEIsRUFBRSxHQUFHO2lCQUNwQzthQUNGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSx1Q0FBdUM7Z0JBQzdDLEtBQUssRUFBRSxNQUFNO2dCQUNiLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2dCQUM3RSxlQUFlLEVBQUUsU0FBUztnQkFDMUIsYUFBYSxFQUFFLFVBQVU7YUFDMUI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLE1BQXdCLEVBQ3hCLHVCQUErQjtRQUUvQixpRkFBaUY7UUFDakYsNEVBQTRFO1FBQzVFLG1GQUFtRjtRQUVuRixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7OztnQkFpQkssTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSTtlQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJOzs7a0JBR25CLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUTs7Ozs7Ozs7Ozs7Ozt3QkFhWixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7Ozs7OztjQVMvQixNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVc7Ozs7O2dCQUt6Qix1QkFBdUI7OzthQUcxQixNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07O2FBRTdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUN0QyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTTs7OztZQUloRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7Ozs7Y0FJeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFROzs7OztnQkFLdEIsdUJBQXVCOzs7YUFHMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQ2pDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNOzthQUUxQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7Y0FJM0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTOzs7OztnQkFLdkIsdUJBQXVCOzs7YUFHMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzthQUUzQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7WUFJOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTOzs7OztjQUt0QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU87OzthQUd4QixNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU07O2FBRTdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUN0QyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTTs7Ozs7Ozs7Ozs7O0NBWTNELENBQUM7SUFDQSxDQUFDO0NBQ0Y7QUF0S0Qsc0NBc0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNb25pdG9yaW5nQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExva2lQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG4gIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBMb2tpIEhlbG1DaGFydCBmb3IgbG9nIGFnZ3JlZ2F0aW9uLlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGRlcGxveXMgTG9raSBpbiBTaW1wbGVTY2FsYWJsZSBtb2RlIHdpdGg6XG4gKiAtIEJhY2tlbmQgKDIgcmVwbGljYXMpIC0gSW5kZXggYW5kIGNvbXBhY3Rpb25cbiAqIC0gUmVhZCAoMiByZXBsaWNhcykgLSBRdWVyeSBwcm9jZXNzaW5nXG4gKiAtIFdyaXRlICgyIHJlcGxpY2FzKSAtIExvZyBpbmdlc3Rpb25cbiAqIC0gR2F0ZXdheSAoMSByZXBsaWNhKSAtIEhUVFAgQVBJIGVuZHBvaW50XG4gKiAtIFMzIHN0b3JhZ2UgYmFja2VuZCAoSGV0em5lciBPYmplY3QgU3RvcmFnZSlcbiAqXG4gKiBQcmVyZXF1aXNpdGVzOlxuICogLSBOYW1lc3BhY2UgZXhpc3RzXG4gKiAtIFByaW9yaXR5Q2xhc3MgJ2hpZ2gtcHJpb3JpdHknIGV4aXN0c1xuICogLSBMb25naG9ybiBzdG9yYWdlIGNsYXNzIGF2YWlsYWJsZVxuICogLSBTMyBidWNrZXQgZXhpc3RzICh2aWEgQ3Jvc3NwbGFuZSlcbiAqIC0gUzMgY3JlZGVudGlhbHMgc2VjcmV0IGV4aXN0cyAodmlhIExva2lTM0NyZWRlbnRpYWxzQ29uc3RydWN0KVxuICpcbiAqIFN5bmMgV2F2ZTogMiAoY29yZSBzZXJ2aWNlcyAtIGFmdGVyIFMzIGNyZWRlbnRpYWxzIHNlY3JldClcbiAqL1xuZXhwb3J0IGNsYXNzIExva2lDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG9raVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcsIHMzQ3JlZGVudGlhbHNTZWNyZXROYW1lIH0gPSBwcm9wcztcblxuICAgIC8vIEdlbmVyYXRlIEhlbG0gdmFsdWVzIFlBTUxcbiAgICBjb25zdCBoZWxtVmFsdWVzID0gdGhpcy5nZW5lcmF0ZUhlbG1WYWx1ZXMoY29uZmlnLCBzM0NyZWRlbnRpYWxzU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBDcmVhdGUgSGVsbUNoYXJ0IHJlc291cmNlIChLM1MgSGVsbSBjb250cm9sbGVyKVxuICAgIC8vIFdhdmUgMjogQ29yZSBTZXJ2aWNlcyAtIGxvZyBhZ2dyZWdhdGlvblxuICAgIG5ldyBBcGlPYmplY3QodGhpcywgJ2xva2knLCB7XG4gICAgICBhcGlWZXJzaW9uOiAnaGVsbS5jYXR0bGUuaW8vdjEnLFxuICAgICAga2luZDogJ0hlbG1DaGFydCcsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lOiAnbG9raScsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdsb2tpJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ2xvZ2dpbmcnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5JzogJ2NkazhzJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZic6ICdtb25pdG9yaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAnYXJnb2NkLmFyZ29wcm9qLmlvL3N5bmMtd2F2ZSc6ICcyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzcGVjOiB7XG4gICAgICAgIHJlcG86ICdodHRwczovL2dyYWZhbmEuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICdsb2tpJyxcbiAgICAgICAgdmVyc2lvbjogY29uZmlnLnZlcnNpb25zLmxva2kgPT09ICdsYXRlc3QnID8gdW5kZWZpbmVkIDogY29uZmlnLnZlcnNpb25zLmxva2ksXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiBoZWxtVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIZWxtVmFsdWVzKFxuICAgIGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZyxcbiAgICBzM0NyZWRlbnRpYWxzU2VjcmV0TmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIC8vIFMzIGNyZWRlbnRpYWxzIGFyZSBpbmplY3RlZCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gYSBLdWJlcm5ldGVzIHNlY3JldFxuICAgIC8vIFRoZSBzZWNyZXQgaXMgY3JlYXRlZCBieSBMb2tpUzNDcmVkZW50aWFsc0NvbnN0cnVjdCB1c2luZyBFeHRlcm5hbFNlY3JldHNcbiAgICAvLyBMb2tpIGV4cGFuZHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGNvbmZpZyB3aGVuIC1jb25maWcuZXhwYW5kLWVudj10cnVlIGlzIHNldFxuXG4gICAgcmV0dXJuIGBkZXBsb3ltZW50TW9kZTogU2ltcGxlU2NhbGFibGVcblxubG9raTpcbiAgYXV0aF9lbmFibGVkOiBmYWxzZVxuXG4gIHNjaGVtYUNvbmZpZzpcbiAgICBjb25maWdzOlxuICAgICAgLSBmcm9tOiAyMDI0LTAxLTAxXG4gICAgICAgIHN0b3JlOiB0c2RiXG4gICAgICAgIG9iamVjdF9zdG9yZTogczNcbiAgICAgICAgc2NoZW1hOiB2MTNcbiAgICAgICAgaW5kZXg6XG4gICAgICAgICAgcHJlZml4OiBsb2tpX2luZGV4X1xuICAgICAgICAgIHBlcmlvZDogMjRoXG5cbiAgc3RvcmFnZTpcbiAgICBidWNrZXROYW1lczpcbiAgICAgIGNodW5rczogJHtjb25maWcuczMuYnVja2V0cy5sb2tpfVxuICAgICAgcnVsZXI6ICR7Y29uZmlnLnMzLmJ1Y2tldHMubG9raX1cbiAgICB0eXBlOiBzM1xuICAgIHMzOlxuICAgICAgZW5kcG9pbnQ6ICR7Y29uZmlnLnMzLmVuZHBvaW50fVxuICAgICAgcmVnaW9uOiBhdXRvICAjIER1bW15IHJlZ2lvbiBmb3IgSGV0em5lciBTMyAoZW5kcG9pbnQgZGV0ZXJtaW5lcyBhY3R1YWwgbG9jYXRpb24pXG4gICAgICAjIENyZWRlbnRpYWxzIGFyZSBleHBhbmRlZCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBhdCBydW50aW1lXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IFxcJHtBV1NfU0VDUkVUX0FDQ0VTU19LRVl9XG4gICAgICBhY2Nlc3NLZXlJZDogXFwke0FXU19BQ0NFU1NfS0VZX0lEfVxuICAgICAgczNGb3JjZVBhdGhTdHlsZTogZmFsc2VcbiAgICAgIGluc2VjdXJlOiBmYWxzZVxuXG4gIGxpbWl0c19jb25maWc6XG4gICAgYWxsb3dfc3RydWN0dXJlZF9tZXRhZGF0YTogdHJ1ZVxuICAgIG1heF9zdHJlYW1zX3Blcl91c2VyOiAxMDAwMDBcbiAgICBpbmdlc3Rpb25fcmF0ZV9tYjogMTBcbiAgICBpbmdlc3Rpb25fYnVyc3Rfc2l6ZV9tYjogMjBcbiAgICByZXRlbnRpb25fcGVyaW9kOiAke2NvbmZpZy5yZXRlbnRpb24ubG9raX1cbiAgICByZWplY3Rfb2xkX3NhbXBsZXM6IHRydWVcbiAgICByZWplY3Rfb2xkX3NhbXBsZXNfbWF4X2FnZTogMTY4aFxuXG4gIGNvbXBhY3RvcjpcbiAgICByZXRlbnRpb25fZW5hYmxlZDogdHJ1ZVxuICAgIGRlbGV0ZV9yZXF1ZXN0X3N0b3JlOiBzM1xuXG5iYWNrZW5kOlxuICByZXBsaWNhczogJHtjb25maWcucmVwbGljYXMubG9raUJhY2tlbmR9XG4gIGV4dHJhQXJnczpcbiAgICAtIFwiLWNvbmZpZy5leHBhbmQtZW52PXRydWVcIlxuICBleHRyYUVudkZyb206XG4gICAgLSBzZWNyZXRSZWY6XG4gICAgICAgIG5hbWU6ICR7czNDcmVkZW50aWFsc1NlY3JldE5hbWV9XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5sb2tpQmFja2VuZC5saW1pdHMuY3B1fVxuICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMubG9raUJhY2tlbmQubGltaXRzLm1lbW9yeX1cbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmxva2lCYWNrZW5kLnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmxva2lCYWNrZW5kLnJlcXVlc3RzLm1lbW9yeX1cbiAgcGVyc2lzdGVuY2U6XG4gICAgZW5hYmxlZDogdHJ1ZVxuICAgIHN0b3JhZ2VDbGFzczogbG9uZ2hvcm5cbiAgICBzaXplOiAke2NvbmZpZy5zdG9yYWdlLmxva2lCYWNrZW5kfVxuICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG5yZWFkOlxuICByZXBsaWNhczogJHtjb25maWcucmVwbGljYXMubG9raVJlYWR9XG4gIGV4dHJhQXJnczpcbiAgICAtIFwiLWNvbmZpZy5leHBhbmQtZW52PXRydWVcIlxuICBleHRyYUVudkZyb206XG4gICAgLSBzZWNyZXRSZWY6XG4gICAgICAgIG5hbWU6ICR7czNDcmVkZW50aWFsc1NlY3JldE5hbWV9XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5sb2tpUmVhZC5saW1pdHMuY3B1fVxuICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMubG9raVJlYWQubGltaXRzLm1lbW9yeX1cbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmxva2lSZWFkLnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmxva2lSZWFkLnJlcXVlc3RzLm1lbW9yeX1cbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxud3JpdGU6XG4gIHJlcGxpY2FzOiAke2NvbmZpZy5yZXBsaWNhcy5sb2tpV3JpdGV9XG4gIGV4dHJhQXJnczpcbiAgICAtIFwiLWNvbmZpZy5leHBhbmQtZW52PXRydWVcIlxuICBleHRyYUVudkZyb206XG4gICAgLSBzZWNyZXRSZWY6XG4gICAgICAgIG5hbWU6ICR7czNDcmVkZW50aWFsc1NlY3JldE5hbWV9XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5sb2tpV3JpdGUubGltaXRzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmxva2lXcml0ZS5saW1pdHMubWVtb3J5fVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMubG9raVdyaXRlLnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmxva2lXcml0ZS5yZXF1ZXN0cy5tZW1vcnl9XG4gIHBlcnNpc3RlbmNlOlxuICAgIGVuYWJsZWQ6IHRydWVcbiAgICBzdG9yYWdlQ2xhc3M6IGxvbmdob3JuXG4gICAgc2l6ZTogJHtjb25maWcuc3RvcmFnZS5sb2tpV3JpdGV9XG4gIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5cbmdhdGV3YXk6XG4gIGVuYWJsZWQ6IHRydWVcbiAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLmdyYWZhbmF9XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5sb2tpR2F0ZXdheS5saW1pdHMuY3B1fVxuICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMubG9raUdhdGV3YXkubGltaXRzLm1lbW9yeX1cbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmxva2lHYXRld2F5LnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmxva2lHYXRld2F5LnJlcXVlc3RzLm1lbW9yeX1cbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxubWluaW86XG4gIGVuYWJsZWQ6IGZhbHNlXG5cbiMgRGlzYWJsZSBtZW1jYWNoZWQgY2FjaGVzIHRvIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50XG4jIE1lbWNhY2hlZCBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIGhpZ2ggcXVlcnkgbG9hZHMsIG5vdCByZXF1aXJlZCBmb3Igc21hbGwgY2x1c3RlcnNcbmNodW5rc0NhY2hlOlxuICBlbmFibGVkOiBmYWxzZVxucmVzdWx0c0NhY2hlOlxuICBlbmFibGVkOiBmYWxzZVxuYDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
export interface NamespaceProps {
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Creates the monitoring namespace with proper labels and ArgoCD sync-wave annotation.
|
|
7
|
+
*
|
|
8
|
+
* Sync Wave: 0 (foundation - must exist before any other resources)
|
|
9
|
+
*/
|
|
10
|
+
export declare class NamespaceConstruct extends Construct {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
constructor(scope: Construct, id: string, props: NamespaceProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NamespaceConstruct = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const k8s_1 = require("../imports/k8s");
|
|
6
|
+
/**
|
|
7
|
+
* Creates the monitoring namespace with proper labels and ArgoCD sync-wave annotation.
|
|
8
|
+
*
|
|
9
|
+
* Sync Wave: 0 (foundation - must exist before any other resources)
|
|
10
|
+
*/
|
|
11
|
+
class NamespaceConstruct extends constructs_1.Construct {
|
|
12
|
+
constructor(scope, id, props) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
this.name = props.name;
|
|
15
|
+
// Create namespace
|
|
16
|
+
// Wave 0: Foundation - must exist before any other resources
|
|
17
|
+
new k8s_1.KubeNamespace(this, 'namespace', {
|
|
18
|
+
metadata: {
|
|
19
|
+
name: props.name,
|
|
20
|
+
annotations: {
|
|
21
|
+
'argocd.argoproj.io/sync-wave': '0',
|
|
22
|
+
},
|
|
23
|
+
labels: {
|
|
24
|
+
'name': props.name,
|
|
25
|
+
'app.kubernetes.io/name': 'monitoring',
|
|
26
|
+
'app.kubernetes.io/component': 'observability',
|
|
27
|
+
'app.kubernetes.io/managed-by': 'cdk8s',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.NamespaceConstruct = NamespaceConstruct;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvbmFtZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx3Q0FBK0M7QUFNL0M7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7SUFHL0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUV2QixtQkFBbUI7UUFDbkIsNkRBQTZEO1FBQzdELElBQUksbUJBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ25DLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRTtvQkFDWCw4QkFBOEIsRUFBRSxHQUFHO2lCQUNwQztnQkFDRCxNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNsQix3QkFBd0IsRUFBRSxZQUFZO29CQUN0Qyw2QkFBNkIsRUFBRSxlQUFlO29CQUM5Qyw4QkFBOEIsRUFBRSxPQUFPO2lCQUN4QzthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekJELGdEQXlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgS3ViZU5hbWVzcGFjZSB9IGZyb20gJy4uL2ltcG9ydHMvazhzJztcblxuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VQcm9wcyB7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBtb25pdG9yaW5nIG5hbWVzcGFjZSB3aXRoIHByb3BlciBsYWJlbHMgYW5kIEFyZ29DRCBzeW5jLXdhdmUgYW5ub3RhdGlvbi5cbiAqXG4gKiBTeW5jIFdhdmU6IDAgKGZvdW5kYXRpb24gLSBtdXN0IGV4aXN0IGJlZm9yZSBhbnkgb3RoZXIgcmVzb3VyY2VzKVxuICovXG5leHBvcnQgY2xhc3MgTmFtZXNwYWNlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmFtZXNwYWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcblxuICAgIC8vIENyZWF0ZSBuYW1lc3BhY2VcbiAgICAvLyBXYXZlIDA6IEZvdW5kYXRpb24gLSBtdXN0IGV4aXN0IGJlZm9yZSBhbnkgb3RoZXIgcmVzb3VyY2VzXG4gICAgbmV3IEt1YmVOYW1lc3BhY2UodGhpcywgJ25hbWVzcGFjZScsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgJ2FyZ29jZC5hcmdvcHJvai5pby9zeW5jLXdhdmUnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICduYW1lJzogcHJvcHMubmFtZSxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdtb25pdG9yaW5nJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50JzogJ29ic2VydmFiaWxpdHknLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5JzogJ2NkazhzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a high-priority PriorityClass for monitoring components.
|
|
4
|
+
*
|
|
5
|
+
* PriorityClass ensures monitoring pods are scheduled with higher priority
|
|
6
|
+
* than regular workloads, preventing eviction during resource pressure.
|
|
7
|
+
*
|
|
8
|
+
* Sync Wave: 0 (foundation - must exist before pods reference it)
|
|
9
|
+
*/
|
|
10
|
+
export declare class PriorityClassConstruct extends Construct {
|
|
11
|
+
constructor(scope: Construct, id: string);
|
|
12
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PriorityClassConstruct = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const k8s_1 = require("../imports/k8s");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a high-priority PriorityClass for monitoring components.
|
|
8
|
+
*
|
|
9
|
+
* PriorityClass ensures monitoring pods are scheduled with higher priority
|
|
10
|
+
* than regular workloads, preventing eviction during resource pressure.
|
|
11
|
+
*
|
|
12
|
+
* Sync Wave: 0 (foundation - must exist before pods reference it)
|
|
13
|
+
*/
|
|
14
|
+
class PriorityClassConstruct extends constructs_1.Construct {
|
|
15
|
+
constructor(scope, id) {
|
|
16
|
+
super(scope, id);
|
|
17
|
+
// Create PriorityClass
|
|
18
|
+
// Wave 0: Foundation - must exist before pods can reference it
|
|
19
|
+
new k8s_1.KubePriorityClass(this, 'high-priority', {
|
|
20
|
+
metadata: {
|
|
21
|
+
name: 'high-priority',
|
|
22
|
+
labels: {
|
|
23
|
+
'app.kubernetes.io/name': 'high-priority',
|
|
24
|
+
'app.kubernetes.io/component': 'scheduling',
|
|
25
|
+
'app.kubernetes.io/managed-by': 'cdk8s',
|
|
26
|
+
},
|
|
27
|
+
annotations: {
|
|
28
|
+
'argocd.argoproj.io/sync-wave': '0',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
value: 10000,
|
|
32
|
+
globalDefault: false,
|
|
33
|
+
description: 'Use this class for high-priority pods only.',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.PriorityClassConstruct = PriorityClassConstruct;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpb3JpdHktY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9wcmlvcml0eS1jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsd0NBQW1EO0FBRW5EOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLHNCQUF1QixTQUFRLHNCQUFTO0lBQ25ELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsdUJBQXVCO1FBQ3ZCLCtEQUErRDtRQUMvRCxJQUFJLHVCQUFpQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDM0MsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxlQUFlO2dCQUNyQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsZUFBZTtvQkFDekMsNkJBQTZCLEVBQUUsWUFBWTtvQkFDM0MsOEJBQThCLEVBQUUsT0FBTztpQkFDeEM7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLDhCQUE4QixFQUFFLEdBQUc7aUJBQ3BDO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsS0FBSztZQUNaLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFdBQVcsRUFBRSw2Q0FBNkM7U0FDM0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdkJELHdEQXVCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgS3ViZVByaW9yaXR5Q2xhc3MgfSBmcm9tICcuLi9pbXBvcnRzL2s4cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhpZ2gtcHJpb3JpdHkgUHJpb3JpdHlDbGFzcyBmb3IgbW9uaXRvcmluZyBjb21wb25lbnRzLlxuICpcbiAqIFByaW9yaXR5Q2xhc3MgZW5zdXJlcyBtb25pdG9yaW5nIHBvZHMgYXJlIHNjaGVkdWxlZCB3aXRoIGhpZ2hlciBwcmlvcml0eVxuICogdGhhbiByZWd1bGFyIHdvcmtsb2FkcywgcHJldmVudGluZyBldmljdGlvbiBkdXJpbmcgcmVzb3VyY2UgcHJlc3N1cmUuXG4gKlxuICogU3luYyBXYXZlOiAwIChmb3VuZGF0aW9uIC0gbXVzdCBleGlzdCBiZWZvcmUgcG9kcyByZWZlcmVuY2UgaXQpXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmlvcml0eUNsYXNzQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBDcmVhdGUgUHJpb3JpdHlDbGFzc1xuICAgIC8vIFdhdmUgMDogRm91bmRhdGlvbiAtIG11c3QgZXhpc3QgYmVmb3JlIHBvZHMgY2FuIHJlZmVyZW5jZSBpdFxuICAgIG5ldyBLdWJlUHJpb3JpdHlDbGFzcyh0aGlzLCAnaGlnaC1wcmlvcml0eScsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6ICdoaWdoLXByaW9yaXR5JyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL25hbWUnOiAnaGlnaC1wcmlvcml0eScsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCc6ICdzY2hlZHVsaW5nJyxcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieSc6ICdjZGs4cycsXG4gICAgICAgIH0sXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgJ2FyZ29jZC5hcmdvcHJvai5pby9zeW5jLXdhdmUnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmFsdWU6IDEwMDAwLFxuICAgICAgZ2xvYmFsRGVmYXVsdDogZmFsc2UsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VzZSB0aGlzIGNsYXNzIGZvciBoaWdoLXByaW9yaXR5IHBvZHMgb25seS4nLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { MonitoringConfig } from '../types';
|
|
3
|
+
export interface PrometheusStackProps {
|
|
4
|
+
namespace: string;
|
|
5
|
+
config: MonitoringConfig;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Creates kube-prometheus-stack HelmChart with Prometheus, Grafana, and Alertmanager.
|
|
9
|
+
*
|
|
10
|
+
* This is the core monitoring stack that includes:
|
|
11
|
+
* - Prometheus (metrics collection, 2 replicas, 3d retention)
|
|
12
|
+
* - Grafana (visualization, ingress with Let's Encrypt)
|
|
13
|
+
* - Alertmanager (alert routing, SMTP notifications)
|
|
14
|
+
* - Prometheus Operator (manages Prometheus CRDs)
|
|
15
|
+
* - Node Exporter (system metrics DaemonSet)
|
|
16
|
+
* - kube-state-metrics (Kubernetes resource metrics)
|
|
17
|
+
*
|
|
18
|
+
* Prerequisites:
|
|
19
|
+
* - Namespace exists
|
|
20
|
+
* - PriorityClass 'high-priority' exists
|
|
21
|
+
* - Longhorn storage class available
|
|
22
|
+
* - cert-manager ClusterIssuer configured
|
|
23
|
+
* - Thanos S3 secret exists (thanos-objstore-config)
|
|
24
|
+
*
|
|
25
|
+
* Sync Wave: 2 (core services - after S3 buckets and secrets)
|
|
26
|
+
*/
|
|
27
|
+
export declare class PrometheusStackConstruct extends Construct {
|
|
28
|
+
constructor(scope: Construct, id: string, props: PrometheusStackProps);
|
|
29
|
+
private generateHelmValues;
|
|
30
|
+
}
|