Limits
Let’s add some resource limits to our deployed guestbook application.
We will use our previous deployment for this task. If you have missed the last part, you can apply the solution from Deployment and Resourcelimits/*.yaml.
Everyone
Copy Deployment and Resourcelimits/2.1-example-app-deploy.yaml to your working directory (e.g. work/3/). Rename the file if wanted (e.g.3.yaml). Work in this file during this exercise and apply it several times.
What you will learn:
- Add cpu limits to resources
- Add cpu requests to resources
- Add memory limits to resources
- Add memory requests to resources
1. CPU Requests
Ensure that our application has at least 10 percent CPU time of one CPU.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 100m
ports:
- containerPort: 8080
Optional: Experiment 1
What happens if we try to allocate 10 CPUs? Set the request to 10 CPUs! Apply the previous limit after your experiment.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 10
ports:
- containerPort: 8080
2. CPU Limits
Limit the application to use 50 percent of 1 CPU.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 100m
limits:
cpu: 500m
ports:
- containerPort: 8080
3. Memory Limits
Set the max memory consumption of our application to 200 MiB.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 100m
limits:
cpu: 500m
memory: 200Mi
ports:
- containerPort: 8080
Optional: Experiment 2
Set the memory limit to 50 MiB. What happens? Set it back to 200 MiB after the experiment!
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 100m
limits:
cpu: 500m
memory: 50Mi
ports:
- containerPort: 8080
4. Memory Requests
Request 100 MiB for our guestbook.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-app
name: example-app
spec:
replicas: 1
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- image: ghcr.io/thinkportrepo/k8s-example-app:latest
name: k8s-example-app
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 200Mi
ports:
- containerPort: 8080