Skip to content

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.

HINT

Visit an example in the Kubernetes docs

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



END