Files
lk/virtualization/kubernetes/kubernetes_basics.md

5.5 KiB

title, tags, requires
title tags requires
Kubernetes Basics
virtualization
kubernetes
Kubernetes Setup

Install kubectl.

NB: Debian requires manual installation.1

Read

  1. Check the namespace: kubectl get namespaces
  2. Check the ${kube-system} namespace: `kubectl get deployments.apps --namespace kube-system'
  3. Check host computers: kubectl get nodes
  4. Check pods: kubectl get pods
Namespaces
├── Node_1: minikube
│   ├── deployment_1: nginx
│   │   ├── pod_1
│   │   └── pod_2
│   ├── deployment_2: database
│   │   ├── pod_1
│   │   ├── pod_2
│   │   ├── pod_3
│   │   └── pod_4
│   ├── deployment_3: prometheus
│   └── deployment_4: idk probably yaml
└── Node_1: physical server
    ├── deployment_1: nginx
    │   ├── pod_1
    │   └── pod_2
    ├── deployment_2: database
    │   ├── pod_1
    │   ├── pod_2
    │   ├── pod_3
    │   └── pod_4
    ├── deployment_3: prometheus
    └── deployment_4: Abandoned wiki

More Information

    $ kubectl get pod

NAME                          READY   STATUS    RESTARTS   AGE
nginx-depl-68c944fcbc-2xbvq   1/1     Running   0          20m

    $ kubectl describe pod nginx-depl-68c944fcbc-2xbvq

Name:             nginx-depl-68c944fcbc-2xbvq
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.59.107
Start Time:       Fri, 29 Aug 2025 19:26:29 +0200
Labels:           app=nginx-depl
                  pod-template-hash=68c944fcbc
Annotations:      <none>
Status:           Running
IP:               10.244.0.3
IPs:
  IP:           10.244.0.3
Controlled By:  ReplicaSet/nginx-depl-68c944fcbc
Containers:
  nginx:
    Container ID:   docker://aaa68e90ed9237dc0f98f9a21b0d7ddf3113188c62e72242d30cab4a43cbff98
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:33e0bbc7ca9ecf108140af6288c7c9d1ecc77548cbfd3952fd8466a75edefe57
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 29 Aug 2025 19:26:41 +0200
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9bgxx (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       True 
  ContainersReady             True 
  PodScheduled                True 
Volumes:
  kube-api-access-9bgxx:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  24m   default-scheduler  Successfully assigned default/nginx-depl-68c944fcbc-2xbvq to minikube
  Normal  Pulling    24m   kubelet            Pulling image "nginx"
  Normal  Pulled     24m   kubelet            Successfully pulled image "nginx" in 11.204s (11.204s including waiting). Image size: 192385800 bytes.
  Normal  Created    24m   kubelet            Created container: nginx
  Normal  Started    24m   kubelet            Started container nginx

Pod copies are called a 'replicaset'.

Create

Create a 'deployment' of nginx.

name="nginx-depl"
kubectl create deployment ${name} --image=nginx
kubectl get deployments

The command did not specify a namespace, so default is used.

Update

Update a deployment, with $EDITOR.

kubectl edit deployments.apps ${name}

This gives us far too much information:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"

    [ ... ]

  creationTimestamp: "2025-08-29T18:13:45Z"
  generation: 3
  labels:
    app: nginx-depl
  name: nginx-depl
  namespace: default
  resourceVersion: "17696"
  uid: 8dec2925-5c34-4635-b82c-ba601cb3bef5
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx-depl

  [ ... ]

  observedGeneration: 3
  readyReplicas: 2
  replicas: 2
  updatedReplicas: 2

Pull out the information, without an $EDITOR:

file="webstuff"
kubectl get deployment ${name} -o yaml > ${webstuff}.yaml

Enter the Pod

    $ kubectl get pods

NAME                          READY   STATUS    RESTARTS   AGE
nginx-depl-68c944fcbc-2xbvq   1/1     Running   0          31m

    $ pod='nginx-depl-68c944fcbc-2xbvq'  
    $ kubectl exec -it ${pod}  -- bash

    root@nginx-depl-68c944fcbc-2xbvq:/# ls
    bin   dev		   docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
    boot  docker-entrypoint.d  etc			 lib   media  opt  root  sbin  sys  usr
    root@nginx-depl-68c944fcbc-2xbvq:/#
    exit

Delete

Delete a deployment, and watch it leave:

name=nginx-depl
kubectl delete deployments.apps nginx-depl && kubectl get deployments.apps
kubectl get deployments.apps