DevOps Classroom Series – 18/Jul/2020 (Evening)

Challenges involved in K8s

  • Resource Configuration Challenge:
    • Many typed of k8s resources:
      • Deployment
      • Pods
      • ReplicaSets
      • Service
      • Ingress
      • StorageClass
      • PersistentVolumeClaims
      • Secret
      • ConfigMap
      • And many more
    • Deploying an application on k8s is not simple, you need have understanding of all resource types
  • Keeping the live and local states in sync:
    • K8s specifications will be created as yaml files stored in vcs like git
    • Whenever there are new changes we need to update git and pull those changes on server (local) and apply using kubectl (live).
    • But do you think this happens all the time?
    • In most of cases, we make local changes in the git apply it k8s (apply live state) and then commit changes to git (applying local states)
  • Application life cycles are hard to manage
  • Resource files are static
    • Even if the specifications are almost the same, since there is no parametrization, we need have multiple specs without reusability Preview

Helm Comes to the rescue.

  • To overcome challanges prompted a creation of simple but powerfull tool to deploy applications on k8s & that tool is helm
  • Helm is often referred to as the Kubernetes Package Manager

Understanding package managers

  • Package managers simplify process of installing, upgrading, reverting and removing system applications
  • Applications are defined in units, these units are called as packages. Packages contain metadata around target software & its dependencies
  • Lets take an example of you trying to install a software called as git
    • You will find the package name for git
    • Then you execute the command to install the package
    choco install git -y
    apt install git -y
    dnf install git --assumeyes # Fedora
    yum install git -y
    
    • Lets assume a new version of git is release
    choco upgrade git -y
    dnf upgrade git --assumeyes
    
    • if the new version is faulty, we can revert back to old version
    dnf downgrade git --assumeyes
    
    • If we want to remove software, we can execute
    dnf remove git --assumeyes
    
  • Who ever is creating package will have specific implementation details
    • dnf operates on RPM package
    • apt operates on deb packages
    • choco operates on nuget package
  • Once they create packages, they add metadata like version number etc and then they push the packages to some repository.
  • User will fetch these packages from repository and install application software.

K8s package manager

  • Helm works with charts. Charts are similar to packages.

  • Helm chart can be thought as K8s package.

  • Helm chart consists of

    • K8s resource files to deploy
    • some metadata
    • templates
  • To learn helm lets create AKS and EKS cluster

EKS Cluster

  • Installation Steps:

    • Creating AWS Ec2 instace,
    • Install AWS CLI
    • Install EKSCTL cli
    • Install kubectl
    • Use EKSCTL command to create cluster
  • Follow the instructions to create cluster from here

  • Also create AKS cluster if you have azure account credentials

Quick review of Helm

  • Refer here for official docs
  • Helm will have client component(helm-client) which generally runs along with kubectl and it also has server component (Tiller) which run in K8s cluster.
  • Once we install helm, helm use kubectl config file to communicate with k8s cluster. Preview
  • Lets understand subcommands of helm Preview
  • Installing and configuring helm on the linux instance where kubectl is configured
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

helm help
helm version

  • Lets add a repository to helm
helm repo add stable https://kubernetes-charts.storage.googleapis.com
  • Lets install an example chart
helm repo update
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm search repo stable
helm version
helm repo update
helm search repo stable | grep mysql
helm install stable/mysql --generate-name

Preview

  • clean up Preview

Lets do one more helm chart installation for redis

  • Lets use redis, lets use repositories from bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install redis bitnami/redis --namespace=redis
kubectl get all -n redis

Preview Preview

  • If we get a new version of redis
helm upgrade redis bitnami/redis --namespace=redis
  • If we want to rollback to previous version
helm rollback redis 1 --namespace=redis
  • If we want to uninstall redis
helm uninstall redis --namespace=redis

How about creating charts?

  • Lets create a helm chart
helm create learning
  • When we create a helm chart a folder is created and in this folder there will subfolders and files Preview

  • Lets understand files/directory and their purpose

    • Chart.yaml: A file that consists of metatada about Helm chart. This is required
    • templates/: A directory that consists of k8s resources in YAML format.
    • templates/NOTES.txt: A file that can be generated to provided installation instructions during chart installation.
    • values.yaml: This file consists of charts default vaule.
    • .helmignore: ignore list (files/directoies) in the Helm chart package
    • charts/: A directory that consists of charts that this Helm chart is dependend on
    • Chart.lock: A file used to save previously applied dependecy version
    • README.md: This is documentation
    • LICENSE:
    • values.schema.json: A file contain the chars values schema in json format
  • Lets look at the deployment.yaml in the templates folder Preview

  • Helm use Go templating Refer Here

  • Go template control structures process begins with two opening curly braces and ends with two ending curly braces "{{ }}"

  • "{{ }}" will pull the values from Values.yml or _helpers.tpl (*.tpl)

  • Lets try to add dependencies to our chart

  • Make the necessary changes and execute Preview Preview

  • Now execute show values for dependency redis

helm show values chart/redis-10.7.11.tgz

Preview

  • Lets install our chart
kubectl create namespace lnspace
helm install my-learning learning -n lnspace

Preview Preview Preview

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Please turn AdBlock off
Animated Social Media Icons by Acurax Wordpress Development Company

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube