Assign Memory to Kubernetes Pods with Ansible
By Luca Berton · Published 2024-01-01 · Category: troubleshooting
Learn how to assign memory resources to Kubernetes or OpenShift containers and pods using Ansible. Follow our live Playbook and simple code examples.
How to Assign Memory Resources to Kubernetes K8s or OpenShift OCP Containers and Pods with Ansible? I’m going to show you a live Playbook and some simple Ansible code. I’m Luca Berton and welcome to today’s episode of Ansible Pilot.
Containers cannot use more Memory than the configured limit. Provided the system has Memory time free, a container is guaranteed to be allocated as much Memory as it requests. To specify a Memory request for a container, include the resources:requests field in the Container resource manifest. To specify a Memory limit, include resources:limits.
Ansible creates Kubernetes or OpenShift service • kubernetes.core.k8s • Manage Kubernetes (K8s) objects
Let's talk about the Ansible module k8s. The full name is kubernetes.core.k8s, which means that is part of the collection of modules of Ansible to interact with Kubernetes and Red Hat OpenShift clusters. It manages Kubernetes (K8s) objects.
Parameters • name _string_ /namespace _string_ - object name / namespace • api_version _string_ - "v1" • kind _string_ - object model • state _string_ - present/absent/patched • definition _string_ - YAML definition • src _path_ - path for YAML definition • template _raw_ - YAML template definition • validate _dictionary_ - validate resource definition
There is a long list of parameters of the k8s module. Let me summarize the most used. Most of the parameters are very generic and allow you to combine them for many use-cases. The name and namespace specify object name and/or the object namespace. They are useful to create, delete, or discover an object without providing a full resource definition. The api_version parameter specifies the Kubernetes API version, the default is "v1" for version 1. The kind parameter specifies an object model. The state like for other modules determines if an object should be created - present option, patched - patched option, or deleted - absent option. The definition parameter allows you to provide a valid YAML definition (string, list, or dict) for an object when creating or updating. If you prefer to specify a file for the YAML definition, the src parameter provides a path to a file containing a valid YAML definition of an object or objects to be created or updated. You could also specify a YAML definition template with the template parameter. You might find useful also the validate parameter in order to define how to validate the resource definition against the Kubernetes schema. Please note that requires the kubernetes-validate python module.
Links • kubernetes.core.k8s • Assign Memory Resources to Containers and Pods • polinux/stress image • polinux/stress github
Playbook
How to Assign Memory Resources to Kubernetes K8s or OpenShift OCP Containers and Pods with Ansible Playbook. I’m going to create a Pod that has one Container. The Container has set a memory request of 100 MiB and a memory limit of 200 MiB. During the execution, the Container attempted to allocate 150 MiB of memory.
code • ansible_playbook.yml
execution
idempotency
before execution • Kubernetes (k8s) • OpenShift (OCP)
!ansible module k8s before execution
after execution • Kubernetes (k8s) • OpenShift (OCP) • Kubernets memory-Playbook Pod Log
!ansible module k8s after execution
too much memory OOMKilled
In the following example, the Pod tries to allocate more memory than allowed (500MB vs 200MiB limit). • ansible_playbook.yml • Kubernetes (k8s) • OpenShift (OCP)
Conclusion
Now you know how to Assign CPU Resources to Kubernetes K8s or OpenShift OCP Containers and Pods with Ansible.
Related Articles • Ansible Template Guide • Ansible Docker Guide • Ansible Inventory Guide • Ansible Loops Guide
Category: troubleshooting
Watch the video: Assign Memory to Kubernetes Pods with Ansible — Video Tutorial