..

Kubernetes TLDR

Kubernetes TLDR

Reference

Kuberenetes

It helps manage containerized applications in a much more organized way.

It’s known for

  1. High availability
  2. Stability and high performance
  3. Disaster recovery

Pods

  • Smallest unit of K8
  • Contains a docker container
  • Usually 1 application per Pod
  • Each Pod gets its own IP address
  • Pods are ephemeral
  • We don’t create them directly, instead manage them with deployments

Service

  • Permanent IP address that can be attached to pod
  • Works as a load balancer and forwards the request to the least busy pod
  • A service identifies its pods using selectors
  • Types of services
    • ClusterIP
      • Handles request from Ingress or other pods/services
      • Internal load balancer
      • Can have multiple ports
      • Only accessible within the cluster
    • Headless
      • K8 allows DNS lookup for service
      • Set the clusterIP to None, so that k8 does not assign any specific IP to the service which helps with Pod discovery
    • NodePort
      • Lets external work access a fixed port on the worker node
      • ClusterIP service is also created automatically
      • Not very secure
    • LoadBalancer service
      • Extension of NodePort
      • Becomes accessible externally through cloud providers lb service
      • Port of the load balancer service is only accessible through cloud providers lb

Ingress

  • Reference
  • External service can be used to access k8 eg: load balancer
  • Ingress is another component in front of external service that routes the services to different internal services
  • External services should not be used in prod
  • Ingress controller pod: evaluates all the rules and manages redirection
  • minikube addons enable ingress
  • Can also define multiple paths

Volumes

  • Can be local or remote
  • K8s doesn’t manage data persistence
  • Persistent Volume
    • Not namespaced
    • Need to add a configuration file
    • They should already be there when setting up the cluster
    • Persistent volume claim: Needs a configuration file to claim the persistence volume
  • Storage Class
    • Provisions persistant volumes dynamically

Nodes

  • Each Node has multiple Pods in it
  • 3 processes: Should be on every node
    • Container runtime (eg: Docker)
    • Kubelet
      • Interacts with both the container & node
      • Starts the pod with container inside
    • Kube proxy

Deployment

  • Specify how many pods you require
  • Abstraction of pods
  • DBs can’t be replicated using Deployment
  • Replicaset is managing the replicas of a pod, in practice we don’t work with it

StatefulSet

  • For stateful apps like DBs, use this
  • Databases/Applications that store data
  • Stateless applications are deployed via deployment, stateful applications are deployed using StatefulSet
  • Replicating stateful apps is more difficult
  • Not all stateful pods are same, they can be either master (read/write) or worker (read)
  • Each pod accesses a replica of the data storage
  • StatefulSet pods get sticky identity, name stays same but IP changes
  • Containers are good for stateless applications

Master nodes

  • 4 processes
    • API server
      • Cluster gateway
      • Can be CLI tool
    • Scheduler
      • Where to put the Pod?
      • Just decides, does not executes
    • Controller manager
      • Detects cluster state changes and calls scheduler when a pod dies
    • etcd
      • Cluster changes get stored in the key value store
      • Cluster brain
      • Application data is not stored here
  • Can have multiple master nodes
  • Need less resources then worker nodes
  • Minikube
    • One node cluster: Master and Worker processes run on single node
    • Creates virtual box
    • 1 node K8 cluster for testing purpose

Command References

Reference

  • kubectl
    • CLI for managing K8s cluster
    • kubectl apply -f config-file.yaml To deploy the deployment/service
    • kubectl describe pod <pod-name&gt
  • Basic commands for installation and running
    • kubectl get all | grep <app name&gt

Configuration files

  • Deployments and service will have a (separate) configuration file
  • YAML: Multiple documents in 1 file possible with --- separator
  • Deployment
    • metadata
    • specification
      • Attributes specific to the kind of config file
      • template
        • config file inside a config file
        • applies to pod
    • status
      • Automatically generated by k8
  • Service
    • selector: To connect to pod through label
    • ports: service port and target port (for pod)
    • loadbalancer
      • To access the deployment from the external world, we need to create a service of type loadbalancer
      • 2 Backlinks
        • External service can be used to access k8 eg: loadbalancer
        • To start a service and connect with the outside world loadbalancer
  • Secret
    • Reference
    • Secret must be created before the deployment
    • Secrets can be referenced inside the k8 deployment configuration file
  • ConfigMap
    • external configuration which is centralized
    • ConfigMap must already be in the k8 cluster when referencing it
  • Namespace
    • Cluster inside a cluster
    • 4 namespaces by default
      • kube-system: System processes
      • kube-public: Publicly accessible data
      • kube-node-lease: determines the availability of nodes
      • default
    • Use case
      • Group resources under name spaces eg: Database, Monitoring, Elastic Stack etc.
      • Group different environment under name spaces eg: Staging, development
      • Blue/Green Deployment eg: Production Blue/Production Green
        • Can help in using share resources
      • Access management control Avoid conflicts b/w teams
    • Not helpful for smaller projects
    • Some components can’t be accessed from other namespaces
    • Volume and nodes can’t be bounded to namespaces
    • Can provide namespace inside Configuration files

Helm

  • Package manager for Kubernete
  • Templating engine for configuration files
  • Also helps in Release management