A beginner's guide for K8s setup using Kubectl

in Kubernetes

A beginner's guide for K8s setup using Kubectl

What is Kubectl? How to install it? How to use it?


    Definition - What is Kubectl?

    Kubernetes is a great solution for automating the deployment, scaling, and management of containerized applications - explained in more detail in “How to get started with Kubernetes” blog post.

    One of the main tools in Kubernetes is Kubectl. This is the main command-line tool for administering and interacting with your Kubernetes installation; think of kubectl as the Bash environment of Kubernetes.

    Other useful Kubernetes components are kubeadm and kubelet - you will most likely install and use these 3 together when setting up your first Kubernetes cluster. And read this article for a full overview of Kubernetes components and this other article for a sample Kubernetes deployment.

    Kubectl Installation

    You can install kubectl, on Linux, macOS, and Windows. But as detailed in the official Kubernetes site: “You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master. Using the latest version of kubectl helps avoid unforeseen issues.”

    The most common installation is on Linux, so let’s go through the kubectl installation via both curl and via native package manager in Linux in a bit more detail:

    Using curl:

    The first step is to confirm the latest stable release at this URL: https://storage.googleapis.com/kubernetes-release/release/stable.txt

    Next, download that latest stable release with this command:
    curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

    If instead, you want to use an older release, say v1.16.4, use this command instead:

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.4/bin/linux/amd64/kubectl

    Next, you make the binary executable, add it to your PATH, and check that kubectl is running ok and up to date, using these 3 commands respectively:

    chmod +x ./kubectl

    sudo mv ./kubectl /usr/local/bin/kubectl

    kubectl version --client

    Using a Native Package Manager

    Use these commands for Ubuntu/ Debian installation:

    sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2

    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

    sudo apt-get update

    sudo apt-get install -y kubectl

    The steps for kubectl installation on Windows can be found here, and for macOS here.

    After a successful installation, kubectl now needs to find and access a Kubernetes cluster. For this, it needs a kubeconfig file, which was created automatically when you created a cluster using “kube-up.sh” or successfully deployed a Minikube cluster (what is Minikube? Find out more here). By default, the kubectl configuration file is in this path: ~/.kube/config.

    Finally, confirm that kubectl is properly configured. Display the cluster state with this command:

    kubectl cluster-info

    This should return a URL response. But if the error message below is displayed instead, then kubectl is not configured correctly or your cluster setup was incorrect: The connection to the server <server-name:port> was refused - did you specify the right host or port?

    You can get more verbose info on your cluster setup using this command:

    kubectl cluster-info dump

    And you can view your overall kubectl configuration using this command:

    kubectl config view

    Kubectl Options & Flags

    Just like bash, there are some kubectl options that can make life easier. For instance, you can enable command autocompletion in kubectl on bash or zsh by following this guide.

    You can also enable a number of flags in kubectl, by simply using this syntax: kubectl [flags]

    Quick example: kubectl --alsologtostderr

    These flags are explained in full in the official kubectl reference guide, and a few of the more useful and common ones are listed in the table below:

    Flag Purpose
    --alsologtostderr log to standard error as well as log files
    --application-metrics-count-limit int Maximum number of application metrics to store (per container): default 100
    --cluster clustername The name of the cluster to use. Useful in multiple-cluster environments
    -h, --help help
    --log-dir path-to-logdirectory If non-empty, write log files in this directory
    -s, --server servername The address and port of the Kubernetes API server

    Kubectl Syntax and Commands

    We have talked about kubectl being the command-line utility for Kubernetes. Now let’s take a closer look at the kubectl syntax and some useful Kubectl commands. These are also explained in detail in the official guide.

    Kubectl commands generally follow this order:

    kubectl [command] [TYPE] [NAME] [flags]

    command: Specifies the operation that you want to perform on one or more resources, such as create, get, describe, delete

    TYPE: Specifies the resource type. Resource types are case-insensitive and you can specify the singular, plural, or even abbreviated forms. For example, the following commands produce the same output:

    kubectl get pod pod1

    kubectl get pods pod1

    kubectl get po pod1

    NAME: Specifies the name of the resource. Names are case-sensitive. If the name is omitted, details for all resources are displayed, for example, kubectl get pods

    flags: Specifies optional flags, as explained earlier. Note that any flags you specify at the command line will override the default values in a configuration file and in any environment variables.

    The actual kubectl commands are simply too many to list here. You can go the official guide and the command reference for the full list, but below are some of the most useful everyday commands that you will almost certainly use as a Kubernetes admin:

    • kubectl get <resourcename>

    Use ‘kubectl get’ to pull a list of resources you have currently on your cluster. The types of resources you can get include: Namespace, Pod, Node, Deployment, Service, ReplicaSets

    Example: kubectl get nodes to list all nodes.

    • kubectl create <resourcename>

    As you may have guessed, this is the command to create resources such as service, deployment, job, namespace (ns)

    Example: kubectl create ns my-new-namespace

    • kubectl describe <resourcename>

    This shows the details of the resource you're looking at. The most common use of this is to describe a pod or node to check that it’s running ok or if there’s an error.

    Example: kubectl describe pod15

    • kubectl apply

    This command is used to apply a configuration in a specific config file.

    Example: kubectl apply -f /kube/config2.yaml

    And remember, you can always get some help and tips using kubectl help

    Conclusion

    This is just an intro to Kubernetes. You can use this guide to familiarize yourself with Kubernetes in general and kubectl in particular. But remember you also always have the option of not spending time learning all of this, by using a fully hosted Kubernetes solution such as Cloudplex.

    Get started with Cloudplex here, and try out some useful hands-on labs here.


    Get similar stories in your inbox weekly, for free



    Share this story:
    cloudplex
    Cloudplex

    Founder and CEO of Cloudplex - We make Kubernetes easy for developers.

    Latest stories


    How ManageEngine Applications Manager Can Help Overcome Challenges In Kubernetes Monitoring

    We tested ManageEngine Applications Manager to monitor different Kubernetes clusters. This post shares our review …

    AIOps with Site24x7: Maximizing Efficiency at an Affordable Cost

    In this post we'll dive deep into integrating AIOps in your business suing Site24x7 to …

    A Review of Zoho ManageEngine

    Zoho Corp., formerly known as AdventNet Inc., has established itself as a major player in …

    Should I learn Java in 2023? A Practical Guide

    Java is one of the most widely used programming languages in the world. It has …

    The fastest way to ramp up on DevOps

    You probably have been thinking of moving to DevOps or learning DevOps as a beginner. …

    Why You Need a Blockchain Node Provider

    In this article, we briefly cover the concept of blockchain nodes provider and explain why …

    Top 5 Virtual desktop Provides in 2022

    Here are the top 5 virtual desktop providers who offer a range of benefits such …

    Why Your Business Should Connect Directly To Your Cloud

    Today, companies make the most use of cloud technology regardless of their size and sector. …

    7 Must-Watch DevSecOps Videos

    Security is a crucial part of application development and DevSecOps makes it easy and continuous.The …