DEV Community

Cover image for Bite-Sized Kubernetes Part 4 - Deployments
Hrittik Bhattacharjee
Hrittik Bhattacharjee

Posted on • Edited on

Bite-Sized Kubernetes Part 4 - Deployments

Blimey!☸️

In Part 3 we looked at ReplicaSets in kubernetes.
Moving right along to Deployments!🌊

OBJECT DESCRIPTION
Pods The lowest level, single instance of an application
ReplicaSets The next level, manages a set of pods
👉 Deployments The next level, manages a set of ReplicaSets
Services The next level, manages a set of deployments
Ingress The next level, manages a set of services
Volumes The next level, manages a set of ingress
Namespaces The next level, manages a set of volumes
Cluster The highest level, manages a set of namespaces

Deployments:

  • K8s deployments are a higher-level abstraction that are built on top of ReplicaSets.
  • K8s deployments help in rolling updates and rollbacks.
  • K8s deployments are one level above ReplicaSets in the k8s hierarchy.
  • Creating deployments:
  • The .yml definition of a deployment is exactly similar to that of a ReplicaSet except for the kind property.

    • Example deployment-definition.yml:

      apiVersion: apps/v1
      kind: Deployment
      
      # all else is same as ReplicaSet
      
    • Once the .yml file is created, it can be used to create a deployment:

      $ kubectl create -f <file name>.yml
      
    • See list of deployments:

      $ kubectl get deployment
      
    • The deployment will automatically create a ReplicaSet and the ReplicaSet will create the pods.

    • See list of ReplicaSets:

      $ kubectl get replicaset
      
    • See list of pods:

      $ kubectl get pods  
      
    • See detailed info about a deployment:

      $ kubectl describe deployment <deployment name>
      
    • Scale up or down:

      • We can scale up the number of pods by updating the replicas property in the .yml file and then run the kubectl replace command:

        $ kubectl replace -f <file name>.yml
        
      • Or we can use the kubectl scale command:

        $ kubectl scale deployment <deployment name> --replicas=<number of replicas>
        
  • To see all k8s objects created i.e. pods, ReplicaSets, deployments, etc.:

      $ kubectl get all
    
  • Rollouts (updates) and rollbacks in deployments:

    • To see rollout status:

      $ kubectl rollout status deployment <deployment name>
      
    • To see rollout history:

      $ kubectl rollout history deployment <deployment name>
      
    • Deployment strategies:

    • Recreate: the default strategy

      • this will delete all the pods and then create new pods
      • this is not recommended for production
    • RollingUpdate: the recommended strategy

      • this will update the pods one by one
      • this is the recommended strategy and the default strategy for kubectl apply command
    • To update a deployment:

      $ kubectl edit deployment <deployment name>
      
    • After updating the .yml file e.g. updating the app version (image tag), run the kubectl apply command to trigger a new rollout:

      $ kubectl apply -f <file name>.yml
      
    • The k8s deployment will create a new ReplicaSet and the new ReplicaSet will create new pods following wither of the deployment strategies.

    • To rollback a deployment:

      $ kubectl rollout undo deployment <deployment name>
      

You're unstoppable!
Let's look at "Services" next. See ya in Part 5!

Flank Speed!!!🚢

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay