{"id":26469810,"url":"https://github.com/ocdbytes/kubernetes_basics","last_synced_at":"2025-03-19T17:09:28.924Z","repository":{"id":113749691,"uuid":"502305294","full_name":"ocdbytes/Kubernetes_Basics","owner":"ocdbytes","description":"This is a Kubernetes Cheatsheet kind of to revise the concepts time to time and contains all the basic operations performed in kubernetes and all the basic features such as load balancing and pods concept","archived":false,"fork":false,"pushed_at":"2023-05-02T21:19:02.000Z","size":888,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-14T10:46:08.888Z","etag":null,"topics":["kubernetes","kubernetes-cluster","kubernetes-deployment"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ocdbytes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-06-11T09:30:09.000Z","updated_at":"2022-06-11T13:40:41.000Z","dependencies_parsed_at":"2023-09-03T04:24:05.174Z","dependency_job_id":"78e25075-def0-4533-92b8-25d18f474064","html_url":"https://github.com/ocdbytes/Kubernetes_Basics","commit_stats":null,"previous_names":["ocdbytes/kubernetes_basics"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocdbytes%2FKubernetes_Basics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocdbytes%2FKubernetes_Basics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocdbytes%2FKubernetes_Basics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocdbytes%2FKubernetes_Basics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocdbytes","download_url":"https://codeload.github.com/ocdbytes/Kubernetes_Basics/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244470251,"owners_count":20457908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kubernetes","kubernetes-cluster","kubernetes-deployment"],"created_at":"2025-03-19T17:09:28.348Z","updated_at":"2025-03-19T17:09:28.907Z","avatar_url":"https://github.com/ocdbytes.png","language":null,"readme":"# Kubernetes Basics ⛵\n\nIn docker we faced a problem called container orchestration so for solution of that there was docker swarm but another solution offered by google is **Kubernetes**\n\nNow to set up we can use GCP, Azure or **LINODE**\nWe can configure our Kubernetes using Linode cloud provider →\n\n[https://cloud.linode.com/kubernetes/create](https://cloud.linode.com/kubernetes/create)\n\nNow fill the details and create a node\n\n![Screenshot 2022-06-11 at 3.38.42 PM.png](Screenshot_2022-06-11_at_3.38.42_PM.png)\n\nNow after creating we will get a master node link and three nodes which we selected\n\n![Screenshot 2022-06-11 at 3.38.42 PM.png](Screenshot_2022-06-11_at_3.38.42_PM%201.png)\n\nNow we need to install kubectl on our host machine which is required for using kubernetes.\n\n```bash\ncurl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl\n```\n\n→ \n\n```bash\n% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100 43.5M  100 43.5M    0     0  7513k      0  0:00:05  0:00:05 --:--:-- 8750k\n```\n\nNow in the directory we have our kubectl and we need to configure it now →\n\n```bash\nchmod +x kubectl\nsudo mv ./kubectl /usr/local/bin/kubectl\n```\n\nNow copy our kubernetes yaml config file\n\n![Screenshot 2022-06-11 at 5.45.43 PM.png](Screenshot_2022-06-11_at_5.45.43_PM.png)\n\n```bash\nnano kubeconfig.yaml\n```\n\nAnd here paste it and save the file\n\n→ Export the file name as a variable\n\n```bash\nexport KUBECONFIG=kubeconfig.yaml\n```\n\n## For MacOS\n\n```bash\nbrew install kubectl\n# This will install and link the kubectl to CLI\n```\n\n→ Now continuing\n\n### To get the nodes on the cluster (for this to work we need to specify our kubeconfig.yaml file )\n\n```bash\nkubectl get nodes\n```\n\n→ Get nodes\n\n```bash\nNAME                          STATUS   ROLES    AGE    VERSION\nlke63625-98873-62a469e5f73b   Ready    \u003cnone\u003e   133m   v1.23.6\nlke63625-98873-62a469e6c87d   Ready    \u003cnone\u003e   133m   v1.23.6\nlke63625-98873-62a469e795e1   Ready    \u003cnone\u003e   133m   v1.23.6\n```\n\n### To get info about the cluster\n\n```bash\nkubectl cluster-info\n```\n\n→\n\n```bash\nKubernetes control plane is running at https://c9abbb71-4d6e-4e08-b874-e99614d81203.ap-west-2.linodelke.net:443\nKubeDNS is running at https://c9abbb71-4d6e-4e08-b874-e99614d81203.ap-west-2.linodelke.net:443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy\n\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.\n```\n\n### To run our image\n\n```bash\nkubectl run \u003cpesonalized_name\u003e --image=\u003cimage_path\u003e --port=\u003cport_you_want_to_run_container_on\u003e\n```\n\nThis will run our application in a pod \n\n### To get pods running\n\n```bash\nkubectl get pods\n```\n\n### To get the more info about the running pods\n\n```bash\nkubectl describe pods\n```\n\n## Deployment\n\nNow if we want to deploy our machine to the worker nodes and we want to specify what we need in each node then we need to do it by defining in a yaml file\n\nFor eg:\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: networkchuckcoffee-deployment\n  labels:\n    app: nccoffee\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nccoffee\n  template:\n    metadata:\n      labels:\n        app: nccoffee\n    spec:\n      containers:\n      - name: nccoffee\n        image: thenetworkchuck/nccoffee:pourover\n        imagePullPolicy: Always\n        ports:\n        - containerPort: 80\n```\n\nTo deploy using the config defined by us in this yaml file we will use this command\n\n```bash\nkubectl apply -f \u003cyaml_filename\u003e\n```\n\n### Delete a pod\n\n```bash\nkubectl delete pods \u003cpodname\u003e\n```\n\n### Get deployments\n\n```bash\nkubectl get deployments\n```\n\n### Edit deployment\n\nNow in kubernetes it always keeps checking that how our deployment is performing like if I specified i need 3 replicas of my application then it keeps ensuring that I need 3 instances of our application running all the time\n\nWe can also edit our deployment by editing the file\n\n```bash\nkubectl get deployments\nkubectl edit deployment \u003cdeployment_name\u003e\n```\n\n### Getting more details or pods\n\n```bash\nkubectl get pods -o wide\n```\n\n## Service\n\nNow if we need to make our website accessible to whole over the internet then we need to expose our container and for that we will user service and it will also act as an load balancer\n\nservice example\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: coffee-service\n  annotations:\n    service.beta.kubernetes.io/linode-loadbalancer-throttle: \"4\"\n  labels:\n    app: coffee-service\nspec:\n  type: LoadBalancer\n  ports:\n  - name: http\n    port: 80\n    protocol: TCP\n    targetPort: 80\n  selector:\n    app: nccoffee\n  sessionAffinity: None\n```\n\n→\n\n```bash\nnano  coffee-service.yaml\nkubectl apply -f coffee-service.yaml\n```\n\n### Get running services\n\n```bash\nkubectl get services\n```\n\nFor more details about a service\n\n```bash\nkubectl describe services \u003cservice_name\u003e\n```\n\n---\n\nRequirements\n\n```bash\n- Kubernetes\n- Minikube\n- Docker\n```\n\nConfigure minikube\n\n```bash\nminikube start --driver=docker\n\n--------\n😄  minikube v1.30.1 on Darwin 13.3.1\n✨  Using the docker driver based on user configuration\n📌  Using Docker Desktop driver with root privileges\n👍  Starting control plane node minikube in cluster minikube\n🚜  Pulling base image ...\n    \u003e gcr.io/k8s-minikube/kicbase...:  373.53 MiB / 373.53 MiB  100.00% 2.84 Mi\n🔥  Creating docker container (CPUs=2, Memory=2200MB) ...\n🐳  Preparing Kubernetes v1.26.3 on Docker 23.0.2 ...\n    ▪ Generating certificates and keys ...\n    ▪ Booting up control plane ...\n    ▪ Configuring RBAC rules ...\n🔗  Configuring bridge CNI (Container Networking Interface) ...\n    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5\n🔎  Verifying Kubernetes components...\n🌟  Enabled addons: storage-provisioner, default-storageclass\n🏄  Done! kubectl is now configured to use \"minikube\" cluster and \"default\" namespace by default\n--------\n\nminikube status # tells us about the status of server\n\n--------\nminikube\ntype: Control Plane\nhost: Running\nkubelet: Running\napiserver: Running\nkubeconfig: Configured\n--------\n\nminikube ip # tells us about the server ip\n```\n\nssh - minikube\n\n```bash\nminikube ssh\n```\n\n```bash\n\nλ  ~  kubectl get nodes\nNAME       STATUS   ROLES           AGE     VERSION\nminikube   Ready    control-plane   3m28s   v1.26.3\n\nλ  ~  kubectl get namespaces\nNAME              STATUS   AGE\ndefault           Active   4m11s\nkube-node-lease   Active   4m15s\nkube-public       Active   4m15s\nkube-system       Active   4m16s\n\nλ  ~  kubectl get pods --namespace=kube-system\nNAME                               READY   STATUS    RESTARTS   AGE\ncoredns-787d4945fb-dmxln           1/1     Running   0          4m53s\netcd-minikube                      1/1     Running   0          5m5s\nkube-apiserver-minikube            1/1     Running   0          5m4s\nkube-controller-manager-minikube   1/1     Running   0          5m4s\nkube-proxy-8w89j                   1/1     Running   0          4m54s\nkube-scheduler-minikube            1/1     Running   0          5m5s\nstorage-provisioner                1/1     Running   0          4m47s\n```\n\ncreating pods\n\n```bash\nkubectl run nginx --image=nginx\n```\n\npod commands\n\n```bash\nkubectl describe pod nginx\n```\n\nAccessing the container \n\n- minikube ssh\n\n```bash\ndocker@minikube:~$ docker ps\nCONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS     NAMES\n22b0ac286045   nginx                       \"/docker-entrypoint.…\"   5 minutes ago    Up 5 minutes              k8s_nginx_nginx_default_c8bc183a-de0f-4d02-a435-63b2d3e20747_0\n2e0411f739c0   registry.k8s.io/pause:3.9   \"/pause\"                 5 minutes ago    Up 5 minutes              k8s_POD_nginx_default_c8bc183a-de0f-4d02-a435-63b2d3e20747_0\na0db5789e937   6e38f40d628d                \"/storage-provisioner\"   12 minutes ago   Up 12 minutes             k8s_storage-provisioner_storage-provisioner_kube-system_fab2000e-95c1-4025-8f28-74aba9665cbb_0\n61446f64c99d   registry.k8s.io/pause:3.9   \"/pause\"                 12 minutes ago   Up 12 minutes             k8s_POD_storage-provisioner_kube-system_fab2000e-95c1-4025-8f28-74aba9665cbb_0\n32db8541dfe5   5185b96f0bec                \"/coredns -conf /etc…\"   12 minutes ago   Up 12 minutes             k8s_coredns_coredns-787d4945fb-dmxln_kube-system_46e5799d-389b-4e1e-b2f0-5bd29a8f4dd9_0\n47721954f2a4   registry.k8s.io/pause:3.9   \"/pause\"                 12 minutes ago   Up 12 minutes             k8s_POD_coredns-787d4945fb-dmxln_kube-system_46e5799d-389b-4e1e-b2f0-5bd29a8f4dd9_0\n2c2ac7f8ab18   92ed2bec97a6                \"/usr/local/bin/kube…\"   12 minutes ago   Up 12 minutes             k8s_kube-proxy_kube-proxy-8w89j_kube-system_74106fb9-4459-4ffe-85a9-3815b4f1df71_0\ne6011c45a1f7   registry.k8s.io/pause:3.9   \"/pause\"                 12 minutes ago   Up 12 minutes             k8s_POD_kube-proxy-8w89j_kube-system_74106fb9-4459-4ffe-85a9-3815b4f1df71_0\n21ce2445eb26   fce326961ae2                \"etcd --advertise-cl…\"   13 minutes ago   Up 13 minutes             k8s_etcd_etcd-minikube_kube-system_d59d6e9872abe47b5a2578072778f755_0\nd4992ed31fc3   1d9b3cbae03c                \"kube-apiserver --ad…\"   13 minutes ago   Up 13 minutes             k8s_kube-apiserver_kube-apiserver-minikube_kube-system_2000cc64446a6d814c0e4a3fd7eefdb7_0\na8b3031c53ff   5a7904736932                \"kube-scheduler --au…\"   13 minutes ago   Up 13 minutes             k8s_kube-scheduler_kube-scheduler-minikube_kube-system_0818f4b1a57de9c3f9c82667e7fcc870_0\n8ae3c06858b6   ce8c2293ef09                \"kube-controller-man…\"   13 minutes ago   Up 13 minutes             k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_466b9e73e627277a8c24637c2fa6442d_0\nc34c6e9c1f9b   registry.k8s.io/pause:3.9   \"/pause\"                 13 minutes ago   Up 13 minutes             k8s_POD_kube-scheduler-minikube_kube-system_0818f4b1a57de9c3f9c82667e7fcc870_0\n1e60619d6362   registry.k8s.io/pause:3.9   \"/pause\"                 13 minutes ago   Up 13 minutes             k8s_POD_kube-controller-manager-minikube_kube-system_466b9e73e627277a8c24637c2fa6442d_0\n15f33b952657   registry.k8s.io/pause:3.9   \"/pause\"                 13 minutes ago   Up 13 minutes             k8s_POD_kube-apiserver-minikube_kube-system_2000cc64446a6d814c0e4a3fd7eefdb7_0\nfa29ac8194be   registry.k8s.io/pause:3.9   \"/pause\"                 13 minutes ago   Up 13 minutes             k8s_POD_etcd-minikube_kube-system_d59d6e9872abe47b5a2578072778f755_0\ndocker@minikube:~$ docker ps | grep \"nginx\"\n22b0ac286045   nginx                       \"/docker-entrypoint.…\"   5 minutes ago    Up 5 minutes              k8s_nginx_nginx_default_c8bc183a-de0f-4d02-a435-63b2d3e20747_0\n2e0411f739c0   registry.k8s.io/pause:3.9   \"/pause\"                 5 minutes ago    Up 5 minutes              k8s_POD_nginx_default_c8bc183a-de0f-4d02-a435-63b2d3e20747_0\n\ndocker@minikube:~$ docker exec -it 22b0ac286045 sh\n# hostname\nnginx\n# ls\nbin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var\n#\n```\n\n```bash\nλ  ~  kubectl get pods -o wide\nNAME    READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES\nnginx   1/1     Running   0          9m41s   10.244.0.3   minikube   \u003cnone\u003e           \u003cnone\u003e\n```\n\n```bash\nλ  ~  kubectl delete pod nginx\npod \"nginx\" deleted\n```\n\nCreating the deployments\n\n```bash\nλ  ~  kubectl create deployment nginx --image=nginx\ndeployment.apps/nginx created\n```\n\n```bash\nλ  ~  kubectl describe deployment nginx \nName:                   nginx\nNamespace:              default\nCreationTimestamp:      Wed, 03 May 2023 01:11:54 +0530\nLabels:                 app=nginx\nAnnotations:            deployment.kubernetes.io/revision: 1\nSelector:               app=nginx\nReplicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable\nStrategyType:           RollingUpdate\nMinReadySeconds:        0\nRollingUpdateStrategy:  25% max unavailable, 25% max surge\nPod Template:\n  Labels:  app=nginx\n  Containers:\n   nginx:\n    Image:        nginx\n    Port:         \u003cnone\u003e\n    Host Port:    \u003cnone\u003e\n    Environment:  \u003cnone\u003e\n    Mounts:       \u003cnone\u003e\n  Volumes:        \u003cnone\u003e\nConditions:\n  Type           Status  Reason\n  ----           ------  ------\n  Available      True    MinimumReplicasAvailable\n  Progressing    True    NewReplicaSetAvailable\nOldReplicaSets:  \u003cnone\u003e\nNewReplicaSet:   nginx-748c667d99 (1/1 replicas created)\nEvents:\n  Type    Reason             Age   From                   Message\n  ----    ------             ----  ----                   -------\n  Normal  ScalingReplicaSet  102s  deployment-controller  Scaled up replica set nginx-748c667d99 to 1\n```\n\nscaling\n\n```bash\nλ  ~  kubectl scale deployment nginx --replicas=5\ndeployment.apps/nginx scaled\nλ  ~  kubectl get pods                             \nNAME                     READY   STATUS              RESTARTS   AGE\nnginx-748c667d99-47gjc   0/1     ContainerCreating   0          6s\nnginx-748c667d99-5c7kx   1/1     Running             0          8m36s\nnginx-748c667d99-grxrn   0/1     ContainerCreating   0          6s\nnginx-748c667d99-ncfxt   0/1     ContainerCreating   0          6s\nnginx-748c667d99-t9htq   0/1     ContainerCreating   0          6s\n```\n\n```bash\nλ  ~  kubectl get pods -o wide\nNAME                     READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES\nnginx-748c667d99-47gjc   1/1     Running   0          67s     10.244.0.5   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-5c7kx   1/1     Running   0          9m37s   10.244.0.4   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-grxrn   1/1     Running   0          67s     10.244.0.6   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-ncfxt   1/1     Running   0          67s     10.244.0.7   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-t9htq   1/1     Running   0          67s     10.244.0.8   minikube   \u003cnone\u003e           \u003cnone\u003e\n```\n\n```bash\nλ  ~  kubectl scale deployment nginx --replicas=3\ndeployment.apps/nginx scaled\nλ  ~  kubectl get pods                           \nNAME                     READY   STATUS    RESTARTS   AGE\nnginx-748c667d99-5c7kx   1/1     Running   0          11m\nnginx-748c667d99-grxrn   1/1     Running   0          2m49s\nnginx-748c667d99-t9htq   1/1     Running   0          2m49s\nλ  ~  kubectl get pods -o wide                   \nNAME                     READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES\nnginx-748c667d99-5c7kx   1/1     Running   0          11m     10.244.0.4   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-grxrn   1/1     Running   0          2m55s   10.244.0.6   minikube   \u003cnone\u003e           \u003cnone\u003e\nnginx-748c667d99-t9htq   1/1     Running   0          2m55s   10.244.0.8   minikube   \u003cnone\u003e           \u003cnone\u003e\n```\n\nExposing the application\n\n```bash\nλ  ~  kubectl expose deployment nginx --port=8080 --target-port=80\nservice/nginx exposed\nλ  ~  kubectl get service\nNAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE\nkubernetes   ClusterIP   10.96.0.1        \u003cnone\u003e        443/TCP    42m\nnginx        ClusterIP   10.107.176.110   \u003cnone\u003e        8080/TCP   20s\n```\n\nThis is exposed to the kubernetes cluster.\n\n```bash\nλ  ~  kubectl describe service nginx\nName:              nginx\nNamespace:         default\nLabels:            app=nginx\nAnnotations:       \u003cnone\u003e\nSelector:          app=nginx\nType:              ClusterIP\nIP Family Policy:  SingleStack\nIP Families:       IPv4\nIP:                10.107.176.110\nIPs:               10.107.176.110\nPort:              \u003cunset\u003e  8080/TCP\nTargetPort:        80/TCP\nEndpoints:         10.244.0.4:80,10.244.0.6:80,10.244.0.8:80\nSession Affinity:  None\nEvents:            \u003cnone\u003e\n```\n\nExposing to the system outside the clusters\n\n```bash\nkubectl expose deployment \u003cname_deployment\u003e --type=NodePort --port=3000\nkubectl expose deployment \u003cname_deployment\u003e --type=LoadBalancer --port=3000\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focdbytes%2Fkubernetes_basics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focdbytes%2Fkubernetes_basics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focdbytes%2Fkubernetes_basics/lists"}