Thursday, 14 August 2025

Learning Kubernetes(k8s)

What is Kubernetes?

Kubernetes (often abbreviated as K8s) is an open-source platform for managing large-scale containerized applications. It automates container deployment, scaling, and operations across clusters of machines. It's written in Go.
It's inspired by the Google project: Boorg.

An instance of Kubernetes is called a Cluster.
Cluster has :
  • Control plane
    • kube-apiserver
      •  The kube-apiserver is a key component of Kubernetes that exposes the Kubernetes API, handles most requests, and manages interactions with the cluster by processing and validating API requests, making it essential for the cluster's operation
    • etcd
      • A key-value store that saves all data about the state of the cluster; only the kube-apiserver can communicate directly with etcd
    • kube-scheduler
      • Identifies a newly created pod that has not been assigned a worker node and assigns it to a specific node
    • kube-controller-manager
      • Monitors the Kubernetes cluster's state, running processes to ensure the current state matches the desired state
    • cloud-controller-manager
      • Connects a Kubernetes cluster to a cloud provider's API, managing cloud-specific resources and ensuring proper integration with the underlying infrastructure
  • Worker Node
    • kubelet
      • An agent that runs on each node in a Kubernetes cluster, ensuring containers in a pod are running and healthy while communicating with the API server in the control plane to maintain the desired state of the node
    • container-runtime
      •  Pulls container images, creates and manages containers, and ensures they run properly and securely as directed by the Kubernetes control plane
    • kube-proxy
      •  A network proxy that runs on each node in a Kubernetes cluster, maintaining network rules and enabling communication between pods and services within the node and the control plane, while also communicating directly with the kube-apiserver


Brief about Containers:

Containers are a lightweight, portable way to package and run applications. They bundle your application along with everything it needs—like libraries, dependencies, and configuration—so it runs reliably in any environment.

Containers terminology:

Image: A container image is a snapshot of everything needed to run a containerized application. It’s like a blueprint or a frozen package that contains:

Container Registry: A container registry is a storage and distribution system for container images.
eg, Docker Hub, quay, Google Container Registry

Advantages of Containers:

  • Portable: Runs on any Linux, Windows or macOS machine
  • Use fewer CPUs and memory, saving money.
  • Self-contained, can be spun up and down in seconds
  • Quick replication and scale up and down.

Cloud-native:

Cloud Native is a modern approach to building and running applications that fully leverages the advantages of the cloud, such as scalability, flexibility, and resilience.


Setting up a K8s cluster

  1. Install Docker (or any container engine): Helps to spin up a Kubernetes cluster.
  2. Install minikube: Software that helps us run a Kubernetes cluster on our computer. it runs locally on the computer.

Spin up a minikube cluster

  • Make sure Docker/Podman is running
  • $ minikube start [create a cluster]

Explore the cluster

  • $ kubectl cluster-info
  • $ kubectl get nodes
  • $ kubectl get namespaces
  • $ kubectl get pods -A
  • $ kubectl get services -A

Application Deployment

Creating namespaces:

Namespaces help in isolating apps.
---
apiVersion: v1
kind: Namespace
metadata:
    name: demo
  • $ kubectl apply -f namespace.yaml
  • $kubectl get namespaces or kubectl get ns
  • $ kubectl delete -f namespace.yaml

Deploying an app

  • $ kubectl apply -f <yaml file>
  • $ kubectl get deployments -n demo
  • $ kubectl get pods -n demo

Check the health of the pod using event logs

  • $ kubectl describe pod <pod name> -n demo

Making sure the app is running fine using BusyBox

  • Create  a Busybox pod
  • $ kubectl apply -f busybox.yaml   #creating a busybox pod in the default namespace
  • $ kubectl get pods   # checking busybox pod is up and running
  • $ kubectl get pods -n demo -o wide  # get the IP address of the pods
  • $ kubectl exec -it <busy box pod name> -- /bin/sh  #we are in busybox command prompt 
  • /# wget <IP address of pod: Port>
  • /#exit     #exit out of busybox

