Hey dev people out there, it's been a longtime since writing a blog so thought of starting this 2021 with some useful resources on kubernetes. Hope you benefit out of it
What is Kubernetes šŗ
Kubernetes is a platform for managing containerised workloads. kubernetes orchestrates computing, networking, and storage to provide a seamless portability across infrastructure providers.
This particular blog is based on noobs for kube commands and operations. Also this can be used as a quick handbook for k8s.
Deployment
- I'm putting deployment in a simple sentence to understand. Basically deployment is something will specify how many replicas should we run inside the Kubernetes cluster. Also that's a way to handle HA clusters [ High Availability ]. By just writing a yaml file you can deploy a deployment. Will show you some sample.
Image source: matthewpalmer
kubectl get deploy
kubectl get deploy -o wide
kubectl get deploy -o yaml
kubectl describe deploy
kubectl edit deploy [ deployment.name ] -n [ namespace.name ]
kubectl run redis-app --image=redis --replicas=4 --port=6943
kubectl delete deployment [ deployment.name ] -n [ namespace.name ]
kubectl scale --replicas=5 deployment/redis-app
kubectl rollout status deployment/redis-app
kubectl rollout history deployment/redis-app
kubectl rollout pause deployment/redis-deployment, resume
kubectl rollout undo deployment/redis-deployment
kubectl expose deployment/redis --type=NodePort -n [ namespace.name ]
Service
- Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them ā sometimes called a micro-service. Something like DNS where you can expose your application to outside world. This divides into 2, so called NodePort / Cluster IP.
Image source: matthewpalmer
kubectl get svc
kubectl get svc -o wide
kubectl get svc -o yaml
kubectl get svc -show-labels
kubectl describe svc
kubectl get services āsort-by=.metadata.name
kubectl delete pods,services -n [ namespace.name ]
kubectl get endpoints -A
kubectl get service redis-service -o go-template='{{.spec.clusterIP}}ā
kubectl get service nginx-service -o go-template='{{(index .spec.ports 0).port}}ā
kubectl patch svc redis-service -p '{"spec": {"type": "LoadBalancer"}}'
kubectl expose service/redis-svc --type=LoadBalancer -n [ namespace.name ]
kubectl port-forward svc/redis-master 6379:6379
Nodes
- Node is nothing but the host machine where your pod runs !
kubectl get nodes
kubectl get nodes -o wide
kubectl get nodes -o yaml
kubectl get nodes --selector=[label_name]
kubectl get nodes -o json
kubectl describe nodes
kubectl top nodes
Pods
- Pods in Kubernetes are the cube box which comprised with the docker containers. When a pod gets deployed you'll have a unique IP address for that pod. Also as like all, pod can also be defined in yaml file.
kubectl get pods
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods --show-labels
kubectl top pod --all-namespaces
kubectl edit pod [pod.name] -n [namespace.name]
kubectl get pods --field-selector status.phase=Running
kubectl get pods | grep -e ContainerCannotRun -e Pending -e Unknown -e Error
kubectl get pods āsort-by=ā.status.containerStatuses[0].restartCountā
kubectl get pods -o=ācustom-columns=PODS:.metadata.name,Images:.spec.containers[*].imageā
kubectl get pods nginx -o yaml --export > nginx_pod_info.yaml
kubectl get pods āsort-by=ā.status.containerStatuses[0].restartCountā
Namespace
- Namespaces in kube is like separate blocks where your deployment is isolated for easier to deploy and delete. By default kubernetes will create 3 namespaces: Kube-system, Kube-public, default.
kubectl get namespace
kubectl get namespace [ namespace-name ] -o yaml
kubectl describe namespace [ namespace-name ]
kubectl edit namespace [ namespace-name ]
kubectl get events --all-namespace
kubectl get events -sort-by=.metadata.creationTimestamp
kubectl -n [ namespace-name ] delete po,svc,deploy --all
Logs
- Sometimes we might need to check why the pods are getting failed, so we need to check the logs of the pods deployed with the below commands.
kubectl get events
kubectl get events -n default
kubectl get events -w
kubectl exec -it -n ā$nsā ā$podnameā ā sh -c āecho $msg >>/logs/poderror.logā
Labels
- Labels can be used to organize and select subsets of objects. They are often used for example to identify releases (beta, stable), environments (dev, prod), or tiers (frontend, backend).
kubectl label pods redis-master owner=sunil
kubectl label pods redis-master owner- #this command is to remove label
kubectl label [node.name] disktype=ssd
kubectl label [pod.name] env=prod
Service Account
kubectl edit sa [service.account.name]
kubectl delete sa [service.account.name]
Some kube maintenance command
kubectl cordon [node.name]
kubectl uncordon [node.name]
kubectl drain [node.name]
Taint
kubectl taint [node.name] [taint.name]
Kube-shell terminal for faster insight
- These days kube-shell terminal made me more comfy on resolving k8s conflicts and faster retrieval of cluster information. Not sure this can be used on client premises [Security Approval Needed]. But make use of it on your local system. Hope this would save your time in typing commands and not to view my blog again xD
ā¬ Download kube-shell click here
Some Hacks
To list all the images which is present inside the cluster
Also I'm including this video, trust me it'll be fun to watch and easy to understand š
Thanks Matt Butcher & Bailey Beougher for this video.
Top comments (0)