Understanding Deployments in Kubernetes: A Behind-the-Scenes Look

0
1541
Kubernetes Deployment

Kubernetes Deployments are a fundamental aspect of working with Kubernetes. While the process may seem straightforward, understanding the intricate steps behind the scenes is crucial for troubleshooting and gaining a deeper understanding.

Deployment Request Workflow:

There are three primary ways to initiate deployments:

  • YAML/JSON file: Applying a file containing the deployment manifest using kubectl apply.
  • kubectl run command: This simplifies deployment by providing image name and basic configuration in the command line.
  • kubectl create command: Offers greater control by specifying detailed deployment parameters.

Internal Workflow:

Kubernetes Deployment Workflow:

Client-Side:

  • Validation: Ensures resource type, group, and client credentials are valid.
  • Context & Authentication: Extracts current context, cluster, and authentication information from kubeconfig.
  • HTTP Request: Forms and sends the deployment request to the API server.

Server-Side:

API Server:

  • Authentication: Verifies client credentials using certificates, tokens, or basic authentication.
  • Authorization: Evaluates user privileges using RBAC, ABAC, or webhooks.
  • Admission Control: Validates the request against defined criteria, potentially modifying it before storing it in etcd.
  • Persistence: Stores the deployment request in etcd.

Deployment Controller:

  • ReplicaSet Creation: Watches for new deployments in etcd and creates corresponding ReplicaSet objects.

ReplicaSet Controller:

  • Pod Creation: Creates Pod objects based on the ReplicaSet spec.

Pod Controller:

  • Pod Scheduling: Waits for the scheduler to update node information and create a binding object.

Kubelet:

  • Pod Management: Manages pods on its node by coordinating with the container runtime to:
    • Create/update container based on pod specs.
    • Mount volumes.
    • Pull container images.
    • Perform health checks.

Commands for Deployment Creation:

  • kubectl apply -f /path/to/file.json|yaml: Applies a deployment manifest file.
  • kubectl create deploy <deployment-name> --image=<image-name>: Creates a deployment with specified image.
  • kubectl run <deployment-name> --image=<image-name>: Simplifies deployment creation with a single command.

Example Deployment File

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx

Benefits of Understanding the Deployment Flow:

  • Troubleshooting: Provides insight into potential bottlenecks and error points.
  • Improved Configuration: Enables tailored configuration for specific deployment needs.
  • Enhanced Automation: Facilitates automation of deployment workflows.
Google search engine