Viewing application logs

  • $ kubectl logs <pod_name> -n demo

Types of service

  • ClusterIP
  • NodePort
  • LoadBalancer

Exposing the application to the internet 

A Kubernetes Service is an abstraction that exposes a set of Pods as a network service. It allows other Pods or external clients to communicate with them, even as Pods are created or destroyed.
A load balancer directs traffic from the internet to k8s pods. 

Running a stateful application
  • Using a database outside your cluster
  • Using a Kubernetes Persistent Volume

Deleting k8s resources

  • $ kubectl delete -f <yaml file>
  • $ minikube delete

Kubernetes Security

  • Adding some security context
    • Containers are running as non-root
    • The container's filesystem is read-only
  • Scan your file using Snyk
    • snyck iac test <yaml file>
    • Regularly update your k8s version







Friday, 27 June 2025

Teach Your AI New Tricks with InstructLab


 InstructLab is an open-source toolkit and workflow designed to fine-tune foundation models using a community-driven, taxonomy-based process.

 It enables experts—even those unfamiliar with ML—to contribute small “skill recipes” that enhance a model’s knowledge base.


How does it work?

  1. Install the CLI tool(ilab)
    1. pip install instructlab
  2. Initialize a project
    1. ilab config init  > It sets up a taxonomy repo and configuration.
  3. Download a base model
    1. ilab model download > such as IBM granite or Merlinite
    2. It downloads pre-trained models from HuggingFace
  4. List the downloaded model
    1. ilab model list
  5. Serve the model
    1. ilab model serve
  6. Chat with the model
    1. ilab model chat

Contribute knowledge

  1. Create skills via recipes 
    1. Add examples(question and answer: YAML format), 
  2. Add and validate your new data.
    1. ilab taxonomy diff
  3. Run synthetic data generation.
    1. ilab data generate
  4. Train or fine tune the model 
    1. ilab model train --pipeline=simple
  5. Serve the trained model
    1. ilab lodel serve --model-path <path>
  6. Chat with the model
    1. ilab model chat --model <model>
  7. Submit recipes as pull requests.


Understanding the Basics of Artificial Intelligence

 What exactly AI is and why everyone is talking about it.

Artificial intelligence, or AI, has now become a part of our daily lives, and many of us are not aware of that. It's working behind the scenes, quietly and efficiently. Few examples are: phone unlocking with facial recognition, a chatbot helping you book a flight, or Netflix suggesting your next favorite show.

What is Artificial Intelligence?

In simple terms, Artificial Intelligence refers to machines or software that mimic human intelligence. A machine can learn patterns and make predictions. AI does not replace human decision-making; instead, it adds value to human judgment.


Types of AI:

  • Narrow AI(Weak AI)
    •  AI is designed for a specific task.  eg, Siri, Google Maps, facial recognition
  • General AI (Strong AI)
    • AI that can understand, learn, and apply knowledge across a wide range of tasks, like humans. eg, Meta AI, GPT4
  • Super AI(AGI and ASI)
    • Hypothetical AI that surpasses human intelligence in all aspects. A future concept, not yet developed.

How does AI work?

AI systems are built using techniques like:
  • Machine Learning:
    • ML is a subset of AI that provides machines the ability to automatically learn and improve from experience without being explicitly programmed. Types of ML:
      • Supervised Learning
      • Unsupervised Learning
      • Reinforcement Learning
  • Deep Learning
    • A type of ML that mimics the human brain's network(neural network)
  • Natural Language Processing
    • Helps the computer understand human language.

Why AI Matters?

AI has the power to transform industries, improve efficiency, and solve global problems- from climate modeling to personalized education.

As AI continues to evolve, it will become even more integrated into our lives. The key is to use it responsibly. ensuring that it benefits society as a whole.