English

Kubernetes has become the go-to platform for managing containerized applications, offering scalability, reliability, and efficiency. If you're new to Kubernetes, this guide will help you set up a local Kubernetes environment using Minikube, deploy your first application, and explore alternatives to Helm for managing your deployments. Let's dive in!

Table of Contents

  1. Introduction to Kubernetes
  2. Prerequisites
  3. Setting Up Your Local Kubernetes Environment
  4. Deploying Your First Application
  5. Accessing Your Application
  6. Alternative Tools to Helm
  7. Cleaning Up
  8. Conclusion

Introduction to Kubernetes

Kubernetes, often abbreviated as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers. It helps manage applications across a cluster of machines, providing mechanisms for deployment, maintenance, and scaling.

Benefits of Kubernetes:

  • Scalability: Easily scale applications up or down based on demand.
  • Reliability: Automatically replace failed containers to maintain application availability.
  • Efficiency: Optimize resource utilization across your infrastructure.
  • Flexibility: Supports various container tools and integrates with different cloud providers.

With Kubernetes, managing complex applications becomes simpler and more efficient, making it a popular choice for modern software development.

Prerequisites

Before you begin, ensure you have the following:

  1. A Computer: Running Windows, macOS, or Linux.
  2. Virtualization Enabled: If you're using Minikube, ensure virtualization is enabled in your BIOS.
  3. Internet Connection: Required for downloading necessary tools and container images.
  4. Basic Terminal Knowledge: Familiarity with command-line interfaces.

Setting Up Your Local Kubernetes Environment

For beginners, using Minikube is the recommended way to set up a local Kubernetes cluster. Minikube runs a single-node Kubernetes cluster inside a virtual machine on your local machine, making it perfect for learning and development purposes.

Installing Minikube

Step 1: Install a Hypervisor

Minikube requires a hypervisor to run the virtual machine. Depending on your operating system, choose one of the following:

Note: Ensure that virtualization is enabled in your BIOS settings.

Step 2: Download and Install Minikube

  • Windows:

    1. Download the latest Minikube installer from the official website.
    2. Run the installer and follow the prompts to complete the installation.
  • macOS: Open your terminal and run:

    brew install minikube
    
  • Linux: Open your terminal and run:

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
    

Installing kubectl

kubectl is the command-line tool used to interact with your Kubernetes cluster.

Step 1: Install kubectl

  • Windows:

    1. Download the latest kubectl executable from the official site.
    2. Add the executable to your system PATH.
  • macOS: Open your terminal and run:

    brew install kubectl
    
  • Linux: Open your terminal and run:

    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/bin/
    

Step 2: Verify Installation

Check the installed versions by running:

kubectl version --client

You should see output similar to:

Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.0", ...}

Starting Minikube

Now that Minikube and kubectl are installed, you can start your local Kubernetes cluster.

Step 1: Start Minikube

Open your terminal and run:

minikube start

This command sets up a local Kubernetes cluster using a virtual machine.

Step 2: Verify the Cluster

Once Minikube starts, verify that your cluster is running:

kubectl cluster-info

You should see information about the Kubernetes master and services.

Deploying Your First Application

With your Kubernetes cluster up and running, it's time to deploy your first application. We'll use the Nginx web server as an example.

Creating a Deployment

A Deployment manages a set of identical pods, ensuring the desired number of replicas are running.

Step 1: Create a Deployment

Run the following command to create a deployment named nginx-deployment with 3 replicas of the Nginx container:

kubectl create deployment nginx-deployment --image=nginx:1.14.2 --replicas=3

Explanation:

  • create deployment: Command to create a new deployment.
  • nginx-deployment: Name of the deployment.
  • --image=nginx:1.14.2: Specifies the container image to use.
  • --replicas=3: Sets the number of pod replicas.

Exposing the Deployment as a Service

A Service exposes your deployment to other pods or the external world.

Step 1: Expose the Deployment

Run the following command to expose the deployment as a LoadBalancer service on port 80:

kubectl expose deployment nginx-deployment --type=LoadBalancer --port=80

