Getting started

Basic terms: system parts

    Kubernetes: the whole orchestration system (K8s "k-eights" or Kube for short)
    Kubectl: CLI to configure Kubernetes and manage apps (using "cube control" official pronunciation)
    Node: single server in the Kubernetes cluster
    Kubelet: Kubernetes agent running on nodes
    Control plane: set of containers that manage the cluster
      Includes API server, scheduler, controller manager, etcd and more
      Sometimes called the "master"

Installing Kubernetes locally

    Kubernetes is a series of containers, CLI's and configurations
    Many ways to install:
      MacOS: Docker Desktop - Enable in Settings. Sets up everything inside Docker's existing Linux VM
        Runs, configures Kubernetes Master containers
        Manages kubectl install and certificates
        Easily install, disable and remove from Docker GUI
      Docker Toolbox on Windows - MiniKube. Uses VirtualBox to make Linux VM
        Doesn't install kubectl, has to be installed separately
      Your own Linux host or VM - MicroK8s. Installs Kubernetes right on the OS
        Uses snap (rather apt or yum) for install.
        Control MicroK8s service via microk8s. commands
        kubectl accessible via microk8s.kubectl
        Add an alias to your shell (.bash_profile): alias kubectl=microk8s.kubectl
    Kuberneters in a Browser

Kubernetes Container Abstractions

    Pod: one or more containers running together on one node. Basic unit of deployment. Containers are always in pods.
    Controller: for creating / updating pods and other objects. Controllers manage pods, you almost never manage pods yourself. There are many types of Controllers, including Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob, etc.
    Service: network endpoint to connect to a pod.
    Namespace: Filtered group of objects in cluster.
    Secrets, ConfigMaps, etc.

Kubernetes Run, Create and Apply

    Kubernetes is evolving, and so is the CLI
    We get 3 ways to create pods from the kubectl CLI
    kubectl run (changing to be only for pod creation)
    kubectl create (create some resources via CLI or YAML)
    kubectl apply (create / update anything via YAML)

Basic commands

    kubectl version - shows a version of Client and Server
    kubectl cluster-info
    kubectl run my-nginx --image nginx - this will create a pod, replica set and a deployment
    kubectl get pods - get current pods
    kubectl get all - get all components
    kubectl delete deployment my-nginx - delete named deployment

Scaling ReplicaSets

    Start new deployment for one replica/pod
    kubectl run my-apache --image httpd
    Scale deployment
    kubectl scale deploy/my-apache --replicas 2
    kubectl scale deployment my-apache --replicas 2 (these are same commands)

Inspecting Deployments

    Get logs
    kubectl logs deployment my-apache
    Get logs from pods with a given label
    kubectl logs -l run=my-apache
    Stern for Kubernetes can be used to tail logs from multiple pods (https://github.com/wercker/stern)
    brew install stern
    stern pod-query
    Get pod info
    kubectl describe pod/<pod-id> (pod-id can be obtained with kubectl get pods)`
Last modified 1yr ago