Sunday, June 27, 2021

Kubernetes DaemonSet (ds)

 Overview of DaemonSets

Kubernetes DaemonSet is one of the controllers which are at the Kubernetes Master node.

A DaemonSet ensures that all or some nodes run a Pod

As nodes are added to the Kubernetes cluster, Pods have added accordingly for each node as per the DaemonSet defined.

As nodes are removed or drained from the Kubernetes cluster, they are GC. Deleting a DaemonSet will clean up those Pods it created on each node

The DaemonSet Controller creating pods on each nodes


Where we can use this DaemonSet?

When a Kubernetes cluster running many microservices with multi-nodes there will be a need for Monitoring the system resources with collecting metrics and Logging should be enabled for the application level or database level to collect respective access and server-specific logs.

Some example daemon pods can be:

  • Collectd, Node exporter -- Monitoring daemon on nodes for Prometheus
  • Fluentd, logstash – log collection daemon for ELK, EFK stacks
  • Ceph, glusterd – Storage daemon for Cloud storages 

Running your DaemonSet

First, check that how many nodes in the cluster and what are their status.

  kubectl get nodes

Creating DaemonSet


Defining the DaemonSet in YAML for fluentd Image.
 apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: fluentd-ds
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      tolerations: # Tolerations
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd-con
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2


 kubectl create -f fluentd-daemonset.yaml

List the pods with wide option
kubectl get po -o wide

Get the DaemonSet object

kubectl get daemonset -o wide
The output of the above command is:
ds



Observe that DaemonSet created pod ControlledBy line it will be under control of DaemonSet.
  kubectl describe ds
  



Describe the DaemonSet


Cleanup DaemonSet

   kubectl delete ds fluentd-ds
  

Confirm that DaemonSet is detleted by checking the list ds
 kubectl get ds

References:

Sunday, June 20, 2021

Helm chart installation and Deploy on Linux

What is a helm chart? 

It is a package manager for your Kubernetes cluster. It used to install, upgrade, rollback release, and also uninstall on the Kubernetes cluster. 

Helm Charts Kubernetes Deployment


What do these charts for? 

You have seen Kubernetes pods, ReplicaSet, Deployments, services, and other objects each one required a YAML file in defining in the declarative method. Charts will have all these yaml files for all objects together as a package. Charts will have : 
a. NAME 
b. DESCRIPTION 
c. VERSION 

 Templates will have placeholders for each Kubernetes kind object YAML file, that can be rendered using values.yaml file. Which will have parameters. It is greater flexibility and replaces and reuses the parameters required for your microservices project that need to deploy on the Kubernetes. You can use as many apps need to deploy you can have different values files helm install --values value-app1.yaml
Installation methods for Linux Operating System we have three options: Install using package manager snap Using script: get_helm.sh Binary download the tar file move to bin

Prerequisites 

* Kubernetes cluster up and running.
* Have good knowledge on Kubernetes deployment, replica set, and pods
* Basic understanding of YAML syntax

Installing Helm on Linux

To install Helm on Ubuntu using binary: 

1. Download the latest version of Helm binary using the following command:
wget https://get.helm.sh/helm-v3.6.1-linux-amd64.tar.gz
Download Helm Charts on ubuntu
helm Charts download on Linux box


check the latest version on the official website for the "helm charts"

2. Next, untar the Helm binary installer file using the tar command:
tar xvf helm-v3.6.1-linux-amd64.tar.gz
3. Move the linux-amd64/helm file to the /usr/local/bin directory:
sudo mv linux-amd64/helm /usr/local/bin
There will be no output if the command was executed correctly.
 
4. Confirmation of helm installation by checking the version 
helm version
The execution output as follows:
Helm Charts version
helm version check in Linux


Creating Helm Charts

To create "charts" using helm package manager as the following command:
helm create mytest
Creating Helm charts