Explanation:

  • expose deployment: Command to create a service based on a deployment.
  • nginx-deployment: The deployment to expose.
  • --type=LoadBalancer: Creates an external LoadBalancer to access the service.
  • --port=80: The port on which the service is exposed.

Note: On some local setups like Minikube, the LoadBalancer type might not provision an external IP. We'll address this in the next section.

Accessing Your Application

After deploying your application, you need to verify that it's running correctly and accessible.

Using Minikube Service Command

Minikube provides a handy command to access services running on your local cluster.

Step 1: Get the Service URL

Run the following command to open the Nginx service in your default web browser:

minikube service nginx-deployment

This command retrieves the service URL and opens it in your browser.

Accessing via Browser

If you prefer to access the application manually:

Step 1: Get Service Details

Run:

kubectl get services

Sample Output:

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes         ClusterIP      10.96.0.1       <none>          443/TCP          10m
nginx-deployment   LoadBalancer   10.96.0.2       127.0.0.1:32287 80:31860/TCP     5m

Step 2: Access Nginx in Your Browser

Open your browser and navigate to http://127.0.0.1:32287. You should see the default Nginx welcome page, confirming that your application is running successfully.

Note: The EXTERNAL-IP might show as 127.0.0.1:XXXXX when using Minikube.

Alternative Tools to Helm

While Helm is a popular tool for managing Kubernetes applications, there are alternatives you can consider, especially if you're looking for simpler or different approaches.

Using Kustomize

Kustomize is a tool built into kubectl that allows you to customize Kubernetes resource YAML files without templates.

Step 1: Install Kustomize (if not already installed)

If you're using a recent version of kubectl, Kustomize is already included. To check, run:

kubectl kustomize --help

Step 2: Create a Kustomization File

Create a directory for your application:

mkdir myapp
cd myapp

Create a deployment.yaml file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Create a service.yaml file:

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: myapp

Create a kustomization.yaml file:

resources:
  - deployment.yaml
  - service.yaml

Step 3: Deploy Using Kustomize

Run:

kubectl apply -k .

This command applies all resources defined in the kustomization.yaml file.

Deploying with kubectl Apply

You can also manage Kubernetes resources directly using kubectl apply with YAML manifests.

Step 1: Create YAML Manifests

Create a deployment.yaml file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
      - name: simple-app
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Create a service.yaml file:

apiVersion: v1
kind: Service
metadata:
  name: simple-app-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: simple-app

Step 2: Apply the Manifests

Run:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

This approach is straightforward and doesn't require additional tools.

Cleaning Up

After experimenting with Kubernetes, it's good practice to clean up the resources to free up system resources.

Step 1: Delete the Service

Run:

kubectl delete service nginx-deployment

Step 2: Delete the Deployment

Run:

kubectl delete deployment nginx-deployment

Step 3: Stop Minikube

Run:

minikube stop

Step 4: Delete Minikube Cluster (Optional)

If you no longer need the local cluster:

minikube delete

Conclusion

Congratulations! You've successfully set up a local Kubernetes environment using Minikube, deployed your first application, and explored alternatives to Helm for managing your deployments. Kubernetes might seem complex initially, but with hands-on practice, it becomes a powerful tool for managing containerized applications.

Next Steps:

  • Explore Kubernetes Documentation: Dive deeper into Kubernetes concepts and features.
  • Learn About YAML Manifests: Define deployments, services, and other resources using YAML files for better management.
  • Experiment with Scaling: Try scaling your application up and down to see Kubernetes in action.
  • Implement Advanced Features: Explore ingress controllers, persistent storage, and network policies to enhance your applications.

By continuously experimenting and learning, you'll become proficient in Kubernetes, enabling you to build, deploy, and manage robust applications with ease.


Happy Kubernetes journey! Manage your applications efficiently and watch them thrive in your local cluster.

Priyansh Khodiyar's profile

Written by Priyansh Khodiyar

Priyansh is the founder of UnYAML and a software engineer with a passion for writing. He has good experience with writing and working around DevOps tools and technologies, APMs, Kubernetes APIs, etc and loves to share his knowledge with others.

Posted onstorywith tags:
All Blogs