Skip to content

Commit 9331c49

Browse files
Vinod KumarVinod Kumar
authored andcommitted
added kyverno examples
1 parent 11a70f6 commit 9331c49

11 files changed

+259
-0
lines changed

iac/demo/keda/001-create-eks.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: eksctl.io/v1alpha5
2+
kind: ClusterConfig
3+
metadata:
4+
name: eks-keda-demo
5+
region: us-east-1
6+
version: '1.29'
7+
managedNodeGroups:
8+
- name: ng
9+
instanceType: m4.xlarge
10+
minSize: 1
11+
maxSize: 2

iac/demo/keda/002-my-nginx-deploy.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app: my-nginx
6+
name: my-nginx
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app: my-nginx
12+
strategy: {}
13+
template:
14+
metadata:
15+
labels:
16+
app: my-nginx
17+
spec:
18+
containers:
19+
- image: nginx
20+
name: nginx
21+
resources: {}
22+
status: {}

iac/demo/keda/003-sqs-scaler.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# apiVersion: v1
2+
# kind: Secret
3+
# metadata:
4+
# name: test-secrets
5+
# data:
6+
# AWS_ACCESS_KEY_ID: <encoded-user-id> # Required.
7+
# AWS_SECRET_ACCESS_KEY: <encoded-key> # Required.
8+
# AWS_SESSION_TOKEN: <encoded-session-token> # Required when using temporary credentials.
9+
# ---
10+
# apiVersion: keda.sh/v1alpha1
11+
# kind: TriggerAuthentication
12+
# metadata:
13+
# name: keda-trigger-auth-aws-credentials
14+
# namespace: keda-test
15+
# spec:
16+
# secretTargetRef:
17+
# - parameter: awsAccessKeyID # Required.
18+
# name: test-secrets # Required.
19+
# key: AWS_ACCESS_KEY_ID # Required.
20+
# - parameter: awsSecretAccessKey # Required.
21+
# name: test-secrets # Required.
22+
# key: AWS_SECRET_ACCESS_KEY # Required.
23+
# - parameter: awsSessionToken # Required when using temporary credentials.
24+
# name: test-secrets # Required when using temporary credentials.
25+
# key: AWS_SESSION_TOKEN # Required when using temporary credentials.
26+
---
27+
apiVersion: keda.sh/v1alpha1
28+
kind: ScaledObject
29+
metadata:
30+
name: aws-sqs-queue-scaledobject
31+
namespace: default
32+
spec:
33+
scaleTargetRef:
34+
name: my-nginx
35+
pollingInterval: 5 #Interval for polling
36+
cooldownPeriod: 10
37+
idleReplicaCount: 0 # When idle, scale-in to 0 pods
38+
minReplicaCount: 1
39+
maxReplicaCount: 3
40+
fallback: # Fallback strategy when metrics are unavailable for the apps
41+
failureThreshold: 5 #when metrics are unavailable, match the desired state of replicas -> 2
42+
replicas: 2 #Keep this desired state when metrics are unavailable
43+
triggers:
44+
- type: aws-sqs-queue
45+
authenticationRef:
46+
name: keda-trigger-auth-aws-credentials
47+
metadata:
48+
queueURL: https://sqs.us-east-2.amazonaws.com/711164302624/my-sqs-keda
49+
queueLength: "5" #batch size
50+
awsRegion: "us-east-2"
51+
#identityOwner: pod
52+
identityOwner: operator #when node role has required permission
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: enforce-app-deployment-label
5+
spec:
6+
validationFailureAction: Enforce
7+
rules:
8+
- name: check-for-label
9+
match:
10+
resources:
11+
kinds:
12+
- Deployment
13+
validate:
14+
message: "You must have the label, 'app' for all deployments."
15+
pattern:
16+
metadata:
17+
labels:
18+
app: "?*"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: development
5+
spec: {}
6+
status: {}

iac/demo/kyverno/3-kyverno-policy.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
apiVersion: kyverno.io/v1
2+
kind: Policy
3+
metadata:
4+
name: enforce-deployment-label-replica-count
5+
namespace: development
6+
spec:
7+
validationFailureAction: Enforce
8+
rules:
9+
- name: check-for-label
10+
match:
11+
resources:
12+
kinds:
13+
- Deployment
14+
validate:
15+
message: "You must have the label, team_name for all deployments."
16+
pattern:
17+
metadata:
18+
labels:
19+
team_name: "?*"
20+
21+
- name: create-max-two
22+
match:
23+
any:
24+
- resources:
25+
kinds:
26+
- Deployment
27+
validate:
28+
message: The replica count for this Deployment may not exceed 2.
29+
pattern:
30+
spec:
31+
replicas: <= 2
32+
33+
# This rule can be used to limit scale operations based upon Deployment labels assuming the given label
34+
# is also used as a selector.
35+
# - name: scale-max-3
36+
# match:
37+
# any:
38+
# - resources:
39+
# kinds:
40+
# - Deployment/scale
41+
# validate:
42+
# message: The replica count for this Deployment may not exceed 3.
43+
# pattern:
44+
# (status):
45+
# (selector): "*type=monitoring*"
46+
# spec:
47+
# replicas: <= 3
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app: my-nginx
6+
name: my-nginx
7+
namespace: development
8+
spec:
9+
replicas: 3
10+
selector:
11+
matchLabels:
12+
app: my-nginx
13+
strategy: {}
14+
template:
15+
metadata:
16+
labels:
17+
app: my-nginx
18+
spec:
19+
containers:
20+
- image: nginx
21+
name: nginx
22+
resources: {}
23+
status: {}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app: my-nginx
6+
team_name: team-A
7+
name: my-nginx
8+
namespace: development
9+
spec:
10+
replicas: 2
11+
selector:
12+
matchLabels:
13+
app: my-nginx
14+
strategy: {}
15+
template:
16+
metadata:
17+
labels:
18+
app: my-nginx
19+
spec:
20+
containers:
21+
- image: nginx
22+
name: nginx
23+
resources: {}
24+
status: {}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: cleanup-completed-jobs
5+
spec:
6+
rules:
7+
- name: cleanup-jobs
8+
match:
9+
resources:
10+
kinds:
11+
- Job
12+
preconditions:
13+
all:
14+
- key: "{{ request.operation }}"
15+
operator: In
16+
value: ["DELETE"]
17+
mutate:
18+
patchStrategicMerge:
19+
spec:
20+
ttlSecondsAfterFinished: 86400 # Clean up after 24 hours

iac/demo/kyverno/7-mutate-policy.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: add-app-label
5+
spec:
6+
rules:
7+
- name: add-app-label-to-pods-deployment
8+
match:
9+
resources:
10+
kinds:
11+
- Pod
12+
- Deployment
13+
mutate:
14+
patchStrategicMerge:
15+
metadata:
16+
labels:
17+
company: "mycompany" # Adds this label if not provided

iac/demo/kyverno/8-generate.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: generate-configmap
5+
spec:
6+
rules:
7+
- name: generate-default-configmap
8+
match:
9+
resources:
10+
kinds:
11+
- Namespace
12+
generate:
13+
kind: ConfigMap
14+
name: default-config
15+
namespace: "{{ request.object.metadata.name }}"
16+
synchronize: true
17+
data:
18+
data:
19+
configKey: "configValue"

0 commit comments

Comments
 (0)