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
Kubernetes Tutorials using EKS – Part 1 – Introduction and Architecture
Kubernetes Tutorials using EKS – Part 2 – Architecture with Master and worker
Kubernetes Tutorials using EKS – Part 3 – Architecture with POD – RC – Deploy – Service
Kubernetes Tutorials using EKS – Part 4 – Setup AWS EKS Clustor
Kubernetes Tutorials using EKS – Part 5 – Namespaces and PODs
Kubernetes Tutorials using EKS – Part 6 – ReplicationControllers and Deployment
Kubernetes Tutorials using EKS – Part 7 – Services
Kubernetes Tutorials using EKS – Part 8 – Volume
Kubernetes Tutorials using EKS – Part 9 – Volume
Kubernetes Tutorials using EKS – Part 10 – Helm and Networking
Latest posts by Rajesh Kumar (see all)
- Implementing Managed IT Services: A Step-by-Step Guide - August 30, 2024
- DevOps Foundation Certification - August 29, 2024
- SRE Foundation Certification - August 29, 2024