behavior:
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
scaleDown:
stabilizationWindowSeconds: 300 startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 40
periodSeconds: 2 apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: kafka-scaledobject
namespace: default
spec:
scaleTargetRef:
kind: Deployment
name: kafka-consumer-app
minReplicaCount: 1
maxReplicaCount: 10
pollingInterval: 30
triggers:
- type: kafka
metadata:
bootstrapServers: kafka:9092
consumerGroup: my-example-group
topic: example-topic
lagThreshold: "50"
offsetResetPolicy: latest apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
spec:
minAvailable: 3
selector:
matchLabels:
app: my-app apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: overprovisioning
value: -1
globalDefault: false
preemptionPolicy: Never
description: "Lowest priority for overprovisioning"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: overprovisioner
spec:
replicas: 5 # Выбрать в зависимости от размера кластера/кол-ва нод
selector:
matchLabels:
app: overprovisioner
template:
metadata:
labels:
app: overprovisioner
spec:
priorityClassName: overprovisioning
containers:
- name: pause
image: gcr.io/google-containers/pause
resources:
requests:
cpu: "1"
memory: "2Gi" apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
name: default
spec:
amiFamily: AL2 # Amazon Linux 2
role: "KarpenterNodeRole"
subnetSelectorTerms:
- tags:
karpenter.sh/discovery: "example"
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: "example"
amiSelectorTerms:
- id: "example-ami-id-1"
---
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: kubernetes.io/os
operator: In
values: ["linux"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: "karpenter.k8s.aws/instance-family"
operator: In
values: [ "m5","m5d","c5","c5d","c4","r4" ]
minValues: 1
- key: "karpenter.k8s.aws/instance-cpu"
operator: In
values: [ "16", "32" ]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
expireAfter: 72h # 30 * 24h = 720h
limits:
cpu: 1000
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 30m
budgets:
- nodes: "20%"
reasons:
- "Empty"
- "Drifted"
- "Underutilized" topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 30m preStop:
exec:
command: ["/bin/sh", "-c", "touch /tmp/shutdown; sleep 15"]