add basic kubernetes commands
This commit is contained in:
		
							
								
								
									
										206
									
								
								virtualization/kubernetes/kubernetes_basics.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								virtualization/kubernetes/kubernetes_basics.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,206 @@ | ||||
| --- | ||||
| title: "Kubernetes Basics" | ||||
| tags: [ "virtualization", "kubernetes" ] | ||||
| requires: [ "Kubernetes Setup" ] | ||||
| --- | ||||
|  | ||||
| Install `kubectl`. | ||||
|  | ||||
| > **NB:** Debian requires manual installation.[^kubedeb] | ||||
|  | ||||
| [^kubedeb]: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/ | ||||
|  | ||||
| # Read | ||||
|  | ||||
| 1. Check the namespace: `kubectl get namespaces` | ||||
| 1. Check the `${kube-system}` namespace: `kubectl get deployments.apps --namespace kube-system' | ||||
| 1. Check host computers: `kubectl get nodes` | ||||
| 1. Check pods: `kubectl get pods` | ||||
|  | ||||
|  | ||||
| ```tree | ||||
| 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 | ||||
|  | ||||
| ```bash | ||||
|     $ 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`. | ||||
|  | ||||
| ```sh | ||||
| 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`. | ||||
|  | ||||
| ```sh | ||||
| kubectl edit deployments.apps ${name} | ||||
| ``` | ||||
|  | ||||
| This gives us far too much information: | ||||
|  | ||||
| ```yaml | ||||
| 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`: | ||||
|  | ||||
| ```sh | ||||
| file="webstuff" | ||||
| kubectl get deployment ${name} -o yaml > ${webstuff}.yaml | ||||
| ``` | ||||
|  | ||||
| ## Enter the Pod | ||||
|  | ||||
| ```bash | ||||
|     $ 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: | ||||
|  | ||||
| ```sh | ||||
| name=nginx-depl | ||||
| kubectl delete deployments.apps nginx-depl && kubectl get deployments.apps | ||||
| kubectl get deployments.apps | ||||
| ``` | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user