#!/bin/bash
echo "Step 1: Creating VPA CRDs with required annotations..."
cat <<EOF | kubectl apply -f -
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: verticalpodautoscalers.autoscaling.k8s.io
annotations:
api-approved.kubernetes.io: "https://github.com/kubernetes/enhancements/pull/1867"
spec:
group: autoscaling.k8s.io
names:
kind: VerticalPodAutoscaler
plural: verticalpodautoscalers
singular: verticalpodautoscaler
shortNames:
- vpa
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: verticalpodautoscalercheckpoints.autoscaling.k8s.io
annotations:
api-approved.kubernetes.io: "https://github.com/kubernetes/enhancements/pull/1867"
spec:
group: autoscaling.k8s.io
names:
kind: VerticalPodAutoscalerCheckpoint
plural: verticalpodautoscalercheckpoints
singular: verticalpodautoscalercheckpoint
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
EOF
echo "Step 2: Applying RBAC..."
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/vertical-pod-autoscaler/deploy/vpa-rbac.yaml
echo "🚀 Step 3: Deploying VPA components..."
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: vpa-updater
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: vpa-updater
template:
metadata:
labels:
app: vpa-updater
spec:
serviceAccountName: vpa-updater
containers:
- name: vpa-updater
image: k8s.gcr.io/autoscaling/vpa-updater:0.13.0
resources:
limits:
cpu: 100m
memory: 300Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vpa-recommender
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: vpa-recommender
template:
metadata:
labels:
app: vpa-recommender
spec:
serviceAccountName: vpa-recommender
containers:
- name: vpa-recommender
image: k8s.gcr.io/autoscaling/vpa-recommender:0.13.0
resources:
limits:
cpu: 100m
memory: 300Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vpa-admission-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: vpa-admission-controller
template:
metadata:
labels:
app: vpa-admission-controller
spec:
serviceAccountName: vpa-admission-controller
containers:
- name: vpa-admission-controller
image: k8s.gcr.io/autoscaling/vpa-admission-controller:0.13.0
ports:
- containerPort: 8000
name: webhook
resources:
limits:
cpu: 100m
memory: 200Mi
---
apiVersion: v1
kind: Service
metadata:
name: vpa-webhook
namespace: kube-system
spec:
selector:
app: vpa-admission-controller
ports:
- port: 443
targetPort: webhook
EOF
echo "✅ All VPA components deployed."
echo "Final Check - VPA Pods:"
kubectl get pods -n kube-system | grep vpa
chmod +x install-vpa-complete.sh
Comments
Post a Comment