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