Kubernetes Learning Journey
A guided Kubernetes track that moves from Docker and cluster architecture through workloads, networking, storage, security, Helm, Kustomize, scaling, and managed clusters.
Start Here
Orientation and roadmap before moving into the hands-on sections.
- Kubernetes learning roadmapThis track is organized so you can build confidence in the right order: start with container and cluster basics, move through workloads and networking, then learn security, packaging, operations, and managed Kubernetes on AWS and Google Cloud.
- Docker best practicesOpen lesson
Docker
!Docker Architecture
- Docker Architecture!Docker Architecture
- Docker Containers and NamespacesDocker uses Linux namespaces to create isolated environments for containers, ensuring that each container runs independently without interfering with others. Namespaces are a core part of Docker's containerization, providing process and resource isolation.
- Troubleshooting Docker ContainersIf a container is failing or behaving unexpectedly, check its logs.
- Docker Deployment Models:---
- Docker Networking Types and Use Cases---
- Docker NotesOpen lesson
- Docker Compose / mysql:networks: app-network: services: mysql: image: mysql:latest environment: MYSQLROOTPASSWORD: password MYSQLDATABASE: partinventorydb ports: - "3306:3306" volumes: - mysqldata:/var/lib/mysql
- Docker Compose For Asset App / Docker Composenetworks: asset-telemetry-network:
- Docker Hands On / Let's run something on DockerOpen lesson
- Docker Hands On / Docker Composeservices: product-service: image: ram1uj/ecom-app-product-service restart: always ports: - "8100:8100" networks: - app-network
- Docker Important Notes / BuildKit-Optimized Dockerfile (with Maven cache)COPY --from=build /app/target/.jar app.jar
- Docker Important Notes / Image Layering in DockerA Docker image is built layer by layer. Each instruction in a Dockerfile (FROM, COPY, RUN, etc.) creates a new immutable layer.
- Docker Important Notes / Debugging with LogsIn containers:
- Docker Important Notes / Step 0 – Your current Dockerfile (baseline)EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
- Notes App Docker Compose / Docker Composenetworks: app-network:
- Spring Boot With Mysql / Docker Composevolumes: mysql-data:
- Spring Boot With Mysql / Src / Main / Resources / Applicationjpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: formatsql: true
Kubernetes Fundamentals
Build the mental model for Kubernetes by learning what problems it solves, how a cluster is structured, and how the core components work together.
- Kubernetes ComponentsKubernetes has a modular architecture consisting of various components that work together to manage containers efficiently. These components are categorized into: 1. Control Plane Components (Manage the cluster) 2. Node Components (Run the workloads)
- What is Kubernetes and What Problems Does It Solve?Developed by Google, Kubernetes is now maintained by the Cloud Native Computing Foundation (CNCF).
- Important Notes on Kubernetes---
Pods and Probes
Learn how pods run workloads and how readiness and liveness probes help keep services healthy.
- How to Access a Pod Using Its IP Address?To access it: bash curl http://10.244.1.12:80
- Podspec: containers: - name: easy-recipes-container image: ram1uj/easy-recipes:latest ports: - containerPort: 8080
- Liveness ProbeKubernetes provides three types of probes to monitor and manage the health and readiness of containers in a pod:
- Spring Boot With Sidecarvolumes: - name: shared-logs emptyDir: {}
Namespaces
Think of namespaces like virtual clusters inside a physical cluster.
- Kubernetes NamespacesThink of namespaces like virtual clusters inside a physical cluster.
Services and Discovery
Understand how Kubernetes exposes workloads internally and externally with service abstractions and DNS-based discovery.
- What is a Headless Service?Normally, a Kubernetes Service provides a single virtual IP (ClusterIP) and load balances traffic across pods.
- 1. apiVersion: v1Here's a detailed breakdown of your Kubernetes Service YAML file:
Cluster Nodes And Scheduling
When your workloads exceed the cluster’s current capacity, some pods will enter a Pending state. The Cluster Autoscaler or Karpenter watches for this and increases the node count automatically. Similarly, when resources are underused for a certain time (default 10 minutes), the scaler removes unneeded nodes to save cost.
- What Node Autoscaling DoesWhen your workloads exceed the cluster’s current capacity, some pods will enter a Pending state. The Cluster Autoscaler or Karpenter watches for this and increases the node count automatically. Similarly, when resources are underused for a certain time (default 10 minutes), the scaler removes unneeded nodes to save cost.
- Step 1: Label Your NodesIn Kubernetes, if you have two nodes and want to schedule specific pods onto a particular node based on labels or certain properties, you can achieve that using node labels combined with either nodeSelector or nodeAffinity. Both are native scheduling mechanisms that let you control where your workload runs, but they differ in flexibility.
- Big IdeaNow we’re getting into the really interesting part of Kubernetes scheduling — this is where microservices architecture becomes intelligent.
- Example 1: Basic NoSchedule ExampleYou can taint a node so that only certain pods can run on it. For instance, if you want a node to only accept front‑end pods:
Storage and Persistent Volumes
Learn how Kubernetes handles durable storage with persistent volumes, claims, and cloud-backed disk examples.
- Kubernetes Storage and Volumes---
- Persistent Volumes in KubernetesA Persistent Volume is a pre-provisioned storage resource in the cluster. It can come from a variety of backends:
- Persistent Volume Types in Kubernetes---
- Gce PV Example / DeploymentOpen lesson
- Gce PV Example / Google Cloud Persistent DiskOpen lesson
- Gce PV Example / PVCOpen lesson
- Mysql Deployment With PV / Mysql PVOpen lesson
- Mysql Deployment With PV / storageClassName: ""Open lesson
- Mysql Deployment With PV / Mysql ServiceOpen lesson
- Mysql Deployment With PV / Mysql StatefulsetOpen lesson
Stateful Workloads
Move from stateless deployments to databases and other workloads that need stable identity and persistent state.
- How to access:Open lesson
- MongoDB StatefulsetOpen lesson
- How Does Replication Actually Get Set Up?There are only 3 real ways in practice.
- Mysql StatefulsetOpen lesson
Deployments
---
- Kubernetes Deployment Best Practices---
- Overview of Kubernetes Deployment YAML Configuration---
- Step-by-Step Kubernetes Deployment Using Commands OnlyWe will deploy the ram1uj/easy-recipes application in Kubernetes without YAML files, using only kubectl commands.
- Why Kubernetes Probes Matter?Kubernetes itself does not know your application logic. It only knows:
- MySQL StatefulSet on Minikube, including:This will give you a basic MySQL StatefulSet setup on Minikube, perfect for local dev/testing.
- Mysql TestOpen lesson
- Inventory Order App Yamls / Part Gateway DeploymentOpen lesson
- Inventory Order App Yamls / Part Gateway ServiceOpen lesson
- Inventory Order App Yamls / tolerations:Open lesson
- Inventory Order App Yamls / Part Inventory HPAOpen lesson
- Inventory Order App Yamls / Part Inventory ServiceOpen lesson
- Inventory Order App Yamls / Part Order DeploymentOpen lesson
- Inventory Order App Yamls / Part Order ServiceOpen lesson
- Kubernetes Test Ymls / DeploymentOpen lesson
- Kubernetes Test Ymls / ServiceOpen lesson
- Mysql Deployment / Mysql Deployment With PVCOpen lesson
- Mysql Deployment / Mysql DeploymentOpen lesson
- Mysql Deployment / Mysql PVCOpen lesson
- Mysql Deployment / Mysql SvcOpen lesson
- Mysql Deployment / StorageclassOpen lesson
Ingress and Gateway Routing
Learn how HTTP and HTTPS traffic enters the cluster using ingress resources, gateway APIs, and application routing examples.
- What is Ingress in Kubernetes?Ingress is a Kubernetes resource that manages external access to your cluster’s services, typically over HTTP/HTTPS.
- Apps / readinessProbe:Open lesson
- Apps / Part Gateway ServiceOpen lesson
- Apps / Part Inventory DeploymentlivenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 0 periodSeconds: 10 failureThreshold: 3
- Apps / Part Inventory ServiceOpen lesson
- Apps / Part Order DeploymentOpen lesson
- Apps / Part Order ServiceOpen lesson
- Gateway API On GKE / GatewayOpen lesson
- Gateway API On GKE / weight: 90Open lesson
- Ingress On GKE / ingressClassName: "gce"Open lesson
Scaling and Rollouts
Learn how Kubernetes scales workloads, performs rolling updates, and supports autoscaling decisions in production.
- What is a Cluster Autoscaler?Cluster Autoscaler is a Kubernetes component that automatically adds or removes nodes in a cluster based on pod scheduling needs.
- Kubernetes Rolling Updates & Horizontal ScalingIn Kubernetes, Rolling Updates and Horizontal Scaling are essential mechanisms for managing deployments with minimal downtime and optimal resource usage.
Kubernetes on AWS EKS
Apply the core Kubernetes model on AWS EKS with practical deployment recipes and debugging examples.
- Kubernetes on EKS (Elastic Kubernetes Service)---
- Easy Recipes EKS / DeploymentOpen lesson
- Easy Recipes EKS / type: LoadBalancerOpen lesson
- Testing And Debugging / Test PodOpen lesson
Network Policies
Network Policies let you control which pods can talk to each other inside the cluster. They become important once your applications stop being a single service and start behaving like a real distributed system with frontends, APIs, databases, and background workers.
- Network Policies OverviewNetwork Policies let you control which pods can talk to each other inside the cluster. They become important once your applications stop being a single service and start behaving like a real distributed system with frontends, APIs, databases, and background workers.
- Allow Frontend To BackendOpen lesson
- Default Deny PolicyOpen lesson
Configmaps And Secrets
Create a file called configmap.yml:
- ConfigMaps and Secrets in KubernetesCreate a file called configmap.yml:
- ConfigmapOpen lesson
- Deploymentspec: containers: - name: spring-boot-container image: spring-boot-app:latest imagePullPolicy: Never ports: - containerPort: 8080 env: - name: APPMESSAGE valueFrom: secretKeyRef: key: message name: spring-secret
- GCP Secret Manager---
- base64 encoded message - Hello from SecretOpen lesson
- ServiceOpen lesson
RBAC
In the above, user "jane" is granted permission to read pods in the "default" namespace. This gives her access limited strictly to reading pods but nothing else in that namespace.
- Core Components of Kubernetes RBAC:In the above, user "jane" is granted permission to read pods in the "default" namespace. This gives her access limited strictly to reading pods but nothing else in that namespace.
- Steps to set up RBAC for a user in the dev namespacekubectl auth can-i get pods --as=system:serviceaccount:dev:dev-user --namespace=dev
- Roles And Users / - apiGroups: [ "apps" ]Open lesson
- Roles And Users / RolebindingOpen lesson
- Roles And Users / Service AccountOpen lesson
Helm Basics
Before deploying a Helm chart, it’s a good practice to debug and dry-run it to identify any potential issues.
- Debugging & Dry Running a Helm ChartBefore deploying a Helm chart, it’s a good practice to debug and dry-run it to identify any potential issues.
- What is Helm?---
- Easy Recipes Chart / ChartOpen lesson
- Easy Recipes Chart / Valuesimage: repository: ram1uj/easy-recipes pullPolicy: Always tag: "latest"
- Easy Recipes Chart / Templates / DeploymentOpen lesson
- Easy Recipes Chart / Templates / ServiceOpen lesson
- Easy Recipes Chart / Templates / Tests / Test ConnectionOpen lesson
Helm Charts
This section contains ready-to-study Helm chart examples. The goal is to move from hand-written manifests to reusable application packages that can be installed, upgraded, rolled back, and configured with values.
- Helm Charts OverviewThis section contains ready-to-study Helm chart examples. The goal is to move from hand-written manifests to reusable application packages that can be installed, upgraded, rolled back, and configured with values.
- Ecom App Chart / ChartOpen lesson
- Ecom App Chart / ValuesreplicaCount: 2
- Ecom App Chart / Templates / DeploymentOpen lesson
- Ecom App Chart / Templates / ServiceOpen lesson
- Inventory Order Chart / ChartOpen lesson
- Inventory Order Chart / Default values for inventory-order.nameOverride: "" fullnameOverride: ""
- Inventory Order Chart / Templates / Part Gateway DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Gateway ServiceOpen lesson
- Inventory Order Chart / Templates / Part Inventory DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Inventory ServiceOpen lesson
- Inventory Order Chart / Templates / Part Order DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Order ServiceOpen lesson
- Nginx Chart / ChartOpen lesson
- Nginx Chart / Default values for nginx-chart.podSecurityContext: {} fsGroup: 2000
- Nginx Chart / Templates / DeploymentOpen lesson
- Nginx Chart / Templates / Servicespec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: {{ .Values.image.containerPort }} protocol: TCP name: http selector: app: {{ .Release.Name }}
- Product App Chart / ChartOpen lesson
- Product App Chart / Valuesimage: repository: ram1uj/easy-recipes pullPolicy: Always tag: "latest" containerPort: 8080
- Product App Chart / Templates / DeploymentOpen lesson
- Product App Chart / Templates / ServiceOpen lesson
Kustomize
Kustomize is a Kubernetes-native configuration management tool that lets you customize resource YAML files in a reusable, declarative way—without modifying the original (base) files. It was added natively into kubectl (via the -k option) starting in Kubernetes v1.14.
- What is KustomizeKustomize is a Kubernetes-native configuration management tool that lets you customize resource YAML files in a reusable, declarative way—without modifying the original (base) files. It was added natively into kubectl (via the -k option) starting in Kubernetes v1.14.
- Kustomize Example / Dev / Spring Boot DeploymentOpen lesson
- Kustomize Example / Dev / Spring Boot ServiceOpen lesson
- Kustomize Example / Prod / Spring Boot DeploymentOpen lesson
- Kustomize Example / Prod / Spring Boot ServiceOpen lesson
- Kustomize Example / Qa / Spring Boot DeploymentOpen lesson
- Kustomize Example / Qa / Spring Boot ServiceOpen lesson
Best Practices
Structured topics designed to be completed in sequence.
- Docker best practicesOpen lesson
GCP GKE
---
- GCP GKE Steps---
- Easy Recipes Yamls / Easy Recipes DeploymentOpen lesson
- Easy Recipes Yamls / Easy Recipes HPAOpen lesson
- Easy Recipes Yamls / - path: /infoOpen lesson
- Easy Recipes Yamls / Easy Recipes ServiceOpen lesson
AWS EKS
---
- Kubernetes on EKS (Elastic Kubernetes Service)---
- Easy Recipes EKS / DeploymentOpen lesson
- Easy Recipes EKS / type: LoadBalancerOpen lesson
- Testing And Debugging / Test PodOpen lesson
Configmap Secrets
Create a file called configmap.yml:
- ConfigMaps and Secrets in KubernetesCreate a file called configmap.yml:
- ConfigmapOpen lesson
- Deploymentspec: containers: - name: spring-boot-container image: spring-boot-app:latest imagePullPolicy: Never ports: - containerPort: 8080 env: - name: APPMESSAGE valueFrom: secretKeyRef: key: message name: spring-secret
- GCP Secret Manager---
- base64 encoded message - Hello from SecretOpen lesson
- ServiceOpen lesson
Deployments
---
- Kubernetes Deployment Best Practices---
- Overview of Kubernetes Deployment YAML Configuration---
- Step-by-Step Kubernetes Deployment Using Commands OnlyWe will deploy the ram1uj/easy-recipes application in Kubernetes without YAML files, using only kubectl commands.
- Why Kubernetes Probes Matter?Kubernetes itself does not know your application logic. It only knows:
- MySQL StatefulSet on Minikube, including:This will give you a basic MySQL StatefulSet setup on Minikube, perfect for local dev/testing.
- Mysql TestOpen lesson
- Inventory Order App Yamls / Part Gateway DeploymentOpen lesson
- Inventory Order App Yamls / Part Gateway ServiceOpen lesson
- Inventory Order App Yamls / tolerations:Open lesson
- Inventory Order App Yamls / Part Inventory HPAOpen lesson
- Inventory Order App Yamls / Part Inventory ServiceOpen lesson
- Inventory Order App Yamls / Part Order DeploymentOpen lesson
- Inventory Order App Yamls / Part Order ServiceOpen lesson
- Kubernetes Test Ymls / DeploymentOpen lesson
- Kubernetes Test Ymls / ServiceOpen lesson
- Mysql Deployment / Mysql Deployment With PVCOpen lesson
- Mysql Deployment / Mysql DeploymentOpen lesson
- Mysql Deployment / Mysql PVCOpen lesson
- Mysql Deployment / Mysql SvcOpen lesson
- Mysql Deployment / StorageclassOpen lesson
Docker
!Docker Architecture
- Docker Architecture!Docker Architecture
- Docker Containers and NamespacesDocker uses Linux namespaces to create isolated environments for containers, ensuring that each container runs independently without interfering with others. Namespaces are a core part of Docker's containerization, providing process and resource isolation.
- Troubleshooting Docker ContainersIf a container is failing or behaving unexpectedly, check its logs.
- Docker Deployment Models:---
- Docker Networking Types and Use Cases---
- Docker NotesOpen lesson
- Docker Compose / mysql:networks: app-network: services: mysql: image: mysql:latest environment: MYSQLROOTPASSWORD: password MYSQLDATABASE: partinventorydb ports: - "3306:3306" volumes: - mysqldata:/var/lib/mysql
- Docker Compose For Asset App / Docker Composenetworks: asset-telemetry-network:
- Docker Hands On / Let's run something on DockerOpen lesson
- Docker Hands On / Docker Composeservices: product-service: image: ram1uj/ecom-app-product-service restart: always ports: - "8100:8100" networks: - app-network
- Docker Important Notes / BuildKit-Optimized Dockerfile (with Maven cache)COPY --from=build /app/target/.jar app.jar
- Docker Important Notes / Image Layering in DockerA Docker image is built layer by layer. Each instruction in a Dockerfile (FROM, COPY, RUN, etc.) creates a new immutable layer.
- Docker Important Notes / Debugging with LogsIn containers:
- Docker Important Notes / Step 0 – Your current Dockerfile (baseline)EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
- Notes App Docker Compose / Docker Composenetworks: app-network:
- Spring Boot With Mysql / Docker Composevolumes: mysql-data:
- Spring Boot With Mysql / Src / Main / Resources / Applicationjpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: formatsql: true
GCP GKE
---
- GCP GKE Steps---
- Easy Recipes Yamls / Easy Recipes DeploymentOpen lesson
- Easy Recipes Yamls / Easy Recipes HPAOpen lesson
- Easy Recipes Yamls / - path: /infoOpen lesson
- Easy Recipes Yamls / Easy Recipes ServiceOpen lesson
Helm Charts
Structured topics designed to be completed in sequence.
- Ecom App Chart / ChartOpen lesson
- Ecom App Chart / ValuesreplicaCount: 2
- Ecom App Chart / Templates / DeploymentOpen lesson
- Ecom App Chart / Templates / ServiceOpen lesson
- Inventory Order Chart / ChartOpen lesson
- Inventory Order Chart / Default values for inventory-order.nameOverride: "" fullnameOverride: ""
- Inventory Order Chart / Templates / Part Gateway DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Gateway ServiceOpen lesson
- Inventory Order Chart / Templates / Part Inventory DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Inventory ServiceOpen lesson
- Inventory Order Chart / Templates / Part Order DeploymentOpen lesson
- Inventory Order Chart / Templates / Part Order ServiceOpen lesson
- Nginx Chart / ChartOpen lesson
- Nginx Chart / Default values for nginx-chart.podSecurityContext: {} fsGroup: 2000
- Nginx Chart / Templates / DeploymentOpen lesson
- Nginx Chart / Templates / Servicespec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: {{ .Values.image.containerPort }} protocol: TCP name: http selector: app: {{ .Release.Name }}
- Product App Chart / ChartOpen lesson
- Product App Chart / Valuesimage: repository: ram1uj/easy-recipes pullPolicy: Always tag: "latest" containerPort: 8080
- Product App Chart / Templates / DeploymentOpen lesson
- Product App Chart / Templates / ServiceOpen lesson
Ingress
Ingress is a Kubernetes resource that manages external access to your cluster’s services, typically over HTTP/HTTPS.
- What is Ingress in Kubernetes?Ingress is a Kubernetes resource that manages external access to your cluster’s services, typically over HTTP/HTTPS.
- Apps / readinessProbe:Open lesson
- Apps / Part Gateway ServiceOpen lesson
- Apps / Part Inventory DeploymentlivenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 0 periodSeconds: 10 failureThreshold: 3
- Apps / Part Inventory ServiceOpen lesson
- Apps / Part Order DeploymentOpen lesson
- Apps / Part Order ServiceOpen lesson
- Gateway API On GKE / GatewayOpen lesson
- Gateway API On GKE / weight: 90Open lesson
- Ingress On GKE / ingressClassName: "gce"Open lesson
Intro And Architecture
Kubernetes has a modular architecture consisting of various components that work together to manage containers efficiently. These components are categorized into: 1. Control Plane Components (Manage the cluster) 2. Node Components (Run the workloads)
- Kubernetes ComponentsKubernetes has a modular architecture consisting of various components that work together to manage containers efficiently. These components are categorized into: 1. Control Plane Components (Manage the cluster) 2. Node Components (Run the workloads)
- What is Kubernetes and What Problems Does It Solve?Developed by Google, Kubernetes is now maintained by the Cloud Native Computing Foundation (CNCF).
- Important Notes on Kubernetes---
K8S Helm
Before deploying a Helm chart, it’s a good practice to debug and dry-run it to identify any potential issues.
- Debugging & Dry Running a Helm ChartBefore deploying a Helm chart, it’s a good practice to debug and dry-run it to identify any potential issues.
- What is Helm?---
- Easy Recipes Chart / ChartOpen lesson
- Easy Recipes Chart / Valuesimage: repository: ram1uj/easy-recipes pullPolicy: Always tag: "latest"
- Easy Recipes Chart / Templates / DeploymentOpen lesson
- Easy Recipes Chart / Templates / ServiceOpen lesson
- Easy Recipes Chart / Templates / Tests / Test ConnectionOpen lesson
Kubernetes Nodes
When your workloads exceed the cluster’s current capacity, some pods will enter a Pending state. The Cluster Autoscaler or Karpenter watches for this and increases the node count automatically. Similarly, when resources are underused for a certain time (default 10 minutes), the scaler removes unneeded nodes to save cost.
- What Node Autoscaling DoesWhen your workloads exceed the cluster’s current capacity, some pods will enter a Pending state. The Cluster Autoscaler or Karpenter watches for this and increases the node count automatically. Similarly, when resources are underused for a certain time (default 10 minutes), the scaler removes unneeded nodes to save cost.
- Step 1: Label Your NodesIn Kubernetes, if you have two nodes and want to schedule specific pods onto a particular node based on labels or certain properties, you can achieve that using node labels combined with either nodeSelector or nodeAffinity. Both are native scheduling mechanisms that let you control where your workload runs, but they differ in flexibility.
- Big IdeaNow we’re getting into the really interesting part of Kubernetes scheduling — this is where microservices architecture becomes intelligent.
- Example 1: Basic NoSchedule ExampleYou can taint a node so that only certain pods can run on it. For instance, if you want a node to only accept front‑end pods:
Kubernetes RBAC
In the above, user "jane" is granted permission to read pods in the "default" namespace. This gives her access limited strictly to reading pods but nothing else in that namespace.
- Core Components of Kubernetes RBAC:In the above, user "jane" is granted permission to read pods in the "default" namespace. This gives her access limited strictly to reading pods but nothing else in that namespace.
- Steps to set up RBAC for a user in the dev namespacekubectl auth can-i get pods --as=system:serviceaccount:dev:dev-user --namespace=dev
- Roles And Users / - apiGroups: [ "apps" ]Open lesson
- Roles And Users / RolebindingOpen lesson
- Roles And Users / Service AccountOpen lesson
Kustomize
Kustomize is a Kubernetes-native configuration management tool that lets you customize resource YAML files in a reusable, declarative way—without modifying the original (base) files. It was added natively into kubectl (via the -k option) starting in Kubernetes v1.14.
- What is KustomizeKustomize is a Kubernetes-native configuration management tool that lets you customize resource YAML files in a reusable, declarative way—without modifying the original (base) files. It was added natively into kubectl (via the -k option) starting in Kubernetes v1.14.
- Kustomize Example / Dev / Spring Boot DeploymentOpen lesson
- Kustomize Example / Dev / Spring Boot ServiceOpen lesson
- Kustomize Example / Prod / Spring Boot DeploymentOpen lesson
- Kustomize Example / Prod / Spring Boot ServiceOpen lesson
- Kustomize Example / Qa / Spring Boot DeploymentOpen lesson
- Kustomize Example / Qa / Spring Boot ServiceOpen lesson
Namespaces
Think of namespaces like virtual clusters inside a physical cluster.
- Kubernetes NamespacesThink of namespaces like virtual clusters inside a physical cluster.
Networking
Structured topics designed to be completed in sequence.
- Allow Frontend To BackendOpen lesson
- Default Deny PolicyOpen lesson
Persistent Volumes
---
- Kubernetes Storage and Volumes---
- Persistent Volumes in KubernetesA Persistent Volume is a pre-provisioned storage resource in the cluster. It can come from a variety of backends:
- Persistent Volume Types in Kubernetes---
- Gce PV Example / DeploymentOpen lesson
- Gce PV Example / Google Cloud Persistent DiskOpen lesson
- Gce PV Example / PVCOpen lesson
- Mysql Deployment With PV / Mysql PVOpen lesson
- Mysql Deployment With PV / storageClassName: ""Open lesson
- Mysql Deployment With PV / Mysql ServiceOpen lesson
- Mysql Deployment With PV / Mysql StatefulsetOpen lesson
Pod
To access it: bash curl http://10.244.1.12:80
- How to Access a Pod Using Its IP Address?To access it: bash curl http://10.244.1.12:80
- Podspec: containers: - name: easy-recipes-container image: ram1uj/easy-recipes:latest ports: - containerPort: 8080
- Liveness ProbeKubernetes provides three types of probes to monitor and manage the health and readiness of containers in a pod:
- Spring Boot With Sidecarvolumes: - name: shared-logs emptyDir: {}
Scaling And Rolling Updates
Cluster Autoscaler is a Kubernetes component that automatically adds or removes nodes in a cluster based on pod scheduling needs.
- What is a Cluster Autoscaler?Cluster Autoscaler is a Kubernetes component that automatically adds or removes nodes in a cluster based on pod scheduling needs.
- Kubernetes Rolling Updates & Horizontal ScalingIn Kubernetes, Rolling Updates and Horizontal Scaling are essential mechanisms for managing deployments with minimal downtime and optimal resource usage.
Services
Normally, a Kubernetes Service provides a single virtual IP (ClusterIP) and load balances traffic across pods.
- What is a Headless Service?Normally, a Kubernetes Service provides a single virtual IP (ClusterIP) and load balances traffic across pods.
- 1. apiVersion: v1Here's a detailed breakdown of your Kubernetes Service YAML file:
Stateful Sets
Structured topics designed to be completed in sequence.
- How to access:Open lesson
- MongoDB StatefulsetOpen lesson
- How Does Replication Actually Get Set Up?There are only 3 real ways in practice.
- Mysql StatefulsetOpen lesson