Skip to main content

Writing YAML files for Kubernetes

Writing YAML files for Kubernetes involves understanding the basic structure and key components used to define cluster objects. Here's a simple logical guide to help you write k3s YAML files manually:

Basic Structure of a Kubernetes YAML File

API Version (apiVersion):

Every YAML file starts with an API version. It's a string that indicates the version of the Kubernetes API you're using for the object.

Common examples include:

  • apiVersion: v1 for core objects like Services and Pods.
  • apiVersion: apps/v1 for objects like Deployments.
  • Other versions might be networking.k8s.io/v1 for Ingress.

Kind (kind):

  • This represents the type of Kubernetes resource you're defining.

Some common kinds are:

  • Pod
  • Service
  • Deployment
  • Ingress

Metadata (metadata):

This section includes basic metadata about the object, such as:

  • name: A unique identifier for the object within its namespace.
  • namespace: (Optional) Defines the namespace where the object should be created or managed.
  • labels: (Optional) Key-value pairs to organize and select groups of objects.

Spec (spec):

This section contains the specifications of the object.

It varies significantly between different kinds, but here are some general guidelines:

For Deployments:

  • Define replicas to set the desired number of pod copies.
  • Use selector to match Pods with labels.
  • Define a template for the Pod specification.

For Services:

  • Define selector to route traffic to the right Pods.
  • Set ports to map incoming traffic to the target Pods.

For Ingress:

  • Define rules for routing external HTTP/S traffic to internal services.

Logical Steps to Write a k3s YAML File

Determine the Object Type:

Decide whether you need a Deployment, Service, Pod, etc. This dictates the fields you'll need.

Set the API Version and Kind:

Reference Kubernetes documentation or k3s-specific resources to know which API version to use and set the appropriate kind.

Add Metadata:

Assign a name to your object and optionally a namespace. Proper naming conventions help manage and track resources.

Define the Spec:

Tailor this section based on the object type. Carefully specify details like the number of replicas for Deployments, port mappings for Services, or routing rules for Ingress.