{"id":67,"date":"2024-11-03T00:56:03","date_gmt":"2024-11-03T00:56:03","guid":{"rendered":"https:\/\/firewallsudhan.in\/?p=67"},"modified":"2024-11-03T00:56:06","modified_gmt":"2024-11-03T00:56:06","slug":"kubernetes-commands","status":"publish","type":"post","link":"https:\/\/firewallsudhan.in\/index.php\/2024\/11\/03\/kubernetes-commands\/","title":{"rendered":"Kubernetes &#8211; Commands"},"content":{"rendered":"\n<p>Getting Started<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Command<\/td><td>Explanation<\/td><\/tr><tr><td>minikube start &#8211;driver=virtualbox<\/td><td>If you are not using Docker Desktop, minikube can help setup a cluster with Virtualbox as driver<\/td><\/tr><tr><td>kubectl run hello-minikube &#8211;image=nginx<\/td><td>Runs a Pod named <code>hello-minikube<\/code> with a nginx image.<\/td><\/tr><tr><td>kubectl cluster-info<\/td><td>Displays cluster information, including API server and core services URLs.<\/td><\/tr><tr><td>kubectl run nginx &#8211;image=nginx &#8211;dry-run=client -o yaml &gt; nginx.yaml<\/td><td>Generates a YAML configuration for a pad using nginx image without actually creating it in the cluster and saves the generated yaml file to nginx.yaml. &#8211;dry-run=client option simulates the command locally without sending it to the API Server. Useful for testing and generating configuration files.<\/td><\/tr><tr><td>kubectl run nginx &#8211;image nginx -n mynamespace<\/td><td>Runs a pod named &#8216;nginx&#8217; in the &#8216;mynamespace&#8217; namespace.<\/td><\/tr><tr><td>kubectl get events -o wide<\/td><td>Lists events across the cluster with additional details.<\/td><\/tr><tr><td>kubectl get all<\/td><td>Lists all resources in the current namespace<\/td><\/tr><tr><td>kubectl get all -A<\/td><td>Lists all resources across all namespaces.<\/td><\/tr><tr><td>kubectl get all &#8211;selector app=web-app<\/td><td>Lists all resources labeled with <code>app=web-app<\/code><\/td><\/tr><tr><td>kubectl port-forward &#8211;help<\/td><td>Displays help for the <code>port-forward<\/code> command.<\/td><\/tr><tr><td>kubectl port-forward pod\/mypod 8888:5000<\/td><td>Forwards local port 8888 to port 5000 on <code>mypod<\/code><\/td><\/tr><tr><td>kubectl exec -it ubuntu &#8211;bash<\/td><td>Opens an interactive Bash session in the <code>ubuntu<\/code> Pod<\/td><\/tr><tr><td>kubectl exec -it mypod -c sidecar &#8211;touch \/tmp\/crash<\/td><td>Creates a file <code>\/tmp\/crash<\/code> in the <code>sidecar<\/code> container of <code>mypod<\/code><\/td><\/tr><tr><td>kubectl explain pod.spec.restartPolicy<\/td><td>Provides documentation for the <code>restartPolicy<\/code> field in the Pod spec<\/td><\/tr><tr><td>kubectl api-resources<\/td><td>To find out shortnames, namespaced or not and kind of resources. Retrieve list of all available API groups in a k8 cluster.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Nodes &amp; Node Management<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Command<\/td><td>Explanation<\/td><\/tr><tr><td>kubectl get nodes<\/td><td>Lists all nodes in current namespace<\/td><\/tr><tr><td>kubectl get nodes -o wide<\/td><td>Lists nodes with additional details like IP Addresses and roles<\/td><\/tr><tr><td>kubectl get node &lt;NODE_NAME> &#8211;show-labels<\/td><td>View labels for a specific node<\/td><\/tr><tr><td>kubectl drain &lt;NODE_NAME> &#8211;delete-emptydir-data &#8211;ignore-daemonsets<\/td><td>Prepares a node for maintenance by evicting pods<\/td><\/tr><tr><td>kubectl cordon control-plane<\/td><td>Marks the control-plane node as unschedulable<\/td><\/tr><tr><td>kubectl uncordon node-name<\/td><td>Mark a previously cordoned node as schedulable again.<\/td><\/tr><tr><td>kubectl taint nodes node1 role=frontend:PreferNoSchedule<\/td><td>Applies a taint to a node to control Pod scheduling.<\/td><\/tr><tr><td>kubectl taint nodes node1 node2 dedicated=example:NoExecute<\/td><td>Can taint multiple nodes at once<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Pods<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Command<\/td><td>Explanation<\/td><\/tr><tr><td>kubectl get pods<\/td><td>Lists all nodes in the cluster with basic information<\/td><\/tr><tr><td>kubectl get pods -o wide<\/td><td>Lists nodes with additional information like IP Addresses and Node placement<\/td><\/tr><tr><td>kubectl get pods -n mynamespace<\/td><td>Lists all pods in the given namespace<\/td><\/tr><tr><td>kubectl get pods &#8211;watch<\/td><td>Watch all pods in the default namespace<\/td><\/tr><tr><td>kubectl get pods &#8211;field-selector=status.phase=Running<\/td><td>retrieves pods with a status of &#8216;Running&#8217;. Can be combined with label selectors also.<\/td><\/tr><tr><td>kubectl describe pod nginx<\/td><td>Shows detailed information about the pod named &#8216;nginx&#8217;<\/td><\/tr><tr><td>kubectl create -f pod-definition.yml<\/td><td>Creates a resource (pod) from the yaml file.<\/td><\/tr><tr><td>kubectl apply -f pod-definition.yml<\/td><td>Apply changes from the yaml file to the existing resources.<\/td><\/tr><tr><td>kubectl delete pod mypodname<\/td><td>Deletes the Pod named <code>mypodname<\/code>.<\/td><\/tr><tr><td>kubectl delete pod\/nginx pod\/ubuntu &#8211;now<\/td><td>Immediately deletes the <code>nginx<\/code> and <code>ubuntu<\/code> Pods.<\/td><\/tr><tr><td>kubectl delete -f nginx.yaml<\/td><td>Deletes resources defined in <code>nginx.yaml<\/code><\/td><\/tr><tr><td>kubectl create pdb nginx &#8211;selector=app=nginx &#8211;min-available=2<\/td><td>Creates a pod disruption budget to ensure at least two nginx pods remain available<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Replicas<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl get replicationcontroller<\/td><td>Lists all replication controllers in the namespace.<\/td><\/tr><tr><td>kubectl get replicasets<\/td><td>Lists all replica sets in the namespace.<\/td><\/tr><tr><td>kubectl describe replicaset myapp-replicaset<\/td><td>Displays details about <code>myapp-replicaset<\/code><\/td><\/tr><tr><td>kubectl edit replicaset myapp-replicaset<\/td><td>Opens an editor to modify <code>myapp-replicaset<\/code>.<\/td><\/tr><tr><td>kubectl replace -f replicaset-definition.yml<\/td><td>Replaces the existing ReplicaSet with the definition in <code>replicaset-definition.yml<\/code><\/td><\/tr><tr><td>kubectl scale -f replicaset-definition.yml &#8211;replicas=6<\/td><td>Scales the ReplicaSet defined in <code>replicaset-definition.yml<\/code> to 6 replicas.<\/td><\/tr><tr><td>kubectl scale replicaset myapp-replicaset &#8211;replicas=6<\/td><td>Scales the <code>myapp-replicaset<\/code> to 6 replicas<\/td><\/tr><tr><td>kubectl scale deployment\/nginx &#8211;replicas=6; watch kubectl get pods -o wide<\/td><td>Scales the <code>nginx<\/code> Deployment to 6 replicas and monitors the Pod status.<\/td><\/tr><tr><td>kubectl delete replicaset myapp-replicaset<\/td><td>Deletes the ReplicaSet named <code>myapp-replicaset<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Deployments<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl create -f deployment-definition.yml<\/td><td>Creates resources defined in <code>deployment-definition.yml<\/code><\/td><\/tr><tr><td>kubectl create -f deployment-definition.yml &#8211;record<\/td><td>Creates resources while recording the changes.<\/td><\/tr><tr><td>kubectl create deployment &#8211;image=nginx nginx<\/td><td>Creates a Deployment named <code>nginx<\/code> with the <code>nginx<\/code> image<\/td><\/tr><tr><td>kubectl get deployments<\/td><td>Lists all Deployments in the namespace.<\/td><\/tr><tr><td>kubectl rollout status deployment\/myapp-deployment<\/td><td>Checks the rollout status of <code>myapp-deployment<\/code>.<\/td><\/tr><tr><td>kubectl rollout history deployment\/myapp-deployment<\/td><td>Shows the rollout history of <code>myapp-deployment<\/code>.<\/td><\/tr><tr><td>kubectl rollout undo deployment\/myapp-deployment<\/td><td>Rolls back <code>myapp-deployment<\/code> to the previous revision<\/td><\/tr><tr><td>kubectl set image deployment\/myapp-deployment nginx=nginx:1.9.1<\/td><td>Updates the image for <code>nginx<\/code> container in <code>myapp-deployment<\/code> to <code>nginx:1.9.1<\/code><\/td><\/tr><tr><td>kubectl annotate deployment\/nginx kubernetes.io\/change-cause=&#8221;initial deployment&#8221;<\/td><td>Adds a change-cause annotation to the <code>nginx<\/code> Deployment.<\/td><\/tr><tr><td>kubectl expose deployment nginx &#8211;port 80<\/td><td>Exposes the <code>nginx<\/code> Deployment on port 80.<\/td><\/tr><tr><td>kubectl delete deployment myapp-deployment<\/td><td>Deletes the <code>myapp-deployment<\/code> Deployment.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Namespaces<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl create -f namespace-dev.yml<\/td><td>Creates a namespace using <code>namespace-dev.yml<\/code>.<\/td><\/tr><tr><td>kubectl create namespace dev<\/td><td>Creates a namespace named <code>dev<\/code>.<\/td><\/tr><tr><td>kubectl get namespaces (or) kubectl get ns<\/td><td>Lists all namespaces<\/td><\/tr><tr><td>kubectl delete namespace\/mynamespace &#8211;now<\/td><td>Immediately deletes the <code>mynamespace<\/code> namespace.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Services &amp; Endpoints<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl get endpoints<\/td><td>Lists all service endpoints in the namespace<\/td><\/tr><tr><td>kubectl get services<\/td><td>Lists all services in the namespace<\/td><\/tr><tr><td>kubectl expose deployment nginx &#8211;type=NodePort<\/td><td>Exposes the <code>nginx<\/code> deployment as a NodePort service<\/td><\/tr><tr><td>kubectl expose deployment nginx &#8211;type=LoadBalancer &#8211;port 8080 &#8211;target-port 80<\/td><td>Exposes <code>nginx<\/code> on an external LoadBalancer.<\/td><\/tr><tr><td>kubectl create service externalname my-service &#8211;external-name nginx-red.default.svc.cluster.local<\/td><td>Creates an ExternalName service that points to a DNS address.<\/td><\/tr><tr><td>kubectl delete service\/nginx<\/td><td>Deletes the <code>nginx<\/code> service<\/td><\/tr><tr><td>kubectl delete service\/nginix-blue service\/nginx-red service\/my-service<\/td><td>Delete multiple services<\/td><\/tr><tr><td>kubectl get serviceaccount<\/td><td>Lists all service accounts in the namespace.<\/td><\/tr><tr><td>kubectl create serviceaccount dashboard-sa<\/td><td>Creates a service account named <code>dashboard-sa<\/code>.<\/td><\/tr><tr><td>kubectl describe serviceaccount dashboard-sa<\/td><td>Shows details of the <code>dashboard-sa<\/code> service account.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Roles &amp; Permissions<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td><\/td><\/tr><tr><td>kubectl get clusterrolebindings -o wide<\/td><td>Lists cluster role bindings with detailed output.<\/td><\/tr><tr><td>kubectl describe ClusterRole\/cluster-admin<\/td><td>Shows details for the <code>cluster-admin<\/code> role.<\/td><\/tr><tr><td>kubectl create clusterrole cluster-superuser1 &#8211;verb=&#8217;<em>*&#8217; &#8211;resource=&#8217;<\/em>*&#8217;<\/td><td>Creates a cluster role with full permission on all resources<\/td><\/tr><tr><td>kubectl create clusterrolebinding cluster-superuser1 &#8211;clusterrole=cluster-superuser1 &#8211;group=cluster-superusers1<\/td><td>Binds cluster role to a group<\/td><\/tr><tr><td>kubectl auth can-i &#8216;*<em>&#8216; &#8216;<\/em>*&#8217;<\/td><td>Checks if the user has permissions for all actions on all resources.<\/td><\/tr><tr><td>kubectl auth can-i &#8216;<em>*&#8217; &#8216;<\/em>*&#8217; &#8211;as-group=&#8221;cluster-superusers1&#8243; &#8211;as=&#8221;msd&#8221;<\/td><td>Checks if user &#8216;<code>msd<\/code>&#8216; has full permissions under the specified group<\/td><\/tr><tr><td>kubectl get roles<\/td><td>Lists all roles in the namespace.<\/td><\/tr><tr><td>kubectl get rolebindings<\/td><td>Lists all role bindings in the namespace.<\/td><\/tr><tr><td>kubectl describe role &lt;ROLE_NAME><\/td><td>Shows details of the specified role.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Daemonsets<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl get daemonsets<\/td><td>Lists all DaemonSets in the namespace.<\/td><\/tr><tr><td>kubectl describe daemonsets monitoring-daemon<\/td><td>Displays details of the <code>monitoring-daemon<\/code> DaemonSet.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Jobs<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl create job calculatepi &#8211;image=perl:5.34.0 &#8212; &#8220;perl&#8221; &#8220;-Mbignum=bpi&#8221; &#8220;print bpi(2000)&#8221;<\/td><td>Creates a job to calculate pi using a Perl script.<\/td><\/tr><tr><td>kubectl delete job calculatepi<\/td><td>Deletes the <code>calculatepi<\/code> job.<\/td><\/tr><tr><td>kubectl delete job calculatepi &#8211;cascade=false<\/td><td>Deletes <code>calculatepi<\/code> without cascading deletion.<\/td><\/tr><tr><td>kubectl delete jobs &#8211;all -n<\/td><td>Deletes all jobs in the specified namespace.<\/td><\/tr><tr><td>kubectl delete job myjob1 &#8211;grace-period=0 &#8211;force<\/td><td>Forcibly deletes <code>myjob1<\/code> without waiting.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Storage &amp; Persistent Volume<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl get storageclass<\/td><td>Lists all storage classes<\/td><\/tr><tr><td>kubectl get persistentvolume<\/td><td>Liss all persistent volumes<\/td><\/tr><tr><td>kubectl get persistentvolumeclaim<\/td><td>Lists all persistent volume claims.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Labels, Configs &amp; Sectrets<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl config set-context $(kubectl config current-context) &#8211;namespace=prod<\/td><td>Sets the default namespace to <code>prod<\/code> for the current context.<\/td><\/tr><tr><td>kubectl config use-context<\/td><td>Switches to a specified context.<\/td><\/tr><tr><td>kubectl config view<\/td><td>Displays the Kubernetes configuration settings.<\/td><\/tr><tr><td>kubectl config view &#8211;kubeconfig=\/home\/user\/custom-config.yaml<\/td><td>Views a specific kubeconfig file.<\/td><\/tr><tr><td>kubectl config view &#8211;raw<\/td><td>Displays the full, raw configuration<\/td><\/tr><tr><td>kubectl config set-context &#8211;current &#8211;namespace=mynamespace<\/td><td>Sets the default namespace for the current context to <code>mynamespace<\/code>.<\/td><\/tr><tr><td>kubectl label namespace default istio-injection=enabled<\/td><td>Adds the <code>istio-injection=enabled<\/code> label to the <code>default<\/code> namespace.<\/td><\/tr><tr><td>kubectl label nodes node-name label-key=label-value<\/td><td>Adds a label to a node<\/td><\/tr><tr><td>kubectl create configmap myconfigmap &#8211;from-literal=COLOR=red &#8211;from-literal=City=chennai<\/td><td>Creates a configmap from literal values.<\/td><\/tr><tr><td>kubectl create configmap myconfigmap &#8211;from-env-file=config.properties<\/td><td>Creates a configmap from an env file<\/td><\/tr><tr><td>kubectl create secret docker-registry regcred &#8211;docker-server=private-registry.io &#8211;docker-username=user<\/td><td>Creates a docker registry secret<\/td><\/tr><tr><td>kubectl create token dashboard-sa<\/td><td>Generates a token for dashboard-sa<\/td><\/tr><tr><td>kubectl describe secret dashboard-sa-token-kbbdm<\/td><td>Show details of token<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Logs<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Command<\/td><td>Explanation<\/td><\/tr><tr><td>kubectl logs pod\/nginx<\/td><td>Retrieves logs from the pod named &#8216;nginx&#8217; in the current namespace<\/td><\/tr><tr><td>kubectl logs pod\/nginx -c my-container -f<\/td><td>If your pod has multiple containers, specify the container name with -c. The -f flag (follow) streams the logs in real time.<\/td><\/tr><tr><td>kubectl logs pod\/nginx -c my-container -p<\/td><td>-p flag retrieves logs from previous instance of the container if it has restarted. Useful in debugging a crashed container.<\/td><\/tr><tr><td>kubectl logs pod\/nginx &#8211;all-containers=true<\/td><td>Get logs from all containers<\/td><\/tr><tr><td>kubectl logs -l app=mywebapp<\/td><td>Retrieves logs from all pods with label app=mywebapp.<\/td><\/tr><tr><td>kubectl logs deployment\/nginx<\/td><td>Retrieves logs from one of the pods in the &#8216;nginx&#8217; deployment. Shows logs from a single pod only.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Scaling<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>kubectl get hpa<\/td><td>Lists all horizontal pod autoscalers in the namespace<\/td><\/tr><tr><td>kubectl scale deployment my-deployment &#8211;replicas=5<\/td><td>Scale a deployment<\/td><\/tr><tr><td>kubectl scale replicaset my-replicaset &#8211;replicas=3<\/td><td>Scale a replicaset<\/td><\/tr><tr><td>kubectl scale statefulset my-statefulset &#8211;replicas=4<\/td><td>Scale a statefulset<\/td><\/tr><tr><td>kubectl autoscale deployment my-deployment &#8211;min=2 &#8211;max=10 &#8211;cpu-percent=80<\/td><td>Autoscale a deployment based on CPU usage<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Getting Started Command Explanation minikube start &#8211;driver=virtualbox If you are not using Docker Desktop, minikube can help setup a cluster with Virtualbox as driver kubectl run hello-minikube &#8211;image=nginx Runs a Pod named hello-minikube with a nginx image. kubectl cluster-info Displays cluster information, including API server and core services URLs. kubectl run nginx &#8211;image=nginx &#8211;dry-run=client -o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[20],"tags":[],"class_list":["post-67","post","type-post","status-publish","format-standard","hentry","category-k8"],"_links":{"self":[{"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/posts\/67","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":8,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/firewallsudhan.in\/index.php\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}