Kubernetes
Kubernetes is an open-source container-orchestration system for automating computer application deployment, scaling, and management.
Use kubectl commands
The kubectl command line tool lets you control Kubernetes clusters. For configuration, kubectl
looks for a file named config
in the $HOME/.kube
directory. You can specify other kubeconfig files by setting the KUBECONFIG environment variable or by setting the --kubeconfig
flag.
Command overview: https://kubernetes.io/docs/reference/kubectl/overview/
List all running pods
kubectl get pods
# list pods in all namespaces
kubectl get pods -A
Delete pod
kubectl delete po demo-889bb54fc-4brqx
# force pod deletion
kubectl delete po demo-889bb54fc-4brqx --grace-period 0 --force
Flush Kubernetes DNS
If you encounter DNS issues inside your K8s cluster it can sometimes help to restart the coredns service.
kubectl scale deployment.apps/coredns -n kube-system --replicas=0
kubectl scale deployment.apps/coredns -n kube-system --replicas=2
Get last 50 updated pods
watch 'kubectl get pods --sort-by=.status.startTime | tail -50'
Get all pods that are not in "Running" state
watch 'kubectl get pods | grep -v Running'
Get logs for pods
# by pod name
kubectl logs -f demo-889bb54fc-4brqx
# by label
kubectl logs -f -l app=demo
# by deployment
kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler
Delete pod in case it is stuck in "terminating"
kubectl get namespace instana-agent -o json > instana-agent.json
# Remove "kubernetes" from the finalizers array in instana-agent.json
# Execute cleanup command
kubectl replace --raw "/api/v1/namespaces/instana-agent/finalize" -f ./instana-agent.json
Port Forwarding
kubectl port-forward --namespace demo deployment/component 8600:8600
# afterwards you can access the pod locally via the forwarded port 8600
curl localhost:8600/...
Get all K8s worker nodes
kubectl get nodes --sort-by='.metadata.creationTimestamp'
NAME STATUS ROLES AGE VERSION
ip-10-255-216-218.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-220-178.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-216-41.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-202-243.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-202-137.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-217-234.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-204-221.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-203-49.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
ip-10-255-202-81.us-west-2.compute.internal Ready <none> 35d v1.20.7-eks-135321
...
Copy file from/to Pod
Copy file from/to pod to local machine.
kubectl cp <namespace>/<pod>:/tmp/from.txt /tmp/to.txt
kubectl cp /tmp/from.txt <namespace>/<pod>:/tmp/to.txt
Debug DNS inside a Kubernetes cluster
First install dnsutils
kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
After that you can exec different commands from inside the dnsutils pod to test DNS resolution. In the example below the demo-reader is running as a headless service with 2 replica. Using nslookup we can verify that we get 2 IP addresses.
kubectl exec dnsutils -- nslookup demo-reader
Server: 172.20.0.10
Address: 172.20.0.10#53
Name: demo-reader.demo.svc.cluster.local
Address: 10.255.203.66
Name: demo-reader.demo.svc.cluster.local
Address: 10.255.202.69
For more see https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
Last updated