Creates 'mytest' folder in the current directory, you see the directory structure as :
# tree  mytest/
mytest/
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
Helm will be a ready-made tool for huge application pods running environments. In the example charts it will be nginx image-based deployment. Most of the common strategies used for Kubernetes deployment and scaling in a declarative way is completely templatized which can be reusable by rending the charts with custom values. As more images used in the project then values.yaml file will grow. YAML files validation To validate the changes after updating any of the yaml file you need to check the YAML syntax using :
helm lint ./mytest 
The lint command execution output
Helm chart validation using lint
The helm lint example


Dry-run Validate 

Rendering Here we get all good then we can proceed to dry-run Which will do a rendering of all the values to the templates and shows the output you can verify.
helm install --dry-run --debug ./mytest/ --generate-name
Install the actual deployment Generally, we can run the following:to install
helm install web-test  ./mytest/
But if you want to change any specific change you can use the --set option to override the value at the time of installing it will be considered. Example if you see service.YAML file type will be rendered from values.yaml file as type: ClusterIP, that can be overridden when you use --set service.type=NodePort
helm install web-test  ./mytest/  --set service.type=NodePort
Same thing you can do by changing inside the values.YAML file as well.
Check the application url that is running with notes instruction tells the URL creation commands. 

Screen 1 Nginx app accessed
Verify the helm installed deployment successful using list command as:
helm list

How to uninstall the release package? 


Using the uninstall followed by the name of the application release will delete that.
helm uninstall web-test

Enable Auto-Completion for Helm CLI

To use the auto-completion on for helm commands you can do the following:
source <(helm completion bash)
test this functionality by typing the 'helm cr<tab key>' it should complete with 'helm create'.

Saturday, June 12, 2021

Kubernetes ReplicaSets - ReplicationController

We have seen the word 'replicas' in the Docker Swarm services definition time.

How to work with ReplicaSet?

  What does ReplicaSet do?

ReplicaSet will define the group of pods. You can tell how many replicas of pods for your application. The template section will define how many pods and their specification will be defined. Defining ReplicaSet allows you to deploy podand keep it alive as per configuration.


How to create ReplicaSet?

ReplicaSet relationship with Pod

        apiVersion: apps/v1
        kind: ReplicaSet
        metadata:
          name: my-tcat-rs
          labels:
            version: "3.0"
        spec:
          replicas: 2
          selector:
            matchLabels:
              project: MyWeb
              role: frontend
          template:
            metadata:
              labels:
                project: MyWeb
                role: frontend
                env: dev
        
            spec:
              containers:
              - name: mytomcat
                image: tomcat:latest
                resources:
                 requests:
                  cpu: 100m
                  memory: 256Mi
                ports:
                - containerPort: 8080       
	
Create the replicaset using the YAML manifestat file.
kubectl create -f replicasets.yml
  
2. Describe the ReplicaSet
In the spec, section is where the important things happen: we have defined a set of labels for the ReplicaSet, but we have also defined a pod template (in this case, with a single container) and specified that we want two pod instances of it (replicas: 2).
        kubectl -n vybhava describe rs
        # another option to see the replicaset
        kubectl -n vybhava describe replicaset my-tcat-rs
	
3. How to Scale the ReplicaSet?

a. Scale-up ReplicaSet

You can specify the increased number for replicas configuration
        kubectl -n vybhava scale --replicas=6 rs my-tcat-rs
        kubectl -n vybhava get all
	
b. Scale down ReplicaSet

You cna brought down the replicas to 0 as well.
        kubectl -n vybhava scale --replicas=0 rs my-tcat-rs
        kubectl -n vybhava get all
	
4. Print wide output of the ReplicaSet
The regular kubectl command with get sub-command using -o wide option will give more details this we can use with alias name rs as well.
kubectl get rs -o wide or
  kubectl get replicasets -o wide 
Kubernetes replicaset listing with wide output


5. Delete the ReplicaSet

Deleting the ReplicaSet using 'delete' sub-command provide the name of the replicaset.
kubectl -n vybhava delete rs my-tcat-rs
kubectl -n vybhava get rs   
	
6.   
6. How to get the ReplicaSets output to YAML or JSON format?

Hope you guys enjoyed this simple story about ReplicaSet commands and their outputs. Note that The Kubernetes docs explicitly suggest using a deployment rather than a ReplicaSet directly.

References


Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)