Showing posts with label replicaset. Show all posts
Showing posts with label replicaset. Show all posts

Sunday, March 13, 2022

Kubernetes Deployment



Kubernetes - Deployment

A Deployment provides declarative updates for Pods ReplicaSets.

You describe a desired state in a Deployment, and the Deployment Controller changes the actual/current state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments.

The following are typical use cases for Deployments:
  • Create a Deployment to rollout a ReplicaSet. The ReplicaSet creates Pods in the background. Check the status of the rollout to see if it succeeds or not.

  • Declare the new state of the Pods by updating the PodTemplateSpec of the Deployment. A new ReplicaSet is created and the Deployment manages moving the Pods from the old ReplicaSet to the new one at a controlled rate. Each new ReplicaSet updates the revision of the Deployment.

  • Rollback to an earlier Deployment revision if the current state of the Deployment is not stable. Each rollback updates the revision of the Deployment.

  • Scale up the Deployment to facilitate more load.

  • Pause the Deployment to apply multiple fixes to its PodTemplateSpec and then resume it to start a new rollout.

  • Use the status of the Deployment as an indicator that a rollout has stuck.

  • Clean up older ReplicaSets that you don't need anymore.

Example:

# 1. Deployment YAML file
(it's best practice to have the .yaml file and the metadata to have same name, the example below is poor practice..boo!)

# nginx-dep.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx-app
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx-app
        server: web
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.7.9
        ports:
        - containerPort: 80
  selector:
    matchLabels:
      app: nginx-app
    matchExpressions:
    -  {key: server, operation: In, values: [web]}


*******************************************************************

# 2. Create and Display Deployment

kubectl create -f nginx-dep.yaml
kubectl get deploy -l app=nginx-app
kubectl get rs -l app=nginx-app
kubectl get po -l app=nginx-app
kubectl describe deploy nginx-dep
kubectl get all


*******************************************************************

# 3. Testing: Rollback update (1.91 is not a valid image)

kubectl set image deploy nginx-deploy nginx-container=nginx:1.91 --record
kubectl rollout status deployment/nginx-deploy        #it will not update
kubectl rollout history deployment/nginx-deploy
kubectl rollout undo deployment/nginx-deploy
kubectl rollout status deployment/nginx-deploy
kubectl describe deploy nginx-dep | grep -i image


*******************************************************************

# 4. Testing: Update Version of "nginx:1.7.9" to "nginx:1.9.1" 

kubectl set image deploy nginx-deploy nginx-container=nginx:1.9.1
kubectl edit deploy nginx-deploy
kubectl rollout status deployment/nginx-dep
kubectl get deploy
kubectl describe deploy nginx-dep | grep -i image


*******************************************************************

# 5. Testing: Scale UP (the replicaset not deploymentset)

kubectl scale deployment nginx-dep --replicas=5
kubectl get deploy
kubectl get po -o wide


*******************************************************************

# 6. Testing: Scale DOWN (the replicaset not deploymentset)

kubectl scale deployment nginx-dep --replicas=3
kubectl get deploy
kubectl get po -o wide


******************************************************************

# 7. Cleanup

kubectl delete -f nginx-dep.yaml
kubectl delete rs <replicaset name>
kubectl get deploy
kubectl get rs
kubectl get po


Fluentd

Open-source log data collector > why logs? - for compliance (auditing, company, business) - for security (transparency, monitoring, admin...