deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
labels:
app: hello-world
spec:
replicas: 4
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/hello-app:1.0
ports:
- containerPort: 8080
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/hello-app:1.0
#Anatomy of an API Request
#Creating a pod with YAML
kubectl apply -f pod.yaml
#Get a list of our currently running Pods
kubectl get pod hello-world
#We can use the -v option to increase the verbosity of our request.
#Display requested resource URL. Focus on VERB, API Path and Response code
kubectl get pod hello-world -v 6
#Same output as 6, add HTTP Request Headers. Focus on application type, and User-Agent
kubectl get pod hello-world -v 7
#Same output as 7, adds Response Headers and truncated Response Body.
kubectl get pod hello-world -v 8
#Same output as 8, add full Response. Focus on the bottom, look for metadata
kubectl get pod hello-world -v 9
#Start up a kubectl proxy session, this will authenticate use to the API Server
#Using our local kubeconfig for authentication and settings
kubectl proxy &
curl http://localhost:8001/api/v1/namespaces/default/pods/hello-world | head -n 20
fg
ctrl+c
#Watch, Exec and Log Requests
#A watch on Pods will watch on the resourceVersion on api/v1/namespaces/default/Pods
kubectl get pods --watch -v 6 &
#We can see kubectl keeps the TCP session open with the server...waiting for data.
netstat -plant | grep kubectl
#Delete the pod and we see the updates are written to our stdout. Watch stays, sicne we're watching All Pods in the default namespace.
kubectl delete pods hello-world
#But let's bring our Pod back...because we have more demos.
kubectl apply -f pod.yaml
#And kill off our watch
fg
ctrl+c
#Accessing logs
kubectl logs hello-world
kubectl logs hello-world -v 6
#Start kubectl proxy, we can access the resource URL directly.
kubectl proxy &
curl http://localhost:8001/api/v1/namespaces/default/pods/hello-world/log
#Kill our kubectl proxy, fg then ctrl+c
fg
ctrl+c
#Authentication failure Demo
cp ~/.kube/config ~/.kube/config.ORIG
#Make an edit to our username changing user: kubernetes-admin to user: kubernetes-admin1
vi ~/.kube/config
#Try to access our cluster, and we see GET on ./api/v1/namespaces/default/pods?limit=500 returns a 403. Status, failure.
kubectl get pods -v 6
#Let's put our backup kubeconfig back
cp ~/.kube/config.ORIG ~/.kube/config
#Test out access to the API Server
kubectl get pods
#Missing resources, we can see the response code for this resources is 404...it's Not Found.
kubectl get pods nginx-pod -v 6
#Let's look at creating and deleting a deployment. We see a query for the existence of the deployment, then a 201 OK on the POST to create the deployment
kubectl apply -f deployment.yaml -v 6
#Get a list of the Deployments
kubectl get deployment
#Clean up when we're finished. we see a DELETE 200OK and a GET 404.
kubectl delete deployment hello-world -v 6
kubectl delete pod hello-world
Code language: PHP (php)
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals