Generated by All in One SEO v4.9.10, this is an llms.txt file, used by LLMs to index the site. # cloudyuga.guru ## Sitemaps - [XML Sitemap](https://cloudyuga.guru/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [AI-Powered Recipe Generator: Cook Delicious Dishes with What You Have!](https://cloudyuga.guru/blogs/ai-powered-recipe-generator-cook-delicious-dishes-with-what-you-have/) - Cooking can be fun, but figuring out what to make with the ingredients in your kitchen can be tricky. That’s where our Recipe Generator comes in! This smart application uses AI to help you create delicious recipes based on the ingredients you already have. In this showcase, we’ll share how this application works and how - [Securing AI Applications with LlamaGuard](https://cloudyuga.guru/blogs/securing-ai-applications-with-llamaguard/) - LLM-based Input-Output Safeguard for Human-AI Interaction As artificial intelligence becomes increasingly integrated into everyday interactions, ensuring the safety and ethical use of AI systems is crucial for building trust, safeguarding users, and promoting responsible innovation. A key concern in AI deployment is preventing harmful, inappropriate, or unsafe content from being generated, particularly in applications where - [Real-Time Data Streaming with AWS Kinesis](https://cloudyuga.guru/blogs/real-time-data-streaming-with-aws-kinesis/) - In today's data-driven world, the ability to process and analyze information in real-time has become a game-changer. AWS Kinesis is a powerful service designed to enable developers to collect, process, and analyze real-time, streaming data efficiently. In this blog, we will explore the features of AWS Kinesis and walk you through a hands-on demo showcasing - [Simplifying Data Workflows: A Deep Dive into ETL](https://cloudyuga.guru/blogs/simplifying-data-workflows-a-deep-dive-into-etl/) - In today’s data-driven world, businesses generate large amounts of raw data daily. Transforming this raw data into meaningful insights requires effective data processing workflows, where ETL (Extract, Transform, Load) plays a crucial role. ETL simplifies the movement and transformation of data, empowering organizations to make informed decisions and gain a competitive edge. This blog dives - [Mastering Data Transformation with AWS Glue and Query using Athena](https://cloudyuga.guru/blogs/mastering-data-transformation-with-aws-glue-and-query-using-athena/) - In the era of large-scale data, organizations are collecting vast amounts of information from various sources. However, raw data is often unstructured and messy, making it challenging to extract valuable insights. Data transformation tools are essential for cleaning, organizing, and preparing data for analysis. Amazon Web Services (AWS) offers two powerful tools, AWS Glue and - [Cloud Computing for Large-Scale Data Analytics On AWS](https://cloudyuga.guru/blogs/cloud-computing-for-large-scale-data-analytics-on-aws/) - In today’s data-driven world, organizations collect massive amounts of data daily. Analyzing this data is crucial for gaining actionable insights, predicting trends, and making data-informed decisions. While traditional on-premise setups have been instrumental in large-scale data analytics, they present significant challenges as data volume and complexity grow. The shift to cloud computing has revolutionized data - [Setup K8s cluster on Azure](https://cloudyuga.guru/blogs/setup-k8s-cluster-on-azure/) - Kubernetes (K8s) has become the industry-standard platform for container orchestration, offering efficient management of containerized applications. Microsoft Azure offers a managed Kubernetes service called Azure Kubernetes Service (AKS), which simplifies the deployment, scaling, and management of Kubernetes clusters. Let’s roll up our sleeves and dive into the process of creating a Kubernetes (K8s) cluster on - [Understanding Ingress in AKS](https://cloudyuga.guru/blogs/understanding-ingress-in-aks/) - Kubernetes is a powerful tool for managing containerized applications at scale, and Ingress plays a crucial role in controlling external access to your services. In this blog, we'll dive deep into Ingress in Azure Kubernetes Service (AKS), why it's essential, and how to configure it, including setting up NGINX Ingress Controllers, using Azure's Application Routing - [Dynamic Secret Management in Azure](https://cloudyuga.guru/blogs/dynamic-secret-management-in-azure/) - In cloud-native applications, securely managing and updating secrets like API keys, passwords, and connection strings is vital. Manually updating secrets in your application every time they change can be challenging and error-prone. This is where dynamic secret management comes into play, allowing real-time secret updates from a central, secure store. This blog covers implementing dynamic - [Streamlining Application Monitoring and Insights with Azure Application Insights](https://cloudyuga.guru/blogs/streamlining-application-monitoring-and-insights-with-azure-application-insights/) - In today’s cloud-centric world, effective monitoring is key to maintaining the health of any application. Azure Application Insights (App Insights) is a powerful tool that helps developers gain real-time insights into their applications' performance and usage patterns. Whether you’re running applications in the cloud, on-premise, or in a hybrid environment, App Insights offers actionable insights - [How to manage secrets in Azure?](https://cloudyuga.guru/blogs/how-to-manage-secrets-in-azure/) - In today’s cloud-driven world, managing sensitive information such as API keys, passwords, and connection strings securely is crucial to ensure the security and reliability of your applications. Azure Key Vault offers a robust, centralized solution for managing secrets, encryption keys, and certificates. In this guide, we will explore how to manage secrets in Azure using - [Growing Old Together - K8s 10th Birthday](https://cloudyuga.guru/blogs/growing-old-together-k8s-10th-birthday/) - Few days back on 6th June'24 Kubernetes became 10 year Old and of course we all aged as well :). To be honest because of Kubernetes I could sail through my entrepreneurial journey so far and looking for many years together. Though I have not contributed much at the code front but did my bit - [GenAI Demos: Text and Text-to-Image Generation](https://cloudyuga.guru/blogs/genai-demos-text-and-text-to-image-generation/) - In our previous post, we discussed how training models can be both costly and time-consuming. This task is typically handled by major companies such as OpenAI, Google, and Facebook. However, we can use LLM (Large Language Model) models to develop our own applications. Experiment With OpenAI’s ChatGPT Application Click on ChatGPT and sign up to - [Beyond Boundaries: The Artistry of Generative AI](https://cloudyuga.guru/blogs/beyond-boundaries-the-artistry-of-generative-ai/) - Currently, AI is booming in the IT industry. Everyone is talking about AI and wants to get the most out of it as AI’s transformative potential simplifies human tasks and extends its influence across various sectors. In this introductory post, we'll learn fundamental concepts behind GenAI, uncovering how machines learn to understand and generate data, - [Bengaluru Kubernetes Meetup - May'24](https://cloudyuga.guru/blogs/bengaluru-kubernetes-meetup-may24/) - After a long time I spoke at the Bengaluru Kubernetes Meetup last weekend. It was attended by close 150+ people at the Red Hat Office. There were talks on GitOps, CI/CD, KEDA and Ingress. I gave a talk on CNCF and AI, in which I summarised the Cloud Native Artificial Intelligence whitepaper; which was published in - [Cloud Native and Artificial Intelligence](https://cloudyuga.guru/blogs/cloud-native-and-artificial-intelligence/) - We all know that using the Cloud Native method is the most effective way to manage Web Applications on a large scale. With the help of both public and private clouds, we have addressed all possible issues such as hardware availability, ability to grow, networking, storage, and managing multiple users, which may arise with these - [Machine Learning on Kubernetes - Containerizing a Model](https://cloudyuga.guru/blogs/machine-learning-on-kubernetes-containerizing-a-model/) - In the 3rd session of "Machine Learning on Kubernetes" Book Club session we discussed how we can take a machine learning model and containerize it. You can find more details about the series and previous two recording here. We started the session by doing the quick review of Machine Learning and then looked a basic - [Machine Learning on Kubernetes](https://cloudyuga.guru/blogs/machine-learning-on-kubernetes/) - As a part of Kubernetes Book Club initiative we are currently exploring Machine Learning on Kubernetes. For reference we are using the book Machine Learning on Kubernetes but also planing to cover additional content to make sure we all understand all the basics and apply them in real-work scenarios. With our discussion in book club - [Empowering Data Science: Running Jupyter Notebooks at Scale with Kubernetes](https://cloudyuga.guru/blogs/empowering-data-science-running-jupyter-notebooks-at-scale-with-kubernetes/) - Introduction In today's data-centric landscape, organizations are constantly seeking innovative ways to extract insights and drive decision-making processes. Jupyter Notebooks have emerged as essential tools for data scientists, offering an interactive environment for data exploration, visualization, and analysis. However, as data volumes grow and computational demands increase, the need for scalable and efficient infrastructure becomes - [Container Runtimes and runC](https://cloudyuga.guru/blogs/container-runtimes-runc/) - To know about the building blocks for containers and container runtimes Nowadays containers are becoming the default choice to deploy applications. Containers are created using Containers Runtimes like Containerd, cri-o, Docker, etc. We run our applications in an isolated environment such that applications have their own independent identity like hostname, IP Address, etc. In this hands-on lab, we are going - [Kubernetes: Deployments vs StatefulSets vs DaemonSets](https://cloudyuga.guru/blogs/deployments-vs-statefulsets-vs-daemonsets/) - To understand different workload resources in Kubernetes Kubernetes (K8s) is one of the popular open-source container orchestration systems for automating deployment, scaling, and management of containerized applications. Kubernetes provides a basic resource called Pod. A pod is the smallest deployable unit in Kubernetes which has a collection of containers. As a pod can have one or more containers so different configurations can - [Introduction and Setting Up Devtron](https://cloudyuga.guru/blogs/devtron-introduction/) - Get to know about Devtron tool and how to set it up in a Kubernetes cluster Nowadays, Kubernetes has been widely used as an orchestrator and multiple open-source tools can be integrated with it for monitoring, debugging, automating workflows, and so on. But using and managing all these tools together with Kubernetes is difficult. So, - [Introduction to Prometheus & Types of Metrics](https://cloudyuga.guru/blogs/prometheus-introduction/) - Get started with Prometheus, its features, components and different type of metrics Overview Metrics is a way to measure something. The metrics provide an insight into the performance, and then based on these insights, we can take decisions to improve the infrastructure. There are many tools that are available for monitoring like AppDynamics, Datadog, New - [Revisiting Container Image Builds Inside a Container](https://cloudyuga.guru/blogs/container_image_builds_inside_container_with_kata/) - More flexibility and Improved Isolation using Kata Containers A commonly used approach to build container images as part of the DevOps pipeline is to use a builder image running in a Kubernetes cluster. The builder image leverages either docker or kaniko or buildah. With Kata containers maturing into a production-ready container runtime and subsequent increase in uptake, it presents a great - [Hugo On Kubernetes](https://cloudyuga.guru/blogs/hugo-on-kubernetes/) - To learn how to deploy a blogging website using Hugo on Kubernetes Hugo is one of the most popular open-source Static Site Generator (SSG) frameworks written in Go. It allows developers to build fast HTML websites by combining content and templates. Visit the official documentation of Hugo to know more about it.In this blog, we will see how - [Setting Up Grafana with Prometheus](https://cloudyuga.guru/blogs/grafana-intro/) - Grafana is an interactive web application used to monitor our systems. Grafana is open-source analytics and monitoring software. It helps to create, explore and share the data using the dashboards. It helps us to query, visualize and understand the data. In this hands-on lab, we will set up Grafana and add Prometheus as a data source to it. You can refer to the - [Introduction To KEDA](https://cloudyuga.guru/blogs/keda-intro/) - To learn about Kubernetes Event-Driven Autoscaling (KEDA) Autoscaling is one of the important features of Kubernetes and Horizontal Pod Autoscaler (HPA) comes to mind when pods need to be scaled on the basis of CPU and memory consumption. You can find out more about autoscaling and HPA through our Autoscaling in Kubernetes hands-on lab. HPA is a - [Git and GitHub Workshop at DSATM](https://cloudyuga.guru/blogs/git-and-github-workshop-at-dsatm/) - In the first week of February'24 I delivered a 2 days workshop on Git and GitHub at the Dayananda Sagar Academy of Technology and Management. It was attended by around 60 students from 2nd Year of the Data Science Branch. During the workshop we covered the course content from the Cloud Engineer's Bootcamp. We covered - [Progressive Delivery with Argo Rollouts](https://cloudyuga.guru/blogs/argo-rollouts-workshop/) - This session will help audience to understand what is Progressive Delivery and how we can achieve it using Argo Rollouts https://docs.google.com/presentation/d/e/2PACX-1vRdaSXbu519CSLtECR8r5NesSCs6Ngd0YKKHbGq4_nArP4-RY6P_CSsbWXQUz_p3Uqj0OSacBbbmhmQ/embed?start=false&loop=false&delayms=3000 Hands-On lab steps: Clone the Argo Rollouts example GitHub repo or preferably, please fork this git clone https://github.com/NiniiGit/argo-rollouts-example.git Install Helm3 as it would be needed later during the demo curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 - [Progressive Delivery With Argo Rollouts : Canary & Traffic Management (Part 4)](https://cloudyuga.guru/blogs/canary-traffic-nginx/) - Canary with Traffic Management using Nginx Controller In Part 3 of Argo Rollout, we have seen the Canary deployment strategy with analysis and deployed a sample app using the Argo Rollout controller in the Kubernetes cluster. In this hands-on lab, we will be going to explore the canary deployment strategy with traffic management using the Nginx controller via - [Install a local Kubernetes with Microk8s](https://cloudyuga.guru/blogs/microk8s/) - Getting started with Microk8s Single-node deployments of Kubernetes are more common than one would expect. In some scenarios, single-node clusters make much more sense. For development or testing purposes, there’s no need to deploy a full production cluster. So, to solve this trouble, we have MicroK8s, a tool by Canonical. In this hands-on lab, we will - [AutoScaling in Kubernetes](https://cloudyuga.guru/blogs/autoscaling-k8s/) - To know about autoscaling and its types in Kubernetes Allocating resources to pods running inside the Kubernetes cluster is challenging as it gives rise to the questions such as how much CPU and RAM to allocate to pods for high performance and how to create enough replicas of these pods to handle the incoming load. For - [Progressive Delivery With Argo Rollouts : Blue-Green Deployment (Part 1)](https://cloudyuga.guru/blogs/blue-green-deploy-argorollout/) - To understand about blue-green deployment with Argo Rollouts Continuous Integration(CI) and Continuous Delivery(CD) have been widely adopted in modern software development, enabling organizations to deploy this software to customers quickly. But doing it correctly is essential as, in some cases, unfinished code can lead to failures, and customers have to face downtime. So to solve - [Build a Container Image from Source-Code using S2I and Push It to a Registry](https://cloudyuga.guru/blogs/s2i-container/) - Build a Container Image from Source-Code using S2I and Push It to a Registry Recently, while drafting an OpenShift solution tutorial, I explored an interesting tool called S2I (Source-to-Image). In this post, you will learn how to create a container image directly from your source code and push the generated container image to a registry. What - [Update Multiple Lines in a YAML file with Kubectl](https://cloudyuga.guru/blogs/kubectl-patch/) - Update multiple lines in a YAML file with kubectl Whenever I need to update a YAML file, the first thing that comes to mind is to either use sed or awk or perl etc., But there's an in-house kubectl patch option that simplifies the experience. Lab With Kubectl Patch As we triggered the lab through the LAB SETUP button, a terminal, and an IDE comes for - [Introduction To Kata Containers](https://cloudyuga.guru/blogs/introduction-to-kata-containers/) - To learn how to provide more isolation and security to containers Container technology has been widely adapted for packaging applications inside the container to make it portable on various platforms and infrastructures. Today different containerization platforms have been developed which follow Open Container Initiative(OCI) standards like Containerd and so on. This portable characteristic of containers makes them - [Playing with k0s](https://cloudyuga.guru/blogs/playing-with-k0s/) - To get an introduction to k0s by setting up a single-node kubernetes cluster k0s is a Kubernetes distribution released at end of 2020. k0s is shipped as a single binary without any OS dependencies. It is thus defined as a zero-friction/zero-deps/zero-cost Kubernetes distribution. The latest k0s release: ships a certified and CIS-benchmarked Kubernetes (1.20 / 1.21 / 1.22 versions available) - [Vault In Kubernetes With Sidecar Injection](https://cloudyuga.guru/blogs/vault-sidecar-injector/) - To know how to inject secrets into the kubernetes pods via vault agent sidecar injector Keeping Kubernetes secret a secret (secure) is one of the challenges an organization faces as these secrets are only encoded and not encrypted by default at REST. These secrets are stored in ETCD, a key/values store with all the Kubernetes configurations. Creating a Kubernetes secret - [Is Kubernetes Secrets…. A Secret?](https://cloudyuga.guru/blogs/hack-k8s-secrets/) - To know how one can get access to Kubernetes secrets In the previous blog, we saw how etcd works with Kubernetes and how to access etcd. Now we will be learning how etcd stores secrets and can one can access those secrets or not? As we know containerized applications running in Kubernetes almost always need some - [Kubectl Tips & Tricks](https://cloudyuga.guru/blogs/kubectl-cmds/) - To get familiar with kubectl and improve productivity with its useful commands For anyone who learns and works with Kubernetes, its CLI kubectl becomes one of the essential tools to know as to interact with the cluster. Kubectl is a command-line tool that is used to communicate with the Kubernetes control plane via a Kubernetes API. As Kubernetes API is - [eBPF - An Overview](https://cloudyuga.guru/blogs/ebpf-intro/) - Why should everyone care about eBPF? Using eBPF, we can now program the Linux Kernel dynamically and get insights, which was not easily possible earlier or were very expensive . It is changing the game in the system's side the way JavaScript helped us bring everything on the browser. There are now many emerging use-cases - [eBPF - An Overview](https://cloudyuga.guru/blogs/ebpf-intro-2/) - Why should everyone care about eBPF? Using eBPF, we can now program the Linux Kernel dynamically and get insights, which was not easily possible earlier or were very expensive . It is changing the game in the system's side the way JavaScript helped us bring everything on the browser. There are now many emerging use-cases - [Progressive Delivery With Argo Rollouts : Canary Deployment (Part 2)](https://cloudyuga.guru/blogs/canary-deploy/) - To understand about canary deployment with Argo Rollouts In Part 1 of Argo Rollout, we have seen Progressive Delivery and how you can achieve the Blue-Green deployment type using Argo-Rollouts. We also deployed a sample app in the Kubernetes cluster using it. Read and try hands-on lab in the first part of this Progressive Delivery lab series if - [Learning about Linux namespaces in #docker and #kubernetes !](https://cloudyuga.guru/blogs/namespaces/) - A practical walkthrough in exploring namespaces in relation to docker and kubernetes. As you probably know, containers running on the same host, share the Linux kernel. That’s why a container image does not contain a kernel, only software and tools that make up a distro like for example a package manager. So, if containers share - [How to TCPdump effectively in Docker !](https://cloudyuga.guru/blogs/how-to-tcpdump-effectively-in-docker/) - An introduction and references for tcpdump troubleshooting in kubernetes. - [Containerize ReactJS Application With NodeJS](https://cloudyuga.guru/blogs/react-node-docker/) - This hands-on lab will show you how to containerize a ReactJS application with a NodeJS Docker container. Pre-requisites for this hands-on lab, The learner must have some basic knowledge about Running build for a reactjs application to generate static contents Linux OS, Text editors like vi, nano or visual code (supported in this lab) Docker - [How to TCPdump in Kubernetes !](https://cloudyuga.guru/blogs/how-to-tcpdump-in-kubernetes/) - An introduction and references for tcpdump troubleshooting in kubernetes. - [The Rise in the Adoption of Cloud-Native Technology and the Growing Demand for Cloud-Native Engineers in 2022:](https://cloudyuga.guru/blogs/rise-in-the-adoption-of-cloud-native-technology/) - In this blog we covered the demand for Cloud Native Engineers with latest job survey reports. Cloud is rapidly taking over traditional servers and database systems. And the world is clever not to miss recognizing it — the top companies acknowledged the vitality of cloud-based applications and began investing in cloud technology. Due to the - [Build, Ship and Deploy static website with Docker](https://cloudyuga.guru/blogs/build-ship-and-deploy-static-website-with-docker/) - Building the static web app docker image, ship the image to Docker Hub and deploy app with Docker In this hands-on lab, we will try to build the docker image of static website, ship the image to Docker Hub and then deploy the app with Docker After going through this hands-on lab, you will gain - [Understanding Docker Image Optimization: Techniques for Effective Deployment](https://cloudyuga.guru/blogs/understanding-docker-image-optimization-techniques-for-effective-deployment/) - To build, manage and ship the docker image easily and occupy less space when pulled locally Docker engine makes it possible to take a piece of code with all its dependency and run in a container using its image. The whole concept of image is based upon Dockerfile, a configuration file to build an image. It is - [Containerd and ctr](https://cloudyuga.guru/blogs/containerd-and-ctr/) - To learn how to work with container images and containers using containerd In container runtime and runC hands-on lab, we have looked at the evolution of containers and their use cases with runC implementation. But with the help of runC, we can only create one container. If we have to manage multiple such runC containers we have - [Top Advanced Linux Commands: Way To become an administrator](https://cloudyuga.guru/blogs/top-advanced-linux-commands-way-to-become-an-administrator/) - If you want to solve administrative levels of problems, and want information about processes, this hands-on lab, will help you learn the Advanced level of commands to understand the system and solve issues in an effective manner. reference-link How advanced linux commands are important for admin? The task of a system administrator is to make - [SubPath In Kubernetes Volumes](https://cloudyuga.guru/blogs/subpath-in-kubernetes-volumes/) - Understanding Subpath with Kubernetes Volumes - [Manage Docker As Non-Root User](https://cloudyuga.guru/blogs/manage-docker-as-non-root-user/) - Learn how to run Docker Commands as non-root users - [Meetup: K8s in Production & Cost Reduction when running it on Cloud](https://cloudyuga.guru/blogs/k8s-prod-cost-reduction/) - Event report: Online Meetup to discuss about k8s challenges while running it in production and how to reduce the cost when deploying in production Last week on 12th July'22 we did online meetup of K8s and CloudNative Meetup . Following was the agenda of the meetup :- 7:30 PM - 7:40 PM IST - Welcome and Introduction - [Different ways to debug your Kubernetes apps](https://cloudyuga.guru/blogs/debug-k8s-apps/) - To learn about the different ways to debug your Kubernetes applications This blog will briefly discuss what I typically use for debugging Kubernetes apps. I hope you will find it helpful too. Exploring different ways to debug Kubernetes apps In this section, we will be going through some of the ways like kubectl exec, sharing namespaces, - [Need specific kernel settings for your Kubernetes POD?](https://cloudyuga.guru/blogs/k8s-pod-kernel/) - A low-risk approach for Developers and Administrators Linux provides the sysctl mechanism to modify the kernel behavior at runtime. There are many situations where this is desired. For example, tuning the kernel to run high-performance computing apps, configuring the application core dump settings, modifying network settings, experiments, etc. Sysctl settings can be grouped into two categories: Namespaced: these - [werf: deploy apps to Kubernetes](https://cloudyuga.guru/blogs/werf-deploy/) - Learn how to easily deploy applications to Kubernetes using werf, a powerful open source tool. In this lab, you will build a container image with an example application, deploy it to Kubernetes, and modify the configuration and code of the deployed application. We will use a tiny shell script as a demo. It returns pong - [Core Dumps with Kata Containers](https://cloudyuga.guru/blogs/coredump-kata/) - To learn about core dump with kata containers In the previous blog, we discussed the use of Kata containers for building isolated dev and build environments. In this hands-on lab, let’s take things a step further by discussing how to handle core dumps with Kata containers. There are a variety of reasons why you may need to analyze an application - [CloudYuga's Cloud Engineer Bootcamps](https://cloudyuga.guru/blogs/cy-cloud-engineer-bootcamp/) - Hands-on program to make the participants Internship/Job ready in 3 months If I look around in my circle everyone is hiring but they keep complaining that they are not getting good candidates. On the other hand, if you look at the profiles on LinkedIN, Job sites etc we'll find a lot of buzzwords in the - [Progressive Delivery With Argo Rollouts : Canary with Analysis (Part 3)](https://cloudyuga.guru/blogs/canary-deploy-analysis/) - Canary Deployment with Analysis using Argo Rollouts Hope you have gone through and enjoyed the first two parts of our progressive delivery with the Argo Rollout series, where we have seen how one can implement the blue-green and canary deployment strategy by deploying a sample application using the Argo Rollout controller in a Kubernetes cluster. In Part 3 of this series, we - [Learn Kubernetes operator by a real world example!](https://cloudyuga.guru/blogs/k8s-operator/) - Full Hands-on experience learning Kubernetes Operators + explanations | Simple & intuitive explanations to grasp key concepts | Real world example to get you going right away! What is a Kubernetes Operator? A Kubernetes Operator is an abstraction for deploying non-trivial applications on top of Kubernetes, behind Kubernetes APIs. The Kubernetes Operator attempts to wraps the logic for deploying - [Kubernetes Tip: How To Gracefully Handle Pod Shutdown?](https://cloudyuga.guru/blogs/k8s-grace-period/) - To know about graceful termination of pods and difference between SIG-TERM and SIG-KILL for container deletion. Shutting down an application Pod is as important as starting it up. We need to release all of the resources used by the application and process in-progress requests etc. Proper shutting of applications helps in reducing chances of request failure.There - [Introduction to Confidential Containers](https://cloudyuga.guru/blogs/confidential-containers/) - Get familiar with Kata containers based Confidential Containers stack Confidential Containers (CoCo) is a CNCF sandbox project which aims to integrate existing Confidential Computing (CC) infrastructure support and technologies with the cloud-native world. The following references are a good read: Confidential Containers Overview Confidential Containers Architecture Awesome Confidential Computing In this lab, we’ll be deploying the - [How does Kubernetes assign QoS class to pods through OOM score?](https://cloudyuga.guru/blogs/k8s-qos-oomkilled/) - To know about the concept of Linux's OOMKilled and how it helps Kubernetes to define a Quality of Service (QoS) class for its pods. Most Kubernetes users would have encountered OOMKilled at least once. When OOMKilled occurs, we tend to recalibrate the pod’s QoS or move the pod to a different node thinking there is a memory issue with - [Kubernetes native network policies from zero to hero!](https://cloudyuga.guru/blogs/network_policies_k8s/) - Kubernetes native network security policies by example. The Kubernetes network model is a “flat” network design. This means that all pods on one node can communicate freely with all pods on all the other nodes without being address translated, or blocked.The networking is implemented by a CNI (Container Networking Interface). Examples of popular CNI's are Cilium, Calico, kubenet, - [Docker Image Analysis Tools: To Maximize the Efficiency and Minimize the Size](https://cloudyuga.guru/blogs/docker-image-analysis-tools-to-maximize-the-efficiency-and-minimize-the-size/) - A Detailed Exploration of Open Source Tools for Precise Image Analysis There are different kinds of analysis tools available to find out the way to minimize the size of docker image. These tools are used to analyze and explore the image contents layer by layer. It discovers duplicate files, shows image efficiency score, information about wasted space, inefficient - [Inside the Containerization Maze: Running Docker Within Docker Containers](https://cloudyuga.guru/blogs/how-to-run-docker-in-docker/) - Simplifying Development and Deployment with Isolated Docker Environments Docker is a platform that simplifies application development, shipping, and deployment processes using containerization. However, what if we can go one step ahead and enclose Docker itself inside a container as Docker allows the layer of containerization. Explore the ways of setting up a confined environment for Docker - [Kubernetes + Cloud Joint Meetup - Nov'22](https://cloudyuga.guru/blogs/k8s-cloud-joint-meetup22/) - Event report of the Nov'22 joint meetup along with presentations & recording If you do a poll or ask anyone about what is the best way to learn and meet like minded people; everyone would answer that the physical in-person meetings are best. In the Bengaluru tech community we have been missing that for a - [MERN Stack Deployment on Docker](https://cloudyuga.guru/blogs/mern-docker/) - To understand about deploying MERN stack using docker MERN is a short form for MongoDB, Express, ReactJS and NodeJS. It represents a full-stack application. Each component in this stack has its usage given below, MongoDB: A NoSQL document DB that stores data in the form of JSON. As most of the application uses JSON form of the - [First Bootcamp Graduation](https://cloudyuga.guru/blogs/first-bootcamp-graduation/) - Learning and experience of running two bootcamps We introduced our bootcamp program last year and I am happy to announce that 2 of the cohorts have graduated recently. It took more than 3 months (which was earlier planned) but all good things take time :). It had been an eventful journey for the entire team and there - [10 Part Webinar Series to Understand Cloud Building Blocks](https://cloudyuga.guru/blogs/cloud-building-blocks-webinars/) - Webinar series to understand different building blocks of cloud and create a private cloud from scratch As the demand for cloud computing continues to grow, the need for skilled cloud engineers has become more pressing than ever. Companies across the world are turning to cloud services to streamline their operations and reduce costs. According to Gartner, - [Top Basic Linux Commands That You Must Know](https://cloudyuga.guru/blogs/linux-top-basic-commands/) - To learn the basic and useful commands of Linux that will help you to monitor and control the system in an efficient manner To use Linux in an effective manner, you can use a terminal(command line) that gives you control over the operating system services. To use a command line for more control and quicker execution of - [Docker Compose: A hassle-free way to optimize multi-container deployments](https://cloudyuga.guru/blogs/docker-compose/) - To define and run multi-container Docker applications with the help of services define in the YAML file and start them with a single command and improve your productivity. An application can have multiple containers running different services. which could have both frontend and backend services. It may be annoying and time-consuming to manage containers manually - [GitOps with ArgoCD and FluxCD](https://cloudyuga.guru/blogs/gitops-argocd-fluxcd/) - GitOps implementation with ArgoCD and FluxCD Before moving ahead with hands-on, let's first make sure to have the following things in place: Pre-requisite: 1. Hope you have access to your personal Github account 2. hope you had generated personal access token PAT key for yourself to access your repositories from your GitHub and store it somewhere (don't share - [Exploring Kubernetes Kubeconfig File](https://cloudyuga.guru/blogs/exploring-kubernetes-kubeconfig-file/) - A Comprehensive Guide for Developers and DevOps to understand Kubernetes Kubeconfig File Kubernetes has become one of the most popular orchestration tools. To interact with it, kubectl CLI is used. And to configure access to the cluster, a kubeconfig file is used. In this hands-on lab, we will dive deep into the kubeconfig file. What is Kubeconfig File? The - [A Practical Approach to Understanding Kubernetes Authentication](https://cloudyuga.guru/blogs/k8s-authorization/) - Understanding Kubernetes Authentication - By Janakiram MSV In a production environment, Kubernetes administrators use namespaces to isolate resources and deployments. Namespaces act as a logical boundary to enforce basic access control. Let’s say we have Bob, new admin that joined the DevOps team to manage the Kubernetes deployments for the engineering group. We now have - [Unlocking Container Sequencing: Embracing Kubernetes' Native Sidecar](https://cloudyuga.guru/blogs/k8s-1-28-native-sidecar-container/) - Managing Pod-Based Smooth Workflow Orchestration and Functionality Extension Kubernetes is a standard for container orchestration in the industry. Traditionally, We use a multi-container design pattern to extend the main container’s functionality but can’t control the order of container execution. Let’s understand with a scenario, If the proxy container for logging will start after the main - [Improving Kubernetes Audit Logs: Parseable Integration Tactics](https://cloudyuga.guru/blogs/audit-logs-in-parseable/) - Simplifying Cluster Security and Oversight by Using Vector Agents Kubernetes has become the standard container orchestration tool for microservice-based deployments and managing large business applications. As Kubernetes has so many features, using and managing it can be difficult, especially keeping track of activities in the cluster. The main goal of this hands-on lab is to - [Git Cheat Sheet: Commands To Track And Manage Your Project](https://cloudyuga.guru/blogs/git-cheat-sheet/) - This blog will help you to learn the basic commands of Git & GitHub that you must know which will help you to maintain the versions of projects and control the progress of projects in an efficient manner. When you are building a small or big project in a team, Git and GitHub are essential tools for the progressive - [Kubernetes vs Docker](https://cloudyuga.guru/blogs/docker-vs-kubernetes/) - Kubernetes vs Docker: Why not Both? In this article, we will discover the most widely used tools in the modern cloud-native container ecosystem: Docker and Kubernetes. Though Docker and Kubernetes are often used together, the most common question asked is Kubernetes or Docker. The answer is neither. Our comprehensive will give you a better understanding and help - [Kubernetes YAML Template](https://cloudyuga.guru/blogs/tvr6k/) - Exploring Kubernetes YAML Template to better understand and work with YAML manifests YAML ( YAML Ain’t Markup Language) is a human readable data serialisation language used to create configuration files with any programming language. Kubernetes is an open source container orchestration system that uses YAML configuration files also known as manifests used to deploy different resources in Kubernetes - [Intro To Kubebuilder and Deep Dive](https://cloudyuga.guru/blogs/kubebuilder-intro/) - Creating a custom operator from scratch in kuberentes can be tedious and involves dealing with Kubernetes API to create, watch, update objects etc. It involves a steep learning curve with lots of complexity to handle. Many tools and SDKs help automate tasks with the help of libraries like client-go and controller runtime. And one of the most popular - [Unveiling Sidecar Containers in Kubernetes](https://cloudyuga.guru/blogs/unveiling-sidecar-containers-in-kubernetes/) - To extend the functionality of the application container in the Kubernetes pod A Sidecar pattern can separate an application's functionalities into different processes. With the help of the sidecar design pattern, we may expand the functionality of the main application without modifying its codebase. From a software point of view, a sidecar is attached to a core application - [Kubernetes Logging Essentials](https://cloudyuga.guru/blogs/kubernetes-logging-essentials/) - Exploring different kinds of Kubernetes Logs and the Logging Pipeline Kubernetes, an open-source container orchestrator, is designed to manage and deploy applications at scale. While working with Kubernetes, Developers and DevOps engineers should know how to troubleshoot clusters and find issues via different kind of logs. Due to its dynamic nature, it is challenging to centralize logs for - [Introduction To Parseable](https://cloudyuga.guru/blogs/parseable-intro/) - Discover and learn about Parseable , a new cloud-native log observability stack Log data has become one of the most important parts of the business, which plays an important role in its reliability and security. Previously, logs from applications and servers were saved to files on local disks. But to save space on disks from - [High Performance Log Analytics with Parseable and Vector](https://cloudyuga.guru/blogs/high-performance-log-analytics-with-parseable-and-vector/) - Efficient Strategies for Logging, Analysis, and Visualization As we live in a digital world, people want applications to be operational 24X7. To achieve that, we need to solve the issues quickly or predict the issues in advance. Hundreds of microservices and thousands of servers are working behind the scenes. If something goes wrong, then how to debug it? To track the - [Exploration of Kubernetes Metadata: Labels, Selectors, and Annotations](https://cloudyuga.guru/blogs/labels-selectors-annotations/) - A Deep Dive into Kubernetes Resource Classification and Configuration Overview Kubernetes, a container orchestrator, is designed to handle applications at scale. While working with multiple objects we may need to group them. Metadata like, labels, selectors and annotations play an important role while configuring and working with kubernetes objects. Labels and selectors are used to select - [Docker SBOM: Keeping a Check on Security Risks](https://cloudyuga.guru/blogs/docker-sbom/) - Understand SBOM and how Docker SBOM generates a list of software of the container images to prevent any threat. The Log4j vulnerability and SolarWinds supply chain attack have made us realize that software supply chains are at great risk of being targeted by attackers. The Docker SBOM helps detect these risks. Software supply chain security comprises everything required to build, deliver - [Tetragon: Empowering Kubernetes Security via Dynamic eBPF Insights](https://cloudyuga.guru/blogs/ebpf-logs-with-tetragon/) - Efficient Event Filtering and Runtime Enforcement Strategies Kubernetes has become the standard for orchestration. However, it raises the concern for organizations to secure their production environment as it doesn't offer default observability for security to examine the attacks. But eBPF solves that issue. eBPF is one of the most trendy topics in the industry people - [Autoscale Applications with KEDA and Prometheus Scalerautoscaling](https://cloudyuga.guru/blogs/autoscale-applications-with-keda-and-prometheus-scaler/) - To use Kubernetes Event-Driven Autoscaling (KEDA) along with Prometheus to scale applications in Kubernetes cluster Applications running inside the Kubernetes cluster need to be scaled according to the load it encounters with. Scaling is an important process for better performance of the application. Kubernetes provides Horizontal Pod Autoscaler (HPA) to scale applications with the help of resource - [Creating Kubernetes Cluster With CRI-O Container Runtime](https://cloudyuga.guru/blogs/creating-kubernetes-cluster-with-cri-o-container-runtime/) - Exploring CRI-O Container Runtime and how to set up a Kubernetes Cluster with it. Container Runtime Interface (CRI) is one of the important parts of the Kubernetes cluster. It is a plugin interface allowing Kubelet to use different container runtimes. And recently, CRI-O container runtime has been announced as a CNCF Graduated project. I thought of creating a hands-on - [Parseable-Enabled Tetragon Logs: Strengthening Kubernetes Security](https://cloudyuga.guru/blogs/tetragon-parseable/) - Investigating eBPF-Driven Observability in Kubernetes Environments for Sensitive File Access The container orchestration standard has been taken over by Kubernetes. However, as it doesn't offer a default observability for security to study the attacks, it raises questions about how organisations should protect their production environment. This issue is resolved with eBPF. Currently, one of the most popular - [Buildx Mastery: Elevating Docker Development Across Architectures](https://cloudyuga.guru/blogs/buildx-mastery-elevating-docker-development-across-architectures/) - "Transform Docker builds with Buildx: cross-architecture compatibility, faster workflows, and hands-on labs. Join us in shaping the future of containerization!" Docker offers an easy method of packaging and deploying applications, which is truly an amazing technology. Earlier, the developers built an image on one type of architecture and deployed it on the same kind of - [Top Key Takeaways from KubeCon NA 2023](https://cloudyuga.guru/blogs/kubecon-na-2023/) - Read about the most talked items of the KubeCon NA 2023 in Chicago A few days back, KubeCon + CloudNativeCon North America 2023 wrapped up in the windy city of Chicago, Illinois, at the McCormick Place West building. People from all around the world attended the event in person and virtually. The venue was filled with brilliant folks - [Getting Started With Hashicorp Vault](https://cloudyuga.guru/blogs/vault-intro/) - To learn about the basics of Hashicorp Vault Secrets are something that contains sensitive information required for authentication and authorization that cannot be shared publicly and has to be kept secure through encryption. As in this blog, we saw that Kubernetes secrets are not encrypted and are base64 encoded only and can be easily accessed through etcd. - [Docker Tutorial : A Complete Guide for Beginners](https://cloudyuga.guru/blogs/docker-tutorial/) - What is Docker? At its core, Docker isn't just a buzzword; it's a game-changer. It is a platform that encapsulates applications and their dependencies into lightweight, portable containers. These containers, with their self-contained environments, offer unparalleled flexibility, enabling developers to build once and run anywhere — be it on a developer's laptop, a test server, or in the cloud. - [Mastering Cloud Careers - Ebook](https://cloudyuga.guru/blogs/mastering-cloud-careers-ebook/) - I have been part of many discussions in which following questions have come up again and again :- How to get started with Cloud ? How much I can earn, if I transition into a Cloud role? What roadmap should I follow to build my career in Cloud ? I am a fresh graduate, how - [Bangalore and Pune – Free Containers (Docker) workshop](https://cloudyuga.guru/blogs/bangalore-and-pune-free-containers-docker-workshop/) - After leaving my full time job at Red Hat, I started offering some free workshops in different cities in India. After leaving my full time job at Red Hat I started offering some free workshops in different cities in India. As currently I am staying in Bangalore and stayed in Pune for 8 years before moving, I choose both - [Left Red Hat .. Again, to start something on my own](https://cloudyuga.guru/blogs/left-red-hat-again-to-start-something-on-my-own/) - Yesterday (2nd Dec 2015) was my last day at Red Hat. I left Red Hat in Dec'08 to join a startup and then joined back on Sept'12. Yesterday (2nd Dec’15) was my last day at Red Hat (again). I left Red Hat in Dec’08 to join a startup and then joined back on Sept’12 . This time I worked in the - [Report from Containers (Docker) Workshop – Chennai](https://cloudyuga.guru/blogs/report-from-containers-docker-workshop-chennai/) - After doing free workshop in Bangalore and Pune, next stop of free workshop was in Chennai which I delivered on 9th Jan 2016. After doing a free workshop in Bangalore and Pune, the next stop of the free workshop was in Chennai which I delivered on 9th Jan’16. I got few registrations for Chennai last month but after - [Second Paid Containers Workshop and Free Workshop in Kolkata](https://cloudyuga.guru/blogs/second-paid-containers-workshop-and-free-workshop-in-kolkata/) - I did my second paid workshop in Bangalore on 12th and 13th March. I had the similar count of participation as last time. I did my second paid workshop in Bangalore on 12th and 13th March. I had a similar count of participation as last time. Most of the participants had some prior experience with Linux - [LinuxCon ContainerCon 2016 - Berlin Germany](https://cloudyuga.guru/blogs/linuxcon-containercon-2016-berlin-germany-2/) - LinuxCon, ContainerCon 2016 in Berlin was very special for me, as this is the first time I represented my company [CloudYuga](http://www.cloudyuga.guru/) as a speaker in an international conference. LinuxCon, ContainerCon 2016 in Berlin was very special for me, as this is the first time I represented my company CloudYuga as a speaker at an international conference. The event - [Launching an MOOC on Container Technologies](https://cloudyuga.guru/blogs/launching-an-mooc-on-container-technologies/) - It is my pleasure to announce that CloudYuga would be launching a MOOC on container technologies on 14th Jan 2017. It is my pleasure to announce that CloudYuga would be launching a MOOC on container technologies on 14th Jan’2017. The first course is on Containers Fundamentals which we will help participants to build a solid foundation on container - [Looking forward for DockerCon 2017](https://cloudyuga.guru/blogs/looking-forward-for-dockercon-2017/) - I am very excited to attend the [DockerCon 2017 in Austin between 17th to 20th April this year](http://2017.dockercon.com). I am very excited to attend the DockerCon 2017 in Austin between 17th to 20th April this year. There are multiple reasons to:- I would be representing CloudYuga at DockerCon Ajeet and I would be doing a Docker 101 workshop for - [Launching Containers (Docker) for Developers and Quality Assurance online course](https://cloudyuga.guru/blogs/launching-docker-for-developers-and-quality-assurance-course/) - In January we launched our first our first online course on [Containers Fundamentals](http://www.cloudyuga.guru/?p=396), in which we covered Docker, RunC and Rkt. In January we launched our first online course on Containers Fundamentals, in which we covered Docker, RunC and Rkt. Today I am very happy to announce we are launching our second online course *Containers - [DockerCon 2017 & #8211; Austin](https://cloudyuga.guru/blogs/dockercon-2017-austin/) - Wow !!! It was an amazing [DockerCon 2017](http://2017.dockercon.com). After spending few days in Houston I reached to Austin on 17th April to attend the DockerCon. Wow !!! It was an amazing DockerCon 2017. After spending few days in Houston I reached Austin on 17th April to attend the DockerCon. As soon I reached I attended Docker Captains roundtable, - [CloudYuga@rootconf'17](https://cloudyuga.guru/blogs/cloudyugarootconf17/) - Rootconf is one of the India’s largest gathering of DevOps, Sysadmins, systems engineers and Site Reliability Engineers (SRE). Rootconf is one of the India’s largest gathering of DevOps, Sysadmins, systems engineers and Site Reliability Engineers (SRE). The main conference is on 11th – 12h May’17 and there are workshops on 13th and 14th May’17.Rootconf is one - [Docker Meetup Bangalore #33](https://cloudyuga.guru/blogs/docker-meetup33/) - On July 1st, we hosted [Bangalore's Docker meetup at IBM's office](https://www.meetup.com/Docker-Bangalore/events/240413454/). Around 80 participants attended the meetup. On July 1st, we hosted Bangalore's Docker meetup at IBM's office. Around 80 participants attended the meetup. Following was the agenda of the meetup :- What is Moby Project? - Neependra Khare, CloudYuga Getting started with LinuxKit? Ajeet Raina, Dell-EMC The - [Kubernetes 2nd Bithday Celebration - Bangalore](https://cloudyuga.guru/blogs/kubernetes-2nd-bday/) - On 29th July'17, we celebrated Kubernetes 2nd Bithday in Bangalore. On 29th July'17, we celebrated Kubernetes 2nd Bithday in Bangalore, in whichBangalore Mesos & CNCF User Group,Bangalore Kubernetes Meetup,Kubernetes and Openshift participated. It was hosted at the Red Hat office and around 70 people attended it. Following was the agenda of the meetup :- Overview of different - [Introduction to Kubernetes MOOC](https://cloudyuga.guru/blogs/kubernetes-mooc/) - On 10th July'17, the CNCF announced a MOOC on Kubernetes On 10th July'17, the CNCF announced a MOOC on Kubernetes - Introduction to Kubernetes, on Edx. I was fortunate to be involved in the project as an author. This my second course on Edx. In 2016 I co-authored a course on Cloud Infrastructure Technologies, for the Linux - [Instructor led online Docker and Kubernetes training](https://cloudyuga.guru/blogs/docker-kubernetes-open-batch/) - Instructor led Docker and Kubernetes training In the last few months, our focus had been to do corporate training and I think that would continue as usual. I have been getting lots of inquiries for individual and online classes. It is not that we don't want to do them but sometimes managing the logistics and - [Hiring an engineer for upstream contribution](https://cloudyuga.guru/blogs/hiring-upstream/) - cloudyuga-is-hiring-an-engineer-for-upstream-contribution-to-projects-like-docker-kubernetes-prometheus-etc After I left my full-time job, I decided to give 3 years to see if I would like to continue as an entrepreneur or would join back a company. It's been 2.5 years since then. For the first 1.5 years, things were just OK, we were able to cover our expenses. In the last - [Building Blocks to run CI/CD on Kubernetes](https://cloudyuga.guru/blogs/cicd-k8s-webinar-1/) - Building Blocks to run CI/CD on Kubernetes Building Blocks to run CI/CD on Kubernetes In this webinar, we’ll cover the basics required before diving deep into CI/CD with Kubernetes. • Introduction to Cloud Native & the landscape• Immutable Infrastructure• Docker/Container Images & Builder• Introduction to Container orchestration & Kubernetes• Custom Resource Definitions (CRD) in Kubernetes• - [Kubernetes Package Management and Cloud Native CI/CD with JenkinsX](https://cloudyuga.guru/blogs/cicd-k8s-webinar-2/) - Kubernetes Package Management and Cloud Native CI/CD with JenkinsX In this webinar, we’ll cover Kubernetes package management using Helm and one of the leading cloud-native CI/CD tools - Jenkins X, which is implemented using Kubernetes CRDs. • Recap of CI/CD• Helm• Jenkins• Jenkins X - [CI/CD Pipelines with a Service Mesh](https://cloudyuga.guru/blogs/cicd-k8s-webinar-3/) - CI/CD Pipelines with a Service Mesh In this webinar, we’ll look at how a service mesh can be used in conjunction with CI/CD pipelines • What is a service mesh• Istio service mesh• Spinnaker• CI/CD pipelines & service mesh - [CI/CD Toolsets on Kubernetes](https://cloudyuga.guru/blogs/cicd-k8s-webinar-4/) - CI/CD Toolsets on Kubernetes In this webinar, we’ll cover other useful toolsets which can be used for CI/CD. • GitLab• Argo• GitOps• CircleCI - [Kubernetes Namespace 101](https://cloudyuga.guru/blogs/kubernetes-namespaces-101/) - Namespaces are Kubernetes objects which partition a single Kubernetes cluster into multiple virtual clusters. Namespaces are Kubernetes objects which partition a single Kubernetes cluster into multiple virtual clusters. Each Kubernetes namespace provides the scope for Kubernetes Names it contains; which means that using the combination of an object name and a Namespace, each object gets a unique - [Year #3 for CloudYuga](https://cloudyuga.guru/blogs/cloudyuga-3-years/) - "It’s a milestone !! At-least for us. I thought if we could do for 3 years, then there is no going back. And here we are." It's a milestone !! At-least for us. I thought if we could do it for 3 years, then there is no going back. And here we are. 2018 had - [Kubernetes Day 2019, Bengaluru - Chance to be part of larger K8s eco-system](https://cloudyuga.guru/blogs/kube-day19-india/) - Kube-Day 2019 - Bengaluru As any technology becomes popular, the entire eco-system gets built around it. Take examples of Linux, Git, Java, Virtualization, Cloud, Containers. With eco-system, I refer following: - Distributions/Platforms Sales and Services Partner Technology Partners Consulting Training and Certification Conferences Meetups ... All of the above are important to increase the adoption - [CloudYuga@Kubernetes Day 2019, Bengaluru](https://cloudyuga.guru/blogs/kubeday19-blr/) - Cloudyuga@Kubernetes Day, India - 23rd March'10 On 23rd March, the CNCF wrapped its first-ever Kubernetes Day in Bengaluru. More than 1300 participants registered and I believe ~900-1000 of showed up. It happened at Infosys Campus, in Electronic City. It was great to see such energy and interest during the event. CloudYuga was one of the sponsors and - [Upcoming Webinar : Why do Cloud and DevOps matter more now ?](https://cloudyuga.guru/blogs/why-cloud-devops/) - Webinars : Why do Cloud and DevOps more now For Whom A newbie to Cloud and DevOps A manager surrounded by so-called techies and not sure jargons they are talking about Any enthusiast, who wants to learn something new Key Takeaways Introduction to Cloud and DevOps Why Cloud and DevOps matter more than ever? Who - [Upcoming Webinar - How to get CKA or CKAD Certified ?](https://cloudyuga.guru/blogs/how-cka-ckad/) - In this webinar we'll cover why and how to get Kubernetes Certified. Why?According to Dice, Kubernetes is the top skill for 2018 and by looking at the current trend its demand is increase day by day. The best thing about Kubernetes is that it runs the same everywhere. You can be on your laptop, on-premise or - [CKA and CKAD Classroom Training in Bengaluru](https://cloudyuga.guru/blogs/cka-ckad-classroom-sept19/) - Announcing first ever CloudYuga's classroom training for Kubernetes Certification CKA and CKAD We heard you !!! We got lots of requests for doing classroom training on Certified Kubernetes Administrator (CKA) and Certified Kubernetes Application Developer (CKAD) training. So we are scheduling both of them for September'19. For the first 2 days, we'll cover the course - [AWS Community Day - Bengaluru - 2019](https://cloudyuga.guru/blogs/awsblr-community-day19/) - CloudYuga at AWS Community Day - Bengaluru - 2019 Bangalore's AWS community organized AWS Community Day, Bengaluru on 27th and 28th July. CloudYuga proudly supported the event by becoming a silver sponsor. At our booth, during the event, lots of event participants stopped by. We showcased to them our training offerings and the training platform we have built. - [Mock CKA/CKAD Exam](https://cloudyuga.guru/blogs/mock-cka-ckad-exam/) - Are you ready for CKA/CKAD Kubernetes certification ? Check your preparation with CloudYuga's mock exam ! We train a lot of people on Kubernetes from both the Developer and Admin perspectives. After the training, we encourage them to take Kubernetes certifications, which are Certified Kubernetes Application Developer and Certified Kubernetes Administrator. Both of these exams are completely hands-on - [Annotations in Kubernetes](https://cloudyuga.guru/blogs/annotations-k8s/) - In this blog post we'll explore Annotations in general and how K8s uses it ! Introduction We recently got a query from a course subscriber about "Annotations" and its need in Kubernetes. Its seems a very genuine query from first time user. In his own words "Annotation is the concept , not able to understand, - [CKA and CKAD Classroom Training in Bengaluru - Oct'19](https://cloudyuga.guru/blogs/cka-ckad-classroom-oct19/) - CloudYuga's classroom training for CKA and CKAD in Oct'19 After a long time, we did a classroom session in September'19 and to our surprise, it got oversubscribed. We had 16 participants attending the session. Following are some of the answers we received for the question What you liked the most? the practical examples lab & the - [Single Control Plane Cluster Setup using Kubeadm](https://cloudyuga.guru/blogs/single-master-setup-kubeadm/) - Single master cluster setup using Kubeadm Kubeadm is a tool built to provide best-practice “fast paths” for creating Kubernetes clusters. It uses kubeadm init and kubeadm join type simple commands for creating a better end-user experience for cluster creation & maintenance.It enables Kubernetes administrators to quickly and easily bootstrap minimum viable clusters that are fully compliant with Certified Kubernetes guidelines. - [2019 - 4th Year of CloudYuga](https://cloudyuga.guru/blogs/cloudyuga4year/) - Cloudyuga's 4th year journey In December'19, CloudYuga completed 4 years. It was just a year but packed with learnings of many years. Like any company, we were challenged with the following:- Employee Retention At the beginning of 2019, two of the employees left in quick succession. This might look ok but for a startup like - [Gardener- The Kubernetes Botanist](https://cloudyuga.guru/blogs/gardener-blog/) - A blog on Gardener Introduction Recently I came across a new project based upon Kubernetes called "Gardener-The Kubernetes Botanist". Intrigued about what they are "farming", I decided to take a look into it, and truly speaking I was not disappointed. Most of us have watched Christopher Nolan's 2010 thriller Inception. In Inception, Dom Cobb used this - [CloudYuga@Kubernetes Forum Bengaluru and Delhi](https://cloudyuga.guru/blogs/k8sforum2020/) - CloudYuga at Kubernetes Forum - Bengaluru and Delhi The CNCF foundation organized Kubernetes Forum in Bengaluru and Delhi on 17th and 20th Feb'2020 respectively. There were more than 2000 participants in Bengaluru's event and around 1000 in Delhi one. Cloudyuga was one of the bronze sponsors at Bengaluru's event. Though I spoke at both the events and presented - [Kubernetes & Cloud Native Online Meetup - Kustomize](https://cloudyuga.guru/blogs/meetup-kustomize/) - In the first Kubernetes & Cloud Native Online Meetup we discussed Kustomize, which is a template free to configure applications on Kubernetes. Earlier this week I presented at the first Kubernetes & Cloud Native Online Meetup. The topic was Kustomize, which is a template-free way to configure applications on Kubernetes. It was a hands-on session with lots - [Kubernetes & Cloud Native Online Meetup #2](https://cloudyuga.guru/blogs/k8s-cloudnative-online-meetup-2/) - This is the 2nd online meetup we did and it this we covered - Real-Time Kubernetes Debugging, Monitoring and Alerting with BotKube Last Friday on 3rd April'20, we did the 2nd meetup of Kubernetes & Cloud Native online meetup. In this meetup we covered two topics:- Overview of Kubernetes Debugging and Monitoring - Neependra Khare, CloudYuga BotKube – Real-Time Kubernetes - [Kubernetes & Cloud Native Online Meetup #3](https://cloudyuga.guru/blogs/meetup-consul/) - In this meetup, we covered service discovery in Kubernetes and the dive to service discovery with Consul This was the 3rd online meetup of Kubernetes & Cloud Native online meetup group and in this meetup, I first covered Service Discovery in general and how it is done on Kubernetes. And then Arun covered Service Discovery with Consul and how - [Kubernetes & Cloud Native Online Meetup # 4](https://cloudyuga.guru/blogs/meetup-doks/) - In this meetup, we covered Kubernetes installation method and explored managed Kubernetes from DigitalOcean This was the 4th online meetup of Kubernetes & Cloud Native online meetup group and in this meetup we covered the Kubernetes installation method and explored managed Kubernetes from DigitalOcean - DOKS. We covered the following in this meetup:- Overview of different Kubernetes - [Kubernetes & Cloud Native Online Meetup # 5](https://cloudyuga.guru/blogs/meetup-storage-yugabyte/) - In this online meetup, we explored how Kubernetes is being used Storage Orchestrator and then explore Distributed SQL with YugaByteDB. In the 6th Kubernetes & Cloud Native online meetup, we explored the following:- Kubernetes as Storage Orchestrator - Neependra Khare, CloudYuga Distributes SQL with YugabyteDB - Nikhil Chandrappa, YugaByte Following is the recording of the event. In my session, - [Kubernetes & Cloud Native Online Meetup # 6](https://cloudyuga.guru/blogs/meetup-envoy-solo/) - In this online meetup, we explored Envoy Basics and Envoy Powered API Gateway Gloo from solo.io Envoy Proxy is undoubtedly becoming the backbone of modern service to service communication and that is what we discussed in the 7th Kubernetes & Cloud Native online meetup on 30th July 2020. We explored the following:- Overview of Envoy with - [What changes with the CKA exam in September 2020?](https://cloudyuga.guru/blogs/cka-2020/) - CKA course change from September 2020 The Cloud Native Computing Foundation offers two Kubernetes Certification exams for Kubernetes, Certified Kubernetes Application Developer & Certified Kubernetes Administrator exams; in collaboration with The Linux Foundation. From September 2020, the Linux Foundation made some changes in the exam of CKA. The new exam is of 2 hours, instead of 3 hours, and gives a lot - [Kubernetes & Cloud Native Online Meetup # 7](https://cloudyuga.guru/blogs/openshift-argo-meetup/) - In this online meetup, we explored different application deployment methods on OpenShift and covered CI/CD with Jenkins & ArgoCD. In this online meetup, we explored different application deployment methods on OpenShift and covered CI/CD with Jenkins & ArgoCD. For this meetup, more than 180 participants RSVPed and around 70 showed for the live event. Following - [Kubernetes & Cloud Native Online Meetup # 8](https://cloudyuga.guru/blogs/meetup-minio-k8s-backup-restore/) - In this meetup, we'll be covering Minio Deployment Strategy on K8s along with K8s backup and restore. For the Oct'20 meetup, we collaborated with K8s and OpenShift Meetup Group had sessions on Minio and K8s Backup and Restore. We covered the following:- MinIO Kubernetes Deployment Patterns - Nitish Tiwari, MinIO K8s backup and restore - Neependra Khare, CloudYuga Following the recording - [Kubernetes & Cloud Native Online Meetup # 10](https://cloudyuga.guru/blogs/k8s-networking-kubectl-plugins/) - In this meetup covered Kubernetes Networking and explored some of the Kubectl plugins. In this meetup, We covered Kubernetes Networking and explored some of the Kubectl plugins. Following was the agenda. Kubernetes networking models intro and deep dive - Murali Reddy - Cloud, SDN and NFV Architect Exploring Kubectl Plugins - Neependra Khare, Founder, CloudYuga It was a - [Updated CloudYuga Website](https://cloudyuga.guru/blogs/website-updates/) - We have upgraded CloudYuga.guru website Hi Friends. Today we have upgraded our website to new setup to have many new features. We'll publish a detailed blog post about that. There are still few rough edges, which we are fixing now. Everyone's enrolment on older website is still valid on the new platform. But if you - [Kubernetes Community Day Bengaluru’21](https://cloudyuga.guru/blogs/kcd21/) - In this blog I would like to share some insight about event planning, event day, outcome, post event and some other learnings. I know this is late but I have to publish this blog to formally check all the TODO’s with respect to this KCD, Bengaluru 21 event. Kubernetes Community Days, Bengaluru 21 happened on 25th - [Mounting Volume with RWX mode in KIND Cluster using NFS](https://cloudyuga.guru/blogs/nfs-kind/) - To learn how to configure NFS with RWX access-mode in a KIND Kubernetes Cluster There are certain ways to create Kubernetes cluster locally for testing and learning purposes through various tools such as docker desktop, minikube, orkind and each of them comes with different features like minikube and docker desktop allows to create a single-node cluster whereas kind allows creating a multi-node cluster. As Kind allows to create - [CI/CD with Jenkins & ArgoCD](https://cloudyuga.guru/blogs/ci-cd-with-jenkins-argocd/) - In this hands-on lab, we'll be exploring GitOps with Jenkins & ArgoCD - [Free Containers (Docker) Workshop - Hyderabad](https://cloudyuga.guru/blogs/free-containers-docker-workshop-hyderabad/) - Getting the audience and community space at Hyderabad was not as simple as other places because I have never worked there and did not have much community connections. After doing the free containers (Docker) workshop in Bangalore, Pune, and Chennai; the next stop was Hyderabad which was scheduled on 13th Feb’16. Getting the audience and community space at - [Kubernetes Advance Hands-on Meetup at CloudYuga Garage](https://cloudyuga.guru/blogs/cy-k8s/) - On August 13th at CloudYuga Garage we did Advance Hands-on meetup on Kubernetes. On August 13th at CloudYuga Garage we did an Advance Hands-on meetup on Kubernetes. It was paid one (INR 200) to cover the cost of Lunch and Tea. We made it paid to get confirm the registration of limited people. We did hands-on - [First Paid Containers (Docker) Workshop !!!](https://cloudyuga.guru/blogs/first-paid-containers-docker-workshop/) - I did my first paid workshop in Bangalore on 23rd and 24th Jan'16. So finally doing training, started to payout !!! I did my first paid workshop in Bangalore on 23rd and 24th Jan’16. In this first paid workshop I had 6 participants, all from different backgrounds and with skill-sets. I think this is a - [LinuxCon ContainerCon 2016 - Berlin Germany](https://cloudyuga.guru/blogs/linuxcon-containercon-2016-berlin-germany/) - LinuxCon, ContainerCon 2016 in Berlin was very special for me, as this is the first time I represented my company [CloudYuga](http://www.cloudyuga.guru/) as a speaker in an international conference. LinuxCon, ContainerCon 2016 in Berlin was very special for me, as this is the first time I represented my company CloudYuga as a speaker at an international conference. The event - [Joint Meetup - 2018](https://cloudyuga.guru/blogs/joint-meetup/) - As last year, different meetup groups from Bangalore joined hands to do a joint meetup on 24th March'18 at Walmart Lab's office. This year 9 meetup groups participated. Like last year, different meetup groups from Bangalore joined hands to do a joint meetup on 24th March'18 at Walmart Lab's office. This year 9 meetup groups - [DevConf 2016, Brno, CZ](https://cloudyuga.guru/blogs/devconf-2016-brno-cz/) - Devconf is one of the conference which has very good technical content. It also gave me opportunity to meet with RH folks, with whom I worked earlier or known for years. DevConf’16, which happened between 5th to 7th Frb’16 at Brno, CZ; was my first conference after leaving Red Hat. My workshop on Comparing Docker Orchestration Tools got - [Year #2 for CloudYuga](https://cloudyuga.guru/blogs/cy2years/) - Year 2017, had been a great and eventful year for CloudYuga and me. We evolved everyday from our on-going learning. We hit few milestones and continue to make progress. The year 2017, had been a great and eventful year for CloudYuga and me. We evolved every dayfrom our on-going learning. We hit few milestones and - [RootConf’17 Booth’s experience and Kubernetes workshop](https://cloudyuga.guru/blogs/rootconf-booths-experience-and-kubernetes-workshop/) - In the earlier blog post I mentioned that I would be doing a Kubernetes workshop and CloudYuga would be having a booth at rootconf In the earlier blog post, I mentioned that I would be doing a Kubernetes workshop and CloudYuga would be having a booth at rootconfIn the earlier blog post, I mentioned that - [Microservices and Serverless Event (29th April 2017)](https://cloudyuga.guru/blogs/microservices-and-serverless-event-29th-april-2017/) - On 29th April 2017, 8 different meetup groups of Bangalore came together and did joint event on Microservices and Serverless. On 29th April’17, April 8 different meetup groups of Bangalore came together and did a joint event on Microservices and Serverless. The 8meetup groups were AWS, Azure, DevOps, DigitalOcean, Docker, Hybrid Cloud, Kubernetes and Mesos Meetup groups. It was like a mini-conference :). ~250 people - [CloudYuga@KubeCon NA'18 in Seattle](https://cloudyuga.guru/blogs/cloudyuga-kubecon/) - CloudYuga@KubeCon NA'18 in Seattle Seeing things physically matters !! As I entered the KubeCon NA'18 venue; I saw CloudYuga's logo on the wall, with other sponsors. Then I reached the booth and saw our booth. We have come a long way in 3 years !! KubeCon NA'18 in Seattle was big, with close to 8K attendees and - [CloudYuga Joins The Linux and Cloud Native Computing Foundation](https://cloudyuga.guru/blogs/cloudyuga-lf-cncf/) - It is our pleasure to announce that CloudYuga has joined The Linux and Cloud Native Computing Foundation as a silver member. Both of these foundations have played a very important role in our very existence. As mentioned in one of the earlier blogs, after leaving my full-time job at Red Hat; I got my first paid assignment from The Linux Foundation to build - [Containers Fundamentals MOOC Launch](https://cloudyuga.guru/blogs/containers-fundamentals-mooc-launch/) - Today is a big day for CloudYuga. We launched our first [MOOC on containers technologies. Today is a big day for CloudYuga. We launched our first MOOC on containers technologies – Containers Fundamentals. It has been a great learning experience. Though I was doing open batches and getting some corporate training I had to say NO many times - [Understanding Volumes in Kubernetes](https://cloudyuga.guru/blogs/kubernetes-storage/) - In this blog post we'll see different ways to attach external storage to the Pods. The focus of the blog is to cover fundamentals and not to do a deep dive. The first thing one does after learning about containers is to run some stateless containers, something like following:- $ docker container run -i -t - [KubeCon and ContainerNativeCon-17 Updates](https://cloudyuga.guru/blogs/kubecon17/) - Joint meetup event report to cover KubeCon and ContainerNativeCon 17 Updates and Kubernetes Storage This year's KubeCon and ContainerNativeCon NA was scheduled between 6th to 8th Dec'17 in Austin. Bangalore Docker Meetup, Bangalore CNCF and Meson Meetup, Bangalore Kubernetes Meetup, Bangalore OpenShift and Kubernetes Meetup meetup groups of Bangalore decided to come together to do a joint meetup, to review the event - [CloudYuga becomes Kubernetes Certified Service Provider and Training Partner](https://cloudyuga.guru/blogs/cloudyuga-kcsp-ktp/) - cloudyuga-becomes-kubernetes-certified-service-provider-and-training-partner Since inception, our goal was to help companies and individuals embrace new-age technologies; along with the cloud. So far training had been our primary focus and I am proud to say that; we have received 100% repeat business from our clients; which kept us busy and floating :). We are now making conscious efforts - [Docker session at Prathidhwani, Technopark, Trivandrum](https://cloudyuga.guru/blogs/docker-session-at-pcathidhwani-technopark-trivandrum/) - Docker session at Prathidhwani, Technopark, Trivandrum Today I delivered a Docker 101 session at Trivandrum for Prathidhwani. Prathidhwani is Socio-Cultural Organisation for Technopark Employees Employees. Today I delivered a Docker 101 session at Trivandrum for Prathidhwani. Prathidhwani is Socio-Cultural Organisation for Technopark Employees Employees. I reached Trivandrum at 9:40 AM and went directly to the venue. More than 300 people registered - [User Authentication and Authorization in Kubernetes](https://cloudyuga.guru/blogs/kubernetes-online-meetup-nov18/) - User Authentication and Authorization in Kubernetes - Kubernetes Online Meetup On 8th Nov'18, I presented at Kubernetes/Cloud-Native Online Meetup. The topic of my presentation was User Authentication and Authorization in Kubernetes. Following are slide for the same :- User authentication and authorizarion in Kubernetes from Neependra Khare And here is the video:- It was like a webinar, which - [Go Programming Workshop 4th and 5th Feb17th by Shiju Varghese](https://cloudyuga.guru/blogs/go-programming-workshop-4th-and-5th-feb17th-by-shiju-varghese/) - Last weekend on 4th and 5th Feb 2017 we hosted our 2nd Go language workshop by Shiju Varghese. This is first 2 days workshop we did it our office. Sometimes it becomes difficult to do training when there are fewer participants. This time we had only 3 participants, which does make much financial sense but - [A year on my own](https://cloudyuga.guru/blogs/a-year-on-my-own/) - Today I completed one year of being on my own. Today I completed one year of being on my own. In 2004, after graduating from college and doing a brief experiment with a startup I came to Pune, looking for a job. I failed to clear the interviews of many MNCs. In the last two - [Docker and Kubernetes Sept'18 - Joint Meetup](https://cloudyuga.guru/blogs/docker-kubernetes-meetup/) - docker-and-kubernetes-meetup-september-2018 On 15th Sept'18, Docker and Kubernetes of Bangalore hosted a joint meetup at Rubrik's India office. ~270 people RSVPed and ~80 attended the meetup. Following was the agenda of the meetup:- CI/CD with Docker and Kubernetes - Munai Das Udasin, SAP Concur Lessons learned and best practices: From shipping rpms to shipping containerized microservices to run on k8s - Ankush Chadha - Jfrog - [The Lesser Known Side of Kubernetes API](https://cloudyuga.guru/blogs/kubernetesapi/) - To learn what Kubernetes APIs are and to do RESTful Operation The Kubernetes API server is one of the core components of the control plane which helps in exposing the Kubernetes API. This API server serves different HTTP(REST) API endpoints which allows end-users to do different RESTful operations, to interact with different components of the cluster. At the bottom level, everything in the Kubernetes - [Kubernetes Auditing](https://cloudyuga.guru/blogs/auditing/) - To know about Kubernetes auditing and learn how to apply audit policies and store logs. In general, auditing means inspection, and Kubernetes auditing refers to a set of records documenting the sequence of actions in a cluster. The cluster inspects the activities generated by users, by applications that use the Kubernetes API, and by the control plane itself. But - [Downward API](https://cloudyuga.guru/blogs/downwardapi/) - To learn how to expose pod information to its own containers. In a Kubernetes cluster, generally, an application running inside a container in a pod doesn’t have any information about the pod or about the cluster as we make the application to be portable. But the information about the pod can be exposed to the application container and it’s - [Bitnami's SealedSecrets - Hands-On Blog](https://cloudyuga.guru/blogs/sealedsecrets/) - Managing Kubernetes Secrets externally using the Bitnami's SealedSecrets. Nowadays we are using GitOps for application deployment and for that we tend to put all the application's information and configuration on Git, but can we do the same with Kubernetes Secrets YAML file on Git? The answer is definitely NO, as the Secret's file contains just the base64 encoded value of our - [Exploring Kubectl Plugins](https://cloudyuga.guru/blogs/kubectlplugins/) - To learn different Kubectl Plugins via Krew Plugin Manager To manage and operate different Kubernetes-related tasks, kubectl is one of the handiest and most powerful tools to be used. With its core features, we can do various tasks like creating pod resources, listing them, and so on. But sometimes Kubernetes-admin and users might need to perform tasks - [Securing Kubernetes with Kyverno](https://cloudyuga.guru/blogs/kyverno-introduction/) - Introduction to Kyverno and exploring some of its security policies for Kubernetes In recent times, Kubernetes has become the default standard to manage the containers at scale. It can be configured and installed in N different ways which are good in terms of flexibility but can be a nightmare to configure security. If security is not configured in the right - [Getting Started With ETCD](https://cloudyuga.guru/blogs/etcd/) - To learn about ETCD - A Distributed Key-Value Store etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It is an open-source project maintained by CNCF. Most notably, it manages the configuration data, state data, and metadata for Kubernetes, the popular container orchestration platform. - [ETCD in Kubernetes](https://cloudyuga.guru/blogs/etcdk8s/) - To learn how ETCD works in Kubernetes In the previous blog, we have seen about etcd, its installation with its implementation, and how to set up a three-node etcd local cluster. Now, we will be exploring the working of etcd in Kubernetes and how it stores the information about the cluster, and how we can interact with etcd to - [Setting up local Kubernetes Cluster with Kind](https://cloudyuga.guru/blogs/setting-up-local-kubernetes-cluster-with-kind/) - Exploring Kind to setup single and multi-node local cluster on Linux Kubernetes is one of the most widely used orchestrators for automating deployment, scaling, and managing containerized apps. However, one wouldn't want to take risk of testing directly on the production cluster. To address these concerns, a Kubernetes cluster can be built up locally using various technologies ## Pages - [Home](https://cloudyuga.guru/) - Bridging Careers, Empowering Businesses Your Path to Cloud Excellence Corporate Offerings Individual Offerings Our learners are from companies like Our Courses Choose based on your experience Building Blocks of Cloud Mastering Generative AI Kubernetes 101 Our Blogs Explore our technical and non-technical blogs View All AI-Powered Recipe Generator: Cook Delicious Dishes with What You Have! - [Ebook mastering cloud careers](https://cloudyuga.guru/ebook-mastering-cloud-careers/) - Mastering Cloud Careers: Your Blueprint for Success​ - [Courses](https://cloudyuga.guru/courses-overview/) - Start Course Continue Visit Results - [Blogs](https://cloudyuga.guru/blogs/) - Blogs Level up your Cloud Native Skills AI-Powered Recipe Generator: Cook Delicious Dishes with What You Have! Securing AI Applications with LlamaGuard Real-Time Data Streaming with AWS Kinesis Simplifying Data Workflows: A Deep Dive into ETL Mastering Data Transformation with AWS Glue and Query using Athena Cloud Computing for Large-Scale Data Analytics On AWS Pratiksha - [Individuals](https://cloudyuga.guru/individuals/) - Are you... a fresh graduate? a professional looking to get started on cloud? or someone looking to restart career? Download your free Ebook Cloudyuga's Cloudyuga Engineer Bootcamp Build the right foundation to Succeed in Cloud! With our 3 months cloud engineer bootcamp Know More Explore Self Placed Courses Choose based on your experience Building Blocks - [AI-Powered Recipe Generator: Cook Delicious Dishes with What You Have!](https://cloudyuga.guru/ai-powered-recipe-generator-cook-delicious-dishes-with-what-you-have/) - Cooking can be fun, but figuring out what to make with the ingredients in your kitchen can be tricky. That’s where our Recipe Generator comes in! This smart application uses AI to help you create delicious recipes based on the ingredients you already have. In this showcase, we’ll share how this application works and how - [Explore an AI-Powered Role Play Game](https://cloudyuga.guru/explore-an-ai-powered-role-play-game/) - Welcome to Nadi Lok! : A Magical World of Adventure and Wonder Imagine a world where ancient rivers flow with magical energy, kingdoms thrive with cultural vibrancy, and you are the hero of a story that unfolds based on your choices. Welcome to Nadi Lok, a captivating world crafted with the power of advanced artificial - [About Us](https://cloudyuga.guru/about-us/) - Learn Cloud Native in the most effective way in least amount of time. Our learners are from companies like Neependra Khare Founder & CEO My name is Neependra Khare and I am the founder & CEO of CloudYuga. I love teaching and after writing a book on Docker –Docker Cookbook in 2015 I realized that container - [Video to SRT Subtitle Generator](https://cloudyuga.guru/video-to-srt-subtitle-generator/) - Description This is a Gradio application that converts video files into subtitle (SRT) files by extracting audio from the video and transcribing the speech using AI. It automates the process of converting videos into subtitle files, making it useful for users who want to create captions or transcriptions for their video content. Model Inference This - [WhatsApp Chat Question-Answer Application](https://cloudyuga.guru/whatsapp-chat-question-answer-application/) - Description This is a Gradio-based application that enables users to upload a zip file containing WhatsApp chat data and perform a hybrid search using both BM25 (sparse retrieval) and Chroma (dense retrieval). The app processes chat messages, indexes them, and allows users to query the chat data. After uploading the chat data and entering a - [MCQ Generator From URL](https://cloudyuga.guru/mcq-generator-from-url/) - Description Unlock the power of AI with our MCQ Creator Application! Transform text from any URL into engaging multiple-choice questions with the AI model from Hugging Face. Choose from difficulty levels—simple, intermediate, or advanced—and receive a tailored quiz with detailed reviews. The user-friendly Gradio interface streamlines quiz creation, making it ideal for educators, trainers, and - [Blog Generation Application](https://cloudyuga.guru/blog-generation-application/) - Description The AI Blog Generator application enables users to create high-quality, engaging blog posts by simply providing a topic. The application takes the provided topic, processes it through a language model, and generates a detailed blog post of approximately 500 words. Whether you need content for your blog or inspiration for writing, this tool provides - [SEO Compatibility Checker ](https://cloudyuga.guru/seo-compatibility-checker/) - Description This application is an SEO Compatibility Checker and Optimizer that helps users analyze their content based on SEO best practices. It generates a list of relevant SEO keywords, checks if those keywords are present in the content, evaluates the content's readability score, and suggests optimized content for SEO. The tool leverages a pre-trained large - [Current Weather Review](https://cloudyuga.guru/current-weather-review/) - Description Experience an effortless way to plan your day with detailed weather insights and AI-generated reviews! Our application uses an AI model from Hugging Face to generate comprehensive weather reviews. Simply enter the name of a city, and the app retrieves real-time weather data using the OpenWeatherMap API. Key Features Weather Information Retrieval: Get current - [Q/A with Whatsapp Gardening Group](https://cloudyuga.guru/q-a-with-whatsapp-gardening-group/) - Description This WhatsApp Chat Q&A application allows users to ask questions related to the gardening content of the chat. The application extracts the content from the chat, and uses an AI model to generate answers based on the user's questions. Try it out! Preview - [Text to Image Generation](https://cloudyuga.guru/text-to-image-generation/) - Description The Text to Image Generation app allows users to create images based on textual descriptions. Utilizing the AI model, it converts user-provided text prompts into visually engaging images. This app is ideal for artists, designers, and creative individuals who want to quickly visualize concepts or generate unique artwork from descriptive text. Model Inference Model - [Hugging Face Demo](https://cloudyuga.guru/hugging-face-demo/) - [Corporate](https://cloudyuga.guru/corporate/) - Up-skill Your Employees in the Cloud Native Stack With our Hands-on Labs & Top Industry Trainers Enquire Now Trusted by Testimonials CloudYuga's Kubernetes trainings provide hands-on knowledge necessary for operators and developers and prepare them for CKA and CKAD certifications. Their training delivery tool allowed our engineers to run the lab exercises after the training - [Bootcamp](https://cloudyuga.guru/bootcamp/) - Build the right foundation to Succeed in Cloud! With our 3 months cloud engineer bootcamp Start Today Relearn the basics Do hands-on 1 x 1 mentoring session Mock Interviews Join this program, if you are looking for your domain or profile change a clear path to start your Cloud Journey a mentor to guide you - [Reset password success](https://cloudyuga.guru/reset-password-success/) - Success ! Password reset request was sent successfully. Please check your email to reset your password Back to Home - [Webinars](https://cloudyuga.guru/webinars/) - Past Webinars Introduction To Object Storage View Overview Of Serverless View Overview Of Software Defined Storage (SDS) View Cloud & DevOps Masterclass View Webinar – Overview Of SDN View Cloud Service Models – IaaS, PaaS And SaaS View Previous Page1 Page2 Next - [Sign Up](https://cloudyuga.guru/sign-up/) - Sign up First Name Last Name Username * User Email * User Password * Confirm Password * Register Connect with Login with Google - [Moutic Page](https://cloudyuga.guru/moutic-page/) - [mautic type="form" id="6"] - [Helpie FAQ - Group Sample](https://cloudyuga.guru/helpie_faq_page/) - [helpie_notices group_id='269'/] - [All FAQs (Helpie FAQ)](https://cloudyuga.guru/all_helpie_faq_page/) - Sample of All FAQs (Helpie FAQ) - [Privacy Policy](https://cloudyuga.guru/privacy-policy/) - Privacy Policy Who we are Suggested text: Our website address is: http://cloudyuga.guru. Comments Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection. An anonymised string created from your email address (also - [Terms and Conditions](https://cloudyuga.guru/terms-and-conditions/) - Terms and Conditions The Terms of Use in entered into by and between Cloudyuga Technologies Private Limited (the “Company”) and the person to whom the services of the Company are made available (including but not limited the Training Module (defined below)), either directly or indirectly (the “User”).1. DEFINITIONSThe User hereby unconditionally agrees that unless the - [Refund and Returns Policy](https://cloudyuga.guru/refund_returns/) - Refund and Returns Policy Overview Our refund and returns policy lasts 30 days. If 30 days have passed since your purchase, we can’t offer you a full refund or exchange. To be eligible for a return, your item must be unused and in the same condition that you received it. It must also be in - [Join your new group](https://cloudyuga.guru/join-your-new-group/) - {{groupName}} {{groupMembersCount}} {{groupMembersList}} Join Group - [Quizz](https://cloudyuga.guru/quizz/) - Basic Containers or Docker Quiz This quiz checks the basic knowledge of Containers and Docker. If you score more than 13 out of 15, then it confirms that your foundation is really solid and you can move on to container orchestrations like Kubernetes. Quiz Instructions 1) Read each question thoroughly, paying close attention to details - [Login](https://cloudyuga.guru/login/) - Sign IN Username or Email Address Password Remember Me Log In Lost your password? Connect with Login with Google - [Reset Password](https://cloudyuga.guru/reset-password/) - [Lost Password](https://cloudyuga.guru/lost-password/) - Lost Password Reset Password Please enter your email address or username. You will receive a link to create a new password via email. Email Address or Username Reset Password - [My Courses](https://cloudyuga.guru/my-courses/) - My Course My Messages Start Course Continue Visit Results - [All Courses](https://cloudyuga.guru/all-courses/) - All Courses Building Blocks of Cloud Neependra Khare Know What It Takes to Build Your Own Cloud !! Protected: Mastering Generative AI Neependra Khare Mastering Generative AI Kubernetes 101 Neependra Khare Kubernetes 101 Mastering Shell Scripting Neependra Khare Learn how to write bash scripts like a pro & automate your tasks Kubernetes for Developers (CKAD) - [Course Completed](https://cloudyuga.guru/course-completed/) - Congratulations on completing this course! 🥳Find More Courses - [Shop](https://cloudyuga.guru/shop/) ## FAQs - [Are there prerequisites for enrolling in the course?](https://cloudyuga.guru/helpie_faq/are-there-prerequisites-for-enrolling-in-the-course-2/) - This is a beginner friendly course but working knowledge of Linux is required. - [How do I access support during self-paced learning?](https://cloudyuga.guru/helpie_faq/how-do-i-access-support-during-self-paced-learning/) - You can either write to us at connect@cloudyuga.guru or reach out to us via our Discord channel. - [Can I access the content after completing the course?](https://cloudyuga.guru/helpie_faq/can-i-access-the-content-after-completing-the-course/) - Yes, you will have the life-time access to the content and eligible for free course update as well. - [What are technical requirements for following the hands-on labs given with the self-paced content?](https://cloudyuga.guru/helpie_faq/what-are-technical-requirements-for-following-the-hands-on-labs-given-with-the-self-paced-content/) - You can do the hands-on any Linux, Mac and Windows system, ideally with 2 CPUs and 8 GB of RAM. - [Are there assessments or quizzes in the self-paced modules?](https://cloudyuga.guru/helpie_faq/are-there-assessments-or-quizzes-in-the-self-paced-modules/) - Yes. There are quizzes and assignment at different points to help you access your knowledge. - [Is there a community or networking aspect in the self-paced courses?](https://cloudyuga.guru/helpie_faq/is-there-a-community-or-networking-aspect-in-the-self-paced-courses/) - Absolutely. After enrolling you will given access to our Private Discord Community, where you connect with our peers and your instructors. - [What if I don’t like the course and want my refund?](https://cloudyuga.guru/helpie_faq/what-if-i-dont-like-the-course-and-want-my-refund/) - We have two weeks of refund policy for the self paced courses. We’ll refund the entire amount without asking a question. - [What is the format of the self-paced content?](https://cloudyuga.guru/helpie_faq/what-is-the-format-of-the-self-paced-content/) - The course consists of video lectures, written materials, hands-on exercises, quizzes and much more. - [Your First FAQ Question](https://cloudyuga.guru/helpie_faq/your-first-faq-question/) - Your relevent FAQ answer. ## Landing pages - [Elementor Landing page #5606](https://cloudyuga.guru/elementor-landing-page-5606/) - River North, Chicago A Luxurious Way of Living 2-6 bedroom apartments and penthouses available in the most beautiful building, located in a popular area of the city. Prices Start at $749,900 Only 20 Apartments Left! Full Name Email Address Phone Number Request Showing Different kind of lifestyle Welcome to Sabay Towers The Sabay Towers is ## Products - [Mastering Linux](https://cloudyuga.guru/product/mastering-linux/) - Mastering Linux - [Cloud Engineer Bootcamp](https://cloudyuga.guru/product/cloud-engineer-bootcamp/) - [Building Blocks of Cloud](https://cloudyuga.guru/product/building-blocks-cloud/) - Know What It Takes to Build Your Own Cloud !! - [Git and GitHub for DevOps Engineer](https://cloudyuga.guru/product/git-and-github-for-devops-engineer/) - Git and GitHub for DevOps Engineer - [Docker 101](https://cloudyuga.guru/product/docker-101/) - Neependra Khare Docker 101, Complete Beginner Course - [Kubernetes for Administrators (CKA)](https://cloudyuga.guru/product/kubernetes-for-administrators-cka/) - Kubernetes for Administrators (CKA) - [Kubernetes 101](https://cloudyuga.guru/product/kubernetes-101/) - Kubernetes 101 - [Container Fundamentals with Docker](https://cloudyuga.guru/product/container-fundamentals-with-docker/) - Container Fundamentals with Docker - [Mastering Shell Scripting](https://cloudyuga.guru/product/master-shell-scripting/) - Mastering Shell Scripting - [Kubernetes Developer (CKAD) Training](https://cloudyuga.guru/product/kubernetes-developer-ckad-training/) - Neependra Khare Kubernetes Developer (CKAD) Training ## Webinars - [Building A DevOps Skillset](https://cloudyuga.guru/blogs/webinar/building-a-devops-skillset/) - [Developing A Comprehensive Cloud Engineering Skill Set For Successful Job Placement In 2023](https://cloudyuga.guru/blogs/webinar/developing-a-comprehensive-cloud-engineering-skill-set-for-successful-job-placement-in-2023/) - [Why Strong Fundamentals Are Required For A Successful DevOps Career ?](https://cloudyuga.guru/blogs/webinar/why-strong-fundamentals-are-required-for-a-successful-devops-career/) - [Introduction To Cloud Computing](https://cloudyuga.guru/blogs/webinar/introduction-to-cloud-computing/) - [Overview Of Virtualization](https://cloudyuga.guru/blogs/webinar/overview-of-virtualization/) - [Understanding Containers & Container Orchestrators](https://cloudyuga.guru/blogs/webinar/understanding-containers-container-orchestrators/) - [Cloud Service Models - IaaS, PaaS And SaaS](https://cloudyuga.guru/blogs/webinar/cloud-service-models-iaas-paas-and-saas/) - [Webinar - Overview Of SDN](https://cloudyuga.guru/blogs/webinar/webinar-overview-of-sdn/) - [Cloud & DevOps Masterclass](https://cloudyuga.guru/blogs/webinar/cloud-devops-masterclass/) - [Overview Of Software Defined Storage (SDS)](https://cloudyuga.guru/blogs/webinar/overview-of-software-defined-storage-sds/) - [Overview Of Serverless](https://cloudyuga.guru/blogs/webinar/overview-of-serverless/) - [Introduction To Object Storage](https://cloudyuga.guru/blogs/webinar/introduction-to-object-storage/) ## MailPoet Page - [MailPoet Page](https://cloudyuga.guru/?mailpoet_page=captcha) - [mailpoet_page] - [MailPoet Page](https://cloudyuga.guru/?mailpoet_page=subscriptions) - [mailpoet_page] ## Quizzes & Surveys - [Kubernetes in Production Quiz-1](https://cloudyuga.guru/blogs/qsm_quiz/kubernetes-in-production-quiz-1/) - [Kubernetes in Production Quiz-2](https://cloudyuga.guru/blogs/qsm_quiz/kubernetes-in-production-quiz-2/) ## Courses - [Building Blocks of Cloud](https://cloudyuga.guru/course/building-blocks-of-cloud/) - Know What It Takes to Build Your Own Cloud !! - [Git and GitHub for DevOps Engineer](https://cloudyuga.guru/course/git-and-github-for-devops-engineer/) - A comprehensive course on Git and GitHub for DevOps Engineer - [Container Fundamentals with Docker](https://cloudyuga.guru/course/container-fundamentals-with-docker/) - Build Solid Foundation on Containers - [Kubernetes for Administrators (CKA)](https://cloudyuga.guru/course/kubernetes-for-administrators-cka/) - Complete Hands-On Course with Integrated Lab Environment - [Kubernetes for Developers (CKAD)](https://cloudyuga.guru/course/kubernetes-for-developers-ckad/) - Master the application development on Kubernetes - [Mastering Shell Scripting](https://cloudyuga.guru/course/master-shell-scripting/) - Learn how to write bash scripts like a pro & automate your tasks - [Docker 101 - Complete Beginner Course](https://cloudyuga.guru/course/docker-101-complete-beginner-course/) - Learn the basics of Containers and Docker with Hands-on - [Mastering Linux](https://cloudyuga.guru/course/mastering-linux/) - Learn how use Linux as a Pro !! - [Kubernetes 101](https://cloudyuga.guru/course/kubernetes-101/) - Kubernetes 101 ## Lessons - [Course Overview](https://cloudyuga.guru/lesson/course-overview-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [About the Instructor - Neependra Khare](https://cloudyuga.guru/lesson/about-the-instructor-neependra-khare/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [What is Cloud Computing ?](https://cloudyuga.guru/lesson/what-is-cloud-computing/) - [Quiz: Introduction and Course Overview](https://cloudyuga.guru/lesson/quiz-introduction-and-course-overview/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! - [Traditional Computing](https://cloudyuga.guru/lesson/traditional-computing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Comparing Traditional and Cloud Computing](https://cloudyuga.guru/lesson/comparing-traditional-and-cloud-computing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz: Traditional Vs Cloud Computing](https://cloudyuga.guru/lesson/quiz-traditional-vs-cloud-computing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! - [Quiz: Cloud Deployment Models](https://cloudyuga.guru/lesson/quiz-cloud-deployment-models/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! - [Quiz: Cloud Service Model](https://cloudyuga.guru/lesson/quiz-cloud-service-model/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! - [Overview](https://cloudyuga.guru/lesson/overview-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Containerization](https://cloudyuga.guru/lesson/containerization-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Software Defined Storage (SDS)](https://cloudyuga.guru/lesson/software-defined-storage-sds/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Software Defined Networking (SDN)](https://cloudyuga.guru/lesson/software-defined-networking-sdn/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Object Storage](https://cloudyuga.guru/lesson/object-storage/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Serverless](https://cloudyuga.guru/lesson/serverless-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Infrastructure as a Code](https://cloudyuga.guru/lesson/infrastructure-as-a-code/) - [Quiz: Building Blocks of Cloud](https://cloudyuga.guru/lesson/quiz-building-blocks-of-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! - [What is Cloud Native Computing Foundation (CNCF)?](https://cloudyuga.guru/lesson/what-is-cloud-native-computing-foundation-cncf/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [CNCF Landscape](https://cloudyuga.guru/lesson/cncf-landscape/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz: Cloud Native Computing Foundation](https://cloudyuga.guru/lesson/quiz-cloud-native-computing-foundation/) - good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cloud Migration Strategies](https://cloudyuga.guru/lesson/cloud-migration-strategies/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cost Management](https://cloudyuga.guru/lesson/cost-management/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Building a Private Cloud](https://cloudyuga.guru/lesson/building-a-private-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Security in the Cloud](https://cloudyuga.guru/lesson/security-in-the-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz: Other Important aspects ..](https://cloudyuga.guru/lesson/quiz-other-important-aspects/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! Good Job! Please rewatch the video and Try Again!! - [Master any one of the Cloud](https://cloudyuga.guru/lesson/master-any-one-of-the-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cloud and AI](https://cloudyuga.guru/lesson/cloud-and-ai/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Master Kubernetes](https://cloudyuga.guru/lesson/master-kubernetes/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Ebook: Mastering Cloud Careers](https://cloudyuga.guru/lesson/ebook-mastering-cloud-careers/) - Here is a copy of the e-book I have published to help anyone to start their cloud journey and succeed in the tech world. Mastering-Cloud-Careers.pdf Take Quiz Complete Lesson Next Lesson Reset Lesson - [Review of what we learned?](https://cloudyuga.guru/lesson/review-of-what-we-learned/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Why Cloud ?](https://cloudyuga.guru/lesson/why-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Who should learn about Cloud Computing ?](https://cloudyuga.guru/lesson/who-should-learn-about-cloud-computing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [How Cloud Computing was started?](https://cloudyuga.guru/lesson/how-cloud-computing-was-started/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cloud Computing](https://cloudyuga.guru/lesson/cloud-computing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Overview](https://cloudyuga.guru/lesson/overview-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Public Cloud](https://cloudyuga.guru/lesson/public-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Private Cloud](https://cloudyuga.guru/lesson/private-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi Cloud](https://cloudyuga.guru/lesson/multi-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Hybrid Cloud](https://cloudyuga.guru/lesson/hybrid-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi Hybrid Cloud](https://cloudyuga.guru/lesson/multi-hybrid-cloud/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cloud Providers](https://cloudyuga.guru/lesson/cloud-providers/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Overview](https://cloudyuga.guru/lesson/overview-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Infrastructure as a Service (IaaS)](https://cloudyuga.guru/lesson/infrastructure-as-a-service-iaas/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Platform as a Service (PaaS)](https://cloudyuga.guru/lesson/platform-as-a-service-paas/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Software as a Service (SaaS)](https://cloudyuga.guru/lesson/software-as-a-service-saas/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cloud Service Model - Comparison](https://cloudyuga.guru/lesson/cloud-service-model-comparison/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Virtualization](https://cloudyuga.guru/lesson/virtualization-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Thank you !!](https://cloudyuga.guru/lesson/thank-you/) - [Recording](https://cloudyuga.guru/lesson/recording-2/) - https://drive.google.com/drive/u/0/folders/1iIFaXyxWT_bGH8Us5DKuyayyEfdq2JNm Take Quiz Complete Lesson Next Lesson Reset Lesson - [Securing LLM Applications](https://cloudyuga.guru/lesson/securing-llm-applications/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Guardrailing the GenAI Applications](https://cloudyuga.guru/lesson/guardrailing-the-genai-applications/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Streamlit and Gradio](https://cloudyuga.guru/lesson/streamlit-and-gradio/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Agentic Workflow](https://cloudyuga.guru/lesson/agentic-workflow/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording](https://cloudyuga.guru/lesson/session-recording-6/) - https://drive.google.com/file/d/1U1gpInBn_n02qFnxi-R0mzRlONZ5mXn3/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording](https://cloudyuga.guru/lesson/session-recording-5/) - https://drive.google.com/file/d/15bAk0wsou-rYgUCTXBOQpshzEexmN0ej/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to Huggingface](https://cloudyuga.guru/lesson/introduction-to-huggingface/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording](https://cloudyuga.guru/lesson/session-recording-4/) - https://drive.google.com/drive/u/0/folders/1iIFaXyxWT_bGH8Us5DKuyayyEfdq2JNm Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to Langchain](https://cloudyuga.guru/lesson/introduction-to-langchain/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knowledge Check](https://cloudyuga.guru/lesson/knowledge-check-5/) - Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Recording](https://cloudyuga.guru/lesson/recording/) - https://drive.google.com/file/d/1RnnLTEtBlBVpuxUKAV2qgXHmatYxV97K/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Prompt Engineering](https://cloudyuga.guru/lesson/prompt-engineering/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [VectorDB](https://cloudyuga.guru/lesson/vectordb/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording 2](https://cloudyuga.guru/lesson/session-recording-2-3/) - Please watch only first 30-40 mins only https://drive.google.com/file/d/1mmvLnfNzZEHrAbIjh0iaGo-v5Gi2_nz6/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Demos](https://cloudyuga.guru/lesson/application-demos/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording 2](https://cloudyuga.guru/lesson/session-recording-2-2/) - https://drive.google.com/file/d/1mmvLnfNzZEHrAbIjh0iaGo-v5Gi2_nz6/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording 1](https://cloudyuga.guru/lesson/session-recording-2/) - https://drive.google.com/file/d/1cqi5hE0T97XliXJrv5mlVPn0CTB74C7i/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording 1](https://cloudyuga.guru/lesson/session-recording-3/) - https://drive.google.com/file/d/14eFe0S6lBBUYiokZtkTkLJH95QTeV3f_/view?usp=share_link Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knowledge Check](https://cloudyuga.guru/lesson/knowledge-check-4/) - Try Again!!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to RAG](https://cloudyuga.guru/lesson/introduction-to-rag/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knowledge Check](https://cloudyuga.guru/lesson/knowledge-check-3/) - Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording Part 2](https://cloudyuga.guru/lesson/session-recording-part-2/) - https://drive.google.com/file/d/1Tg5f_6wI9Pk7gElkajCOSIjUoELocSln/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knowledge Check](https://cloudyuga.guru/lesson/knowledge-check-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!! - [Introduction to LLMs](https://cloudyuga.guru/lesson/introduction-to-llms/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording Part 1](https://cloudyuga.guru/lesson/session-recording-part-1/) - https://drive.google.com/file/d/1Abtek6jzIT7f15tbVkcUMKW6NI8ketbW/view?usp=sharing Take Quiz Complete Lesson Next Lesson Reset Lesson - [Foundational Models & GenAI](https://cloudyuga.guru/lesson/foundational-models-genai/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knowledge Check](https://cloudyuga.guru/lesson/knowledge-check/) - Try Again!! Try Again!! Try Again!! Try again!! Try Again!! Try Again!! Try Again!! Try Again!! Try Again!!! Try Again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Session Recording](https://cloudyuga.guru/lesson/session-recording/) - https://drive.google.com/file/d/1_flLfjX4YonxOjURc4dE-LvFfoXzKjke/view?usp=share_link Take Quiz Complete Lesson Next Lesson Reset Lesson - [What is AI ?](https://cloudyuga.guru/lesson/what-is-ai/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup](https://cloudyuga.guru/lesson/lab-introduction-2/) - Doing hands-on is very important to follow and learn the course content as it helps students understand the concepts easily. In this course, we recommend you do hands-on as you proceed. You can install the Git tool on your system from here , according to your system operating system. Please note that we recorded the - [About the Author](https://cloudyuga.guru/lesson/about-the-author/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction-8/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Welcome to our comprehensive Git and GitHub course, where we learn version control and collaborative software development. This course is specially crafted to guide you through the fundamentals of Git, covering key concepts such as repositories, branching, merging, and conflict resolution. As we progress, we seamlessly integrate - [Docker image analysis tools](https://cloudyuga.guru/lesson/docker-image-analysis-tools-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Docker Scout](https://cloudyuga.guru/lesson/docker-scout/) - Install a docker to run the following lab. Please follow our Getting Started with Docker >> Docker Engine Chapter. What is docker scout ? It is an image analysis tool. We can use docker scout in, Docker Desktop Docker Hub Docker CLI Docker Scout Dashboard Currently, It is an experimental and default image analysis tool on docker - [Docker-Squash](https://cloudyuga.guru/lesson/docker-squash/) - What is docker squash ? Docker Squash is a utility to squash multiple layers into a single layer to create an image with small size with good quality. Note: Install docker from Getting Started with Docker >> Docker Engine Chapter if it is not installed. How to install docker squash ? To install docker-squash with pip apt install pip && - [Docker Dive](https://cloudyuga.guru/lesson/docker-dive/) - What is Docker Dive ? Docker Dive is an image analysis tool that helps us to find layers and gives a separate size of each layer and a list of files with size. Using dive-in, we can easily discover ways to optimize the image. It is written in the Go language. It is a tool for image analysis which we - [Docker Security Best Practices](https://cloudyuga.guru/lesson/docker-security-best-practices/) - Below mentioned are the Docker security best practices: Use Minimal Base Images Always use a minimal base image while building a docker image that matches with the requirements. A smaller base image helps reduce the image size and minimize the number of vulnerabilities that come through dependencies. Least Privileged User Docker defaults to running containers - [Dockerfile Best Practices](https://cloudyuga.guru/lesson/dockerfile-best-practices/) - Below are certain recommendations that one should follow while preparing a Dockerfile. Create Immutable and Ephemeral Containers The image content in Dockerfile should create containers that are ephemeral and immutable in nature i.e. that the container can be stopped/deleted, then rebuilt and replaced. Use a .dockerignore file Exclude the files and directories in the .dockerignore file that - [Docker Development Best Practices](https://cloudyuga.guru/lesson/docker-development-best-practices/) - The following are the best practices that a developer should follow with Docker: Create Small Images The smaller images are easier to pull over the network and quickly load into memory when containers/services get created. There are a few ways to have a smaller image: Use the appropriate base image. Use multi-stage builds Reduce the - [Deploy Go Application with Docker](https://cloudyuga.guru/lesson/deploy-go-application-with-docker/) - Clone the following GitHub repository with a Go application that will store user information in the MongoDB database. git clone https://github.com/cloudyuga/go-userinfo-app.git && cd go-userinfo-app Install Go first; if you haven’t, according to your operating system, The below command is used to install on linux distribution. wget https://go.dev/dl/go1.20.8.linux-amd64.tar.gz tar -C /usr/local -xzf go1.20.8.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin >> - [Deploy Python Application with Docker](https://cloudyuga.guru/lesson/deploy-python-application-with-docker/) - Clone the GitHub repository git clone https://github.com/cloudyuga/rsvpapp.git && cd rsvpapp Install pip for install python packages apt update && apt install python3-pip -y pip install -r requirements.txt Start the mongodb container, as it will be used as the application database. docker container run -d -p 27017:27017 --name=mongodb mongo:3.6 Run the python app locally python3 rsvp.py Click - [Generate Docker Assets with Docker init](https://cloudyuga.guru/lesson/generate-docker-assets-with-docker-init/) - Docker has introduced a new cli plugin, docker init, with Docker Desktop 4.18, which helps in automating the creation of necessary docker assets such as Dockerfiles, Compose files, and .dockerignore files based on the application tech of the project and the relative directory of its main package. The docker init creates the following Docker assets according to the project: - [Docker API SDKs](https://cloudyuga.guru/lesson/docker-api-sdks/) - Docker provides SDKs for Python and Go for interacting with Docker Engine. These SDKs allow you to build and scale Docker apps easily. Install Go wget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin >> ~/.bashrc source ~/.bashrc go version Create project directory go_client_docker mkdir go_client_docker && cd go_client_docker To track code dependencies, create go.mod file go mod - [Introduction To Docker API](https://cloudyuga.guru/lesson/introduction-to-docker-api/) - As Docker is a REST-API architecture. The docker engine exposes HTTP Rest API calls to manage docker-related operations, and one can use it without Docker CLI. It also provides SDKs for Go and Python, allowing to build and scale Docker applications quickly. The Docker Engine is a RESTful API accessed by an HTTP client such - [Docker APIs(Quiz)](https://cloudyuga.guru/lesson/docker-apisquiz/) - Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Deploy Different Applications with Docker(Quiz)](https://cloudyuga.guru/lesson/deploy-different-applications-with-dockerquiz/) - Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Docker Best Practices(Quiz)](https://cloudyuga.guru/lesson/docker-best-practicesquiz/) - Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-30/) - Create a simple python app using flask. Deploy the application using docker init. Run this app using docker compose up command. Make sure your application should run and expose on localhost. Deploy the following java application using docker init. https://github.com/cloudyuga/rsvpapp-springboot Run this app using docker compose up command. Make sure your application should run and - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-31/) - Change the API version of Docker Engine. (version:1.42) Configure TCP Access using dockerd. Create and deploy a python flask application and run with docker SDK. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-29/) - Write a Dockerfile To build an nginx image with php and mysql packages. Apply Dockerfile Best Practices and build the image again and show the difference in image size. Apply Docker Best Practices and build an apache web server image which includes php and mysql packages. Apply Docker Security Best Practices to build an image - [Module Assignment](https://cloudyuga.guru/lesson/section-assignment-5/) - 1. Analyse image using docker-dive Add dive-in extension in docker desktop. Select your own image stored in the docker hub registry. Explore image layers, total size, efficiency score etc. 2. Compare images using docker scout. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-28/) - 1. Deploy a multi container Wordpress application using the following configuration with the help of Docker Compose file. Frontend service: wordpress:latest Port: :80 Environment variables for frontend: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress Backend service: mysql:5.7 Mount DB volume db_data=/var/lib/mysql Access the application locally on HOST-PORT 2. Write a compose file using the - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-27/) - Configure a journald Logging driver to a specific container and verify the logs. Configure a journald Logging driver as a default docker driver. Run docker info command and verify the default driver is journald. Configure daemon.json file to enable warn and verify log-level key. Configure daemon.json file to enable error and verify log-level key. Take - [Module Assignment](https://cloudyuga.guru/lesson/section-assignment-4/) - 1. Create a volume Create a simple cy.txt file on host machine Run a container using nginx as an image and attach the cy.txt file to the newly created container as a volume. exec the container and list the content of the cy.txt file 2. Share a volume between two containers (you can take the same base image like alpine to create containers) Create - [Module Assignment](https://cloudyuga.guru/lesson/section-assignment-3/) - 1. Change the homepage of an nginx web server. Pull the nginx:stable image Create and run a container and access the webpage from the host system with port number 80. Now, Change the homepage of your choice. (sample homepage is given below) #index.html Hello cloudyuga!!!! You ran - [Module Assignment](https://cloudyuga.guru/lesson/section-assignment-2/) - 1. Build an image from a running container. Create and run the container ubuntu-test using ubuntu as a base image. Install the following packages inside the container flask redis Retrieve the difference in the container after installing the packages. Create an image from the above container with tag /custom-ubuntu:v1 2. Push image to docker hub registry. Push the custom-ubuntu:v1(created - [Module Assignment](https://cloudyuga.guru/lesson/section-assignment/) - 1. Create and run the container with the following : Image : Ubuntu Linux distribution Container name : cloudyuga-test Run the container with bash program. Execute different basic commands : date, ls, cd etc. Exit from the container. Verify that the container is exited. 2. Run a webserver using docker by following the below steps: Pull the image teamcloudyuga/hello-cy that provides a static website - [Module Assignment](https://cloudyuga.guru/lesson/section-assignments/) - 1. Install Docker in your local machine and find out Docker Client and Docker Server version Check and verify the status of Docker service. It should be active. How many containers are running? How many images are available locally? 2. Pull the following images from docker hub registry. Image: nginx:alpine web server Image: alpine distribution of Linux 3. Install Docker Desktop in your local machine. - [Module Assignment](https://cloudyuga.guru/lesson/section-assignments-2/) - 1. Create and run a container using runC. Install runC Install debootstrap,a debian based-system. Create a directory /mnt/chroot-ubuntu-trusty and install Ubuntu distribution in it with debootstrap Create a sample spec in /mnt directory Create a container cy1 and it should run date as its default command. 2. Create a container using containerd container runtime. Install containerd Pull nginx:alpine image from docker-hub registry Create a container from nginx:alpine image Access the webpage using curl command - [Git Common Commands (quiz)](https://cloudyuga.guru/lesson/git-common-commands-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-25/) - Objectives By the end of this module, you should be able to: Create a remote repository on the GitHub Fork a repository under your GitHub account Link a remote repository to your local repository Differentiate between a pull and a fetch Use pull and fetch to download changes/updates from the remote repository Push local changes - [Summary](https://cloudyuga.guru/lesson/summary-23/) - In this module, we learned: To ignore unwanted files/folders using the .gitignore file To correct recent inaccurate commit using the amend command To undo changes made by a specific commit To reset back to a specific commit To update a branch with another commit using the rebase command To save uncommitted changes for later using - [Getting Started with GitHub](https://cloudyuga.guru/lesson/getting-started-with-github/) - We can create a new remote repository in GitHub using the '+' symbol in the top right corner and then clicking on New repository. Enter the relevant details like Repository name, description, and choose Public to make this available to anyone in GitHub or Private so only you or other permitted contributors can access this repository. After filling in the information, click Create Repository to create - [Remote Repository](https://cloudyuga.guru/lesson/remote-repository/) - In simple words, a remote repository in Git, also known as remote, is a Git repository that’s hosted on the Internet or another network. This remote repository can be present in the GitHub server, production server, some other developer machine, etc. The following figure shows a simple example of a remote repository: Let’s try to - [Getitng and Publishing changes to GitHub](https://cloudyuga.guru/lesson/getitng-and-publishing-changes-to-github/) - There are following two ways to get changes from GitHub to your local repository: git fetch git pull And, to publish the changes to GitHub, we need to use the git push command. Take Quiz Complete Lesson Next Lesson Reset Lesson - [git fetch](https://cloudyuga.guru/lesson/git-fetch/) - The git fetch command will download the remote content to our local repository, but it will not update our local repo's working state. Assuming you are in /root/git-gh-course working directory, the one that you have cloned from the previous chapter.(your forked repository) Run the following command to get the latest changes from our upstream GitHub remote repository: git fetch You should - [Ignoring Unwanted Files](https://cloudyuga.guru/lesson/ignoring-unwanted-files/) - Git ignore While working on projects, there might be some unwanted files that might not be directly related to the project code base but rather some helper files like logs, temporary files, etc. We might not want to share these files with others and push them to the remote repositories. We can specify which files - [Git Amend](https://cloudyuga.guru/lesson/git-amend/) - The git amend command will help us modify the most recent commit. It is very helpful in a situation where we don’t want to create another commit for new staged changes as we can combine these changes with the previous commit through git amend. We can also change the previous commit message without even changing its snapshot. - [Forking Repository](https://cloudyuga.guru/lesson/forking-repository/) - A fork is a copy of a repository. When we fork a repo in GitHub, we get a copy of the entire project under our account. This allows us to freely experiment with changes per our needs without affecting the original project. Follow the instructions below to fork the cloudyuga/git-gh-course under your account. At the repository page, - [Git Revert](https://cloudyuga.guru/lesson/git-revert/) - The git revert command lets us undo changes made by a specific commit in the commit history. It creates a new commit without the changes of that specific commit while keeping the git log intact. It is also used to remove the commits from the remote repository. Assuming you are in the /root/git-gh-course repository. Run the following set of commands to see its working: mkdir - [Git Reset](https://cloudyuga.guru/lesson/git-reset/) - The git reset command moves the branch head to a previous commit, removing all the commits made after it. It is used when a user wants to unstaged files and brings changes back to the working directory. NOTE: The git reset command might remove the untracked and staged changes as well. So we need to use it very carefully. - [Git Rebase](https://cloudyuga.guru/lesson/git-rebase/) - Rebasing is the process of moving a branch/commit to a new base commit. It's most often done in a feature branching setup where the base branch has had new commits/changes we want in our feature branch. Example Let's start by creating a new feature branch with the name curiosity. Assuming you are in the /root/git-gh-course working directory. git checkout - [Git Stash](https://cloudyuga.guru/lesson/git-stash/) - The git stash command enables you to temporarily save your uncommitted changes made in a branch to be used later. Stash will save all the uncommitted files in the branch i.e. both staged and unstaged files that are present. The most common use case for the stash command is when a user starts working in a branch they were not supposed - [Git Cherry-pick](https://cloudyuga.guru/lesson/git-cherry-pick/) - The git cherry-pick is a very powerful command that helps when we only want to have selective commits from a feature branch to the main branch. This is a very useful command during team collaboration. Bug hotfixes When a bug is discovered in the Live website then this command comes in handy as then we can select the specific - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-6/) - Complete the following tasks: Clone the following repository to your local system: https://github.com/cloudyuga/rsvpapp and navigate inside it. Delete the .git directory. Initialize a new git repository in that directory. Make some changes in the templates/profile.html file. Add all the files to the staging area and commit them to the new repository. Verify that the working tree is clean. Take Quiz Complete - [Git Lifecycle (quiz)](https://cloudyuga.guru/lesson/git-lifecycle-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-7/) - Complete the following tasks: Create a new directory named "project007" and initialize it as a Git repository. Create files named index.html, background, and test123 in the directory. Also, add some content to each. Add the index.html file to the staging area. Check the status of the repository. Make some changes to the index.html file and use the git diff command to view the - [Git Security and adding SSH in GitHub](https://cloudyuga.guru/lesson/git-security-and-adding-ssh-in-github/) - So far, we have worked with a Git repository URL with https protocol like while cloning the repo from GitHub. However, if we need more security then we should use SSH. As we have seen in the Introduction to Linux course, SSH is a network protocol mainly used in secured network management, securely transferring files, and securely accessing remote systems. The SSH - [Introduction to Version Control Systems (VCS) (quiz)](https://cloudyuga.guru/lesson/introduction-to-version-control-systems-vcs-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to Git and GitHub (quiz)](https://cloudyuga.guru/lesson/introduction-to-git-and-github-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Installation and Setting Up (quiz)](https://cloudyuga.guru/lesson/installation-and-setting-up-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-21/) - By the end of this module, you will be able to: Install and configure Git on your local system Setup your GitHub account for your remote repositories Take Quiz Complete Lesson Next Lesson Reset Lesson - [Installation and Setting Up Git](https://cloudyuga.guru/lesson/installation-and-setting-up-git/) - Note: The following lesson provides instructions for creating a Git account, a prerequisite for the tasks covered in this particular chapter. You can download the Git binary for any preferred Operating System from their official website. Go through the following steps to install Git: Visit the official website downloads page - https://git-scm.com/downloads Click on the OS - [GitHub Account Creation and Setting Up](https://cloudyuga.guru/lesson/github-account-creation-and-setting-up/) - In this chapter, we will learn how to create a GitHub account. Go through the following steps to create an account in GitHub. Visit GitHub and click Sign Up Click on the https://github.com and click on the “Sign Up” button on the right. You should be getting the following page to enter your email address. Enter your email - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-22/) - Take Quiz Complete Lesson Next Lesson Reset Lesson By the end of this module, you will be able to: Understand why Git is the preferred tool for Version Control in the industry Learn why GitHub is the most popular remote companion for Git - [Introduction to Git](https://cloudyuga.guru/lesson/introduction-to-git/) - Git is a free and open-source distributed version control tool originally created by Linus Torvalds in 2005 for the development of the Linux kernel. It can handle everything from small to very large projects with speed and efficiency. It is quite easy to learn and has many amazing features which make it one of the most popular version control tools. Read more about Git in-depth - [Introduction to GitHub](https://cloudyuga.guru/lesson/introduction-of-github/) - GitHub, Inc., is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git, access control, bug tracking, software feature requests, task management, continuous integration, and wikis for every project. It is commonly used to host open source software development projects.Visit the GitHub website to understand more about it. Why - [Summary](https://cloudyuga.guru/lesson/summary-20/) - In this module, we learned: Why Git is the preferred tool for Version Control in the Industry Why GitHub is the most popular remote companion platform for Git Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to VCS](https://cloudyuga.guru/lesson/introduction-to-vcs/) - What is VCS? A version control system tracks and manages changes to software code, files, documents, or other collections of information over time so that we can recall specific versions later. These are tools that help software development teams to manage the changes happening to source code over time. It helps software teams to work faster and smarter. - [Summary](https://cloudyuga.guru/lesson/summary-21/) - In this module, we learned: About what Version Control Systems are why we need them About the various Version Control Systems in the market About the different types of Version Control Systems Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-23/) - By the end of this module, you will be able to: Comprehend what Version Control is and why we need it Learn about the various Version Control System in the market Understand the various types of Version Control Systems Take Quiz Complete Lesson Next Lesson Reset Lesson - [git pull](https://cloudyuga.guru/lesson/git-pull/) - The git pull command is used to download content from a remote repository and then immediately update the local repository to match that content. The git pull command is actually a combination of two other commands i.e git fetch followed by git merge. In the first stage, git pull will execute a git fetch scoped to the local branch that HEAD is pointed at. Once the content is - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-3/) - Complete the following tasks (Work on the same forked repository given in the last module assignment): Ignore the given file from tracking: LICENSE Save and commit the changes. Create a new branch, switch to it, add a newly created file to the branch, and commit the changes. Switch back to the master branch. Add the following line at - [git push](https://cloudyuga.guru/lesson/git-push/) - At the point of development, when you are done with your feature branch, you need to publish your changes to the main repository of the GitHub remote. Perform the following set of commands to create a branch, add your changes, commit it, and then push your branch to your own forked repository. Assuming that you - [Types of Version Control Systems (VCS)](https://cloudyuga.guru/lesson/types-of-version-control-systems-vcs/) - There are three types of Version Control Systems. Local Version Control Systems The Local Version Control System (LVCS) is a type of VCS sometimes used by solo developers. In this type, collaboration is not the main focus of the system. A local database is maintained on your computer and every file change is stored as a - [Creating and Merging Pull Request](https://cloudyuga.guru/lesson/creating-and-merging-pull-request/) - Now, the feature branch is in our forked repository in GitHub. We need to get these changes merged in the original repository so that these changes are available for other developers. To achieve this, we need to create a Pull Request. Create Pull Request To create pull requests, click on the Pull Requests tab on the repository page. - [Summary](https://cloudyuga.guru/lesson/summary-22/) - In this module, we learned: How to create a new remote repository To fork a remote repository to our account To link remote repository to our local repositories To use pull and fetch to download changes from the remote repository To push the local changes to the remote repository How to create and merge pull - [Git and GitHub Advanced Concepts (quiz)](https://cloudyuga.guru/lesson/git-and-github-advanced-concepts-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-4/) - Complete the following tasks: Fork the given repository to your GitHub account: https://github.com/cloudyuga/rsvpapp/ Clone the repository to your local system. Create a new branch, and add a file named alienware (with some content in it) to it, and commit the changes. Push the new changes to the remote repository. Go to your GitHub account repository and create a - [Working with Remote Repositories (quiz)](https://cloudyuga.guru/lesson/working-with-remote-repositories-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-24/) - In this module, we learned: How to create a new remote repository To fork a remote repository to our account To link remote repository to our local repositories To use pull and fetch to download changes from the remote repository To push the local changes to the remote repository How to create and merge pull - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-5/) - Complete the following tasks: Clone the following repository in a new directory: https://github.com/cloudyuga/rsvpapp/ Create a new branch inside and switch to the newly created branch. Add a new file with some content in it. Stage and commit the changes to the new branch. Rename the new branch to excellentFeature. Merge the branch with the master branch. Remove - [Working with Git Branches (quiz)](https://cloudyuga.guru/lesson/working-with-git-branches-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Merging and Deleting a Branch](https://cloudyuga.guru/lesson/merging-and-deleting-a-branch/) - Once we are done with our changes in a branch, we need to get our changes to the main branch. The merging allows us to bring all of the new commits from another branch into our current HEAD branch. Merging allows us to bring changes from one of the branches to another branch. In the /root/git-gh-course working directory, let's merge the intro branch - [Resolving Merge Conflicts](https://cloudyuga.guru/lesson/resolving-merge-conflicts/) - What is a Merge Conflict, and why does it occur? When working with git in collaboration with others or even alone, there sometimes could be conflicting changes made to the same line of code in a file. If Git tries to merge these branches, a merge conflict occurs. Merge conflicts occur when Git by itself is unable - [Summary](https://cloudyuga.guru/lesson/summary-16/) - In this module, we learned: About git branches To create and work on new branches How to switch to different branches To rename existing branches To merge changes from one branch to another To delete a branch Take Quiz Complete Lesson Next Lesson Reset Lesson - [Creating a Branch](https://cloudyuga.guru/lesson/creating-a-branch/) - Assuming that you are already in the cloned git-gh-course repository. Let's create a new branch with the name branch1 by running the following command: git branch branch1 Now, if you run following command then you will see the list of branches: git branch NOTE: The * character indicates the current branch you are in. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Switch and Checkout commands](https://cloudyuga.guru/lesson/switch-and-checkout-commands/) - Switching Git Branch Let's switch to the newly created branch to work on it in the /root/git-gh-courseworking directory. Run the following command to switch to the branch1 branch: git switch branch1 You will see the message Switched to branch 'branch1' Checkout to Branch Similar to git switch, git checkout also lets you switch branches but also lets you perform some additional functions. - [Renaming a Branch](https://cloudyuga.guru/lesson/renaming-a-branch/) - We can rename the branch by providing -m flag to the git branch command. Let’s rename the current branch branch2 to some meaningful name like intro where we will add our introduction. NOTE: We switched to branch2 . Run the following command to rename the branch and see the current branch: git branch -m intro; git branch Renaming other branches We can also rename other branches - [Useful Git Commands](https://cloudyuga.guru/lesson/useful-git-commands/) - Useful Git Commands Switch back to the /root/git-gh-course directory, where we have cloned the repository and learn about the below commands by executing it. git add This command will add specific file(s) to the Staging Area from your working directory. Syntax: git add [ ] However, we can use the following options as well: git add . or git add - [Summary](https://cloudyuga.guru/lesson/summary-17/) - In this module, we learned: Basic flow of local git repositories with git commit cycle Various options with git add command and commit files to local git repository Performed other useful git commands Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-18/) - By the end of this module, you will be able to: Tell what are branches in git Create and work on a new branch Use git switch and git checkout commands to work on different branches Rename existing branches Merge changes from one branch to another Delete a branch Take Quiz Complete Lesson Next Lesson - [Git Branches](https://cloudyuga.guru/lesson/git-branches/) - Git branches are one of the key components in Git that allow us to develop features, fix bugs, or safely experiment with new ideas in a contained area of our repository. It also helps in collaboration among developers. We can perform many operations like creating and deleting branches, renaming and publishing them, switching and comparing them with each other, etc. In - [Summary](https://cloudyuga.guru/lesson/summary-18/) - In this module, we learned: How to create new local Git repositories To configure local settings for a git repositories About the difference between working and staging areas To stage and commit changes to a Git repository Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-19/) - By the end of this module, you will be able to: Understand the basic flow of local git repositories with git commit cycle Explore more options with git add command and commit files to the local git repository Execute other common git commands Take Quiz Complete Lesson Next Lesson Reset Lesson - [Git Commit Cycle](https://cloudyuga.guru/lesson/git-commit-cycle/) - A Git repository usually works in the following pattern. Let’s see this pattern in action. We already cloned the git-gh-course repository in the previous module (Git Lifecycle). We will be going to use that only. If you haven't cloned the repository, do it in the /root directory and follow the Git lifecycle module instructions to proceed further in this lab. git - [Local Git Config File](https://cloudyuga.guru/lesson/local-git-config-file/) - A configuration file in each Git repository that stores the local-level configurations specific to the project. Let’s try setting up the email, full name, and editor locally by initializing an empty git repository first. Run the following set of commands: git init # To initialize a git repository git config user.name "" # add your full name git - [Git Lifecycle](https://cloudyuga.guru/lesson/git-lifecycle/) - There are generally 4 stages in a git repository. I: Working Directory Any directory in your local system could be considered a working directory. A directory tracked by git (git init command was executed) is usually part of a git repository. A tracked directory will have a hidden .git directory inside containing all the tracking information. All the changes made - [Working Directory and Staging Area](https://cloudyuga.guru/lesson/working-directory-and-staging-area/) - After cloning the repository in the Create a Git Repository chapter, you should now be able to work with the git-gh-course folder. If you haven't cloned it then clone it by executing the following command. git -C /root clone https://github.com/cloudyuga/git-gh-course.git && cd /root/git-gh-course Now, try to create the following files in this directory. echo "Hello Git" > hello.txt && - [Git Commit and the Local Repository](https://cloudyuga.guru/lesson/git-commit-and-the-local-repository/) - Finally, we need to commit those changes so that these changes get saved. When we save the changes, it goes into the local repository, which is actually the .git directory. It mainly contains our checkpoints or commits. When we perform a commit, we simply tell Git to take a snapshot to track the progress changes that have occurred since our - [Summary](https://cloudyuga.guru/lesson/summary-19/) - In this module, we learned: How to install and configure Git on your local system To setup you GitHub account for your remote repositories Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-20/) - By the end of this module, you will be able to: Create a Git repository in a new or existing directory Configure local git settings Understand the various levels of a git lifecycle Move files from staging to committed state Take Quiz Complete Lesson Next Lesson Reset Lesson - [Create a Git Repository](https://cloudyuga.guru/lesson/create-a-git-repository/) - We can create a Git repository using Git through the following approaches: Existing Folder If we want to convert existing folder into Git repository, then we need to run following command inside the folder: git init You will notice that there is a hidden folder .git now which you can verify by running ls command: ls -a New Folder - [Docker Container Logs](https://cloudyuga.guru/lesson/docker-container-logs/) - 1. How to display logs of a container ? By default, Docker supports JSON logging drivers. container logs stored in /var/lib/docker/containers//-json.log file. Create and run a container docker container run -it --name cy-json-log ubuntu echo "cloudyuga" View container logs docker container logs cy-json-log We can configure different types of logging drivers as per our use cases. 2. - [Summary](https://cloudyuga.guru/lesson/summary-10/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: About Docker API and interacted with Docker Engine through API Interacted with Docker Engine with Go SDK - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-11/) - By the end of this module, you will be able to: Understand Docker API and interact with Docker Engine through API Interact with Docker Engine with Go SDK Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-9/) - In this module, we learned: Working of docker init and creation of docker assets Containerizing different application stacks Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-10/) - By the end of this module, you will be able to: Understand working of docker init with Docker Desktop Create Docker assets with docker init Containerize different application stacks Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-8/) - In this module, we learned: Know best practices for development with Docker. Learn about the best practices for creating a Dockerfile. Know various security-related best practices for Docker image Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-9/) - By the end of this module, you will be able to: Know best practices for development with Docker. Learn about the best practices for creating a Dockerfile. Know various security-related best practices for Docker image Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-51/) - In this module, we learned: About different image analysis tools that will be useful to improve our images. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-8/) - By the end of this module, you will be able to: Analyze images using different tools like docker-dive, docker-squash, docker-scout, etc. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-7/) - In this module, we learned: About deploying multi container application using single command. About docker compose services & its attributes like, environment variables, profiles, extends, etc. About automated build if any changes happen in files under the watch attribute. About secrets in compose file. About controlling the order of containers running through compose file. Take - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-7/) - By the end of this module, you will be able to: How to deploy multi container application in one go. Docker compose services & its attributes like, environment variables, profiles, extends, etc. How to trigger automated build if any changes found in files under the watch attribute. Secrets in compose file. How to control the - [Summary](https://cloudyuga.guru/lesson/summary-6/) - In this module, we learned: Docker logging in detail. How to configure logging drivers for container logs. How to view Docker daemon logs. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-6/) - By the end of this module, you will be able to: Understand what is logging & why it is important? Set different logging drivers to view container logs for different use cases. View Docker daemon logs. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-5/) - In this module, we learned: About storage layers. About Volumes, Bind Mounts, tmpfs in detail. About Storage Management with Docker Desktop. About Volume sharing between two containers. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-5/) - By the end of this module, you will be able to: Understand the storage layers and Copy On Write concept. Mount docker volumes with the containers using volumes, bind mounts, tmpfs options. Understand storage management using Docker Desktop. Share a volume between two containers. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-3/) - In this module, we learned: Basic networking concepts along with networking drivers. Perform networking operations like, extract ip address, expose application via port-mapping, create custom network. How to find out other containers connected through the same custom network. Previous Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-3/) - By the end of this module, you will be able to: Understand basic networking concepts along with networking drivers. Perform networking operations like, extract ip address, expose application via port-mapping, create custom network, etc. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-2/) - In this module, we learned: Image operations like, search, pull, inspect, etc. How to write Dockerfiles? Assemble an images using Dockerfiles. Tag the images and push the image to the DockerHub for future use. Create multistage Dockerfile to build an efficient image that is smaller in size. Create images that supports multiple platforms like arm64, - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-2/) - By the end of this module, you will be able to: Perform basic image operations like, search, pull, inspect etc. Understand how to write Dockerfiles. Assemble an images using Dockerfiles. Tag the images and push the image to the docker hub for future use. Create multistage Dockerfile to build an efficient image that is smaller - [Summary](https://cloudyuga.guru/lesson/summary/) - In this module, we learned: About how to work with containers by doing different operations on it. About how to limit the resources of a container. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-4/) - By the end of this module, you will be able to know: Basic container operations like create a container, display logs of the container, remove containers, etc. Resource allocation to the containers. Advance container operations like create new process inside a running container, set restart policy, labels, filters and many more. Take Quiz Complete Lesson - [Summary](https://cloudyuga.guru/lesson/summary-4/) - In this module, we learned: About Docker along with it's architecture. About the Docker Engine and it's installation. About Docker Desktop, DockerHub and Docker context. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-51/) - By the end of this module, you will be able to know: Docker in detail with it's Architecture Docker Engine and it's Installation How does Docker Desktop work? A widely used Container Registry - DockerHub What is Docker Context? Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives/) - By the end of this module, you will be able to know: What are containers and why are they widely used in software industry. Difference between VMs and Containers. Origin of the containers. The building blocks of the container. Different kinds of container runtimes & which container runtime will be suitable for your application. Take - [Summary](https://cloudyuga.guru/lesson/summary-50/) - In this module, we learned: About containers basics with the history and building blocks. About the difference between VMs and Containers. About different types of container runtimes. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup Details](https://cloudyuga.guru/lesson/lab-setup-details-5/) - Doing hands-on is very important to follow and learn the course content as it helps students understand the concepts easily. In this Docker course, we recommend you do hands-on as you proceed. In this lessons, we have mentioned how you can perform lab operations of this course on your local system, regardless of your operating - [Welcome](https://cloudyuga.guru/lesson/welcome/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Welcome to CloudYuga Technologies!!! We're thrilled to have you enrolled in our course. Get ready for an exciting learning journey ahead. If you have any questions or need assistance along the way, don't hesitate to reach out. Let's dive in and explore together! - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction-9/) - Welcome to the world of container fundamentals with Docker! In this guide, we'll start a journey to explore the core concepts and practical applications of containerization using Docker. Whether you're a newcomer curious about containers or a seasoned developer looking to deepen your understanding, join us as we will deliver the foundational principles and techniques - [Test Module 1 Lesson 1](https://cloudyuga.guru/lesson/test-module-1-lesson-1/) - Flashcard Video progress: 0% rewatch the video!!! List Item 1 List Item 2 List Item 3 List Item 4 List Item 5 This is the highlighted sentence Git Branches Git branches are one of the key components in Git that allow us to develop features, fix bugs, or safely experiment with new ideas in a - [Module Slides](https://cloudyuga.guru/lesson/module-slides-11/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-17/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-16/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-15/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-14/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-13/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-12/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-10/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-9/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-8/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-7/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-6/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-5/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Slides](https://cloudyuga.guru/lesson/module-slides/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [System Security Quiz](https://cloudyuga.guru/lesson/system-security-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Networking Quiz](https://cloudyuga.guru/lesson/networking-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Linux Processes Quiz](https://cloudyuga.guru/lesson/processes-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Installation and Upgrade Quiz](https://cloudyuga.guru/lesson/installation-and-upgrade-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Users, Groups and Permission Management Quiz](https://cloudyuga.guru/lesson/user-permissions-and-management-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Linux Filesystem Quiz](https://cloudyuga.guru/lesson/linux-filesystem-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Package Management Quiz](https://cloudyuga.guru/lesson/package-management-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Managing Linux Service Quiz](https://cloudyuga.guru/lesson/managing-linux-service-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Linux System Startup Quiz](https://cloudyuga.guru/lesson/linux-system-startup-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Linux Commands Quiz](https://cloudyuga.guru/lesson/linux-commands-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Text Editors and Tmux Quiz](https://cloudyuga.guru/lesson/text-editors-and-tmux-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to Linux Quiz](https://cloudyuga.guru/lesson/introduction-to-linux-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Operating System Overview Quiz](https://cloudyuga.guru/lesson/operating-system-overview-quiz-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Course Feedback](https://cloudyuga.guru/lesson/course-feedback/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Loading… - [Extend a compose file](https://cloudyuga.guru/lesson/extend-a-compose-file/) - Why we need to extend a compose file ? When we want to reuse the code in multiple services or projects we will relay on extend attribute of service specification. Note: For multiple compose files the path should be relative to the base compose file. How to extend a compose file ? Let's understand with - [Controlling the Order of Containers](https://cloudyuga.guru/lesson/controlling-the-order-of-containers/) - How to control the order of containers in docker compose? We can control the order of containers by using the depends_on attribute in the service specification. Before starting the dependent service we need to check the status of the dependency service. If dependency service is enabled compose will start the dependent service. we will use the healthcheck attribute to - [Using Secrets with Docker Compose](https://cloudyuga.guru/lesson/using-secrets-with-docker-compose/) - How to create and extract secrets using Docker Compose ? Sensitive information has to be defined in secret file. Secrets are an important aspect of container security. It may secure, Configuration variables SSH keys Passwords API tokens Private certificates Other data that shouldn’t be accessible to everyone. Let's understand with example, Create a folder called cy-secret or any - [Automatic Build Initiated when Changes Triggered in Docker Compose File](https://cloudyuga.guru/lesson/automatic-build-initiated-when-changes-triggered-in-docker-compose-file/) - How to build an image for a custom application & keep an eye on any changes triggered in project files using docker compose ? Let's understand with example, Create a folder called cy-app or any name and change working directory. mkdir cy-app cd cy-app/ First, We will create a python application, a requirements file and a Dockerfile. Next, we'll construct a - [Using Service Profiles](https://cloudyuga.guru/lesson/using-service-profiles/) - How to start a specific service ? By default, The docker compose commands will start, stop, restart or build all of the services (containers) declared in a docker-compose.yaml file. But there is also a way to target the specific containers only. Let's take an example of RSVP App. Create a folder called rsvp-svc or any name and change working directory. mkdir - [Managing Environment Variable with Compose](https://cloudyuga.guru/lesson/managing-environment-variable-with-compose/) - Take Quiz Complete Lesson Next Lesson Reset Lesson How to manage environment variables in the docker-compose file ? Environment variables can be, Written in .env file and access via ${VAR_NAME}. Written in any .env file and access through env_file attribute in docker compose. Written directly in compose file using environment attribute. Let's take an example of RSVP app. Create a folder called rsvp-env or - [Working with Docker Compose](https://cloudyuga.guru/lesson/working-with-docker-compose/) - How to install Docker Compose ? By default, docker compose is enable with Docker Engine if we install Docker using script file. Follow our Getting Started with Docker > Docker Engine section to install Docker. Verify docker compose installation using version command. docker compose version If Docker does not enable docker compose by default, Please follow the - [Docker Daemon Logs](https://cloudyuga.guru/lesson/docker-daemon-logs/) - Daemon Logs are used to find out the issues in docker daemon. 1. How to read daemon logs ? To read daemon logs in Linux disributions, journalctl -fu docker.service Here, docker supports a default log level. 2. How to enable debugging ? Open the daemon.json file from /etc/docker/ folder. If the daemon.json file is not present. We need to create a file, - [Share Volume between Two Containers](https://cloudyuga.guru/lesson/share-volume-between-two-containers/) - How to share a volume between multiple containers? Create a volume, docker volume create --name myvol Create a container and attach a volume docker run -it --name=vol-cont-1 -v myvol:/data alpine Create a text file in container (/data dir) echo "hello world from vol-cont-1 container!" > /data/hello.txt Now, create another container to share files with previous one. - [tmpfs - Mounting from Memory](https://cloudyuga.guru/lesson/tmpfs-mounting-from-memory/) - What is tmpfs mount ? To create tmpfs mounts, we don’t have to create a directory/files in our host file system. We have to mention the target file path only. It will create the directory/files on its own. The data is written on to the host’s memory and removed when the container is stopped. If we create a container with a tmpfs mount then - [Bind Mounts - Mounting from Host](https://cloudyuga.guru/lesson/bind-mounts-mounting-from-host/) - How to use Bind Mount via --mount flag ? It allows us to bind a directory inside a container. It is used to bind a specific directory on the host to a specific directory on the container. Create a folder mount-demo on host machine, write index.html file in this folder. mkdir mount-demo cd mount-demo vim index.html #index.html - [Creating User-Defined Networks](https://cloudyuga.guru/lesson/creating-user-defined-networks/) - How to create a user defined network in Docker ? With the docker network create command we can create a new user defined network. Like here we are creating a new user defined network mynet. sudo docker network create mynet How to create a container and attach it to the network? By passing the network name with --network option along - [Advanced Docker Networking Operations](https://cloudyuga.guru/lesson/advanced-docker-networking-operations/) - How to share the network namespace between containers ? With --network=container:CONTAINER_ID/CONTAINER_NAME option to the docker container run command, we request Docker daemon to share the network namespace of an existing container. The existing container is referred by CONTAINER_ID/CONTAINER_NAME. Let us get an IP address of an exisitng container web using docker container exec command Create a container web using the following command if - [Exposing Applications Publicly with Port Mapping](https://cloudyuga.guru/lesson/exposing-applications-publicly-with-port-mapping/) - How to expose a container port on a specific port of the host system ? The IP address which container get is not routable from the external world. To access the container from the external world we would need to map a port of host system with the container's port. With the -p option to the docker container - [Single Container Logs](https://cloudyuga.guru/lesson/single-container-logs/) - kubectl logs and exec Syntax for logs kubectl logs POD [-c CONTAINER] [--follow] [flags] Syntax for exec kubectl exec POD [-c CONTAINER] -- COMMAND [args...] Let's take an example of a single container pod apiVersion: v1 kind: Pod metadata: name: single-container-logs spec: containers: - name: first-container image: teamcloudyuga/busybox:1.28 args: - /bin/sh - -c - > - [MultiContainer Logs](https://cloudyuga.guru/lesson/multicontainer-logs-2/) - Labs For multiple containers, we use the following syntax kubectl logs -c Let's apply the multi-container pod config apiVersion: v1 kind: Pod metadata: name: multi-container-logs spec: containers: - name: first-container image: teamcloudyuga/busybox:1.28 args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" i=$((i+1)); sleep 3; done - name: second-container - [Resource Consumption Monitoring](https://cloudyuga.guru/lesson/resource-consumption-monitoring-3/) - Prerequisites To see whether metrics-server (or another provider of the resource metrics API, metrics.k8s.io) is running, type the following command kubectl get apiservices | grep metrics If there is no metrics server running in the Kubernetes cluster then you can deploy it as follow. [Deploy only if there is no metrics server running in your - [Adapter](https://cloudyuga.guru/lesson/adapter/) - Here we will have two containers: app container adapter container Create a Deployment Configuration apiVersion: apps/v1 kind: Deployment metadata: name: adapter-pattern-deploy spec: replicas: 1 selector: matchLabels: app: adapterpattern template: metadata: labels: app: adapterpattern spec: volumes: - name: shared-logs emptyDir: {} containers: - name: app image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 volumeMounts: - name: shared-logs mountPath: - [Ambassador](https://cloudyuga.guru/lesson/ambassador/) - Ambassador container brokers interactions between the application container and the rest of the world. The two containers are tightly linked in a symbiotic pairing that is scheduled to a single machine. It is usually used with service brokers and shared databases. Labs Explore the frontend application Our frontend python application contains following code: Take Quiz Complete Lesson Next - [Sidecar](https://cloudyuga.guru/lesson/sidecar/) - Create tls keys Execute the following command from the terminal openssl req -x509 -newkey rsa:2048 -keyout tls.key -out tls.crt -nodes -subj '/CN=echo-server' Create a Kubernetes Secret kubectl create secret tls http-tls --cert=tls.crt --key=tls.key Create nginx config using configmap kubectl create cm nginx-conf --from-file nginx.conf Create deployment using the command below kubectl apply -f deploy-with-sidecar.yml Create - [Init Containers](https://cloudyuga.guru/lesson/init-containers-2/) - Init containers are one or more containers in a pod that run and complete their execution before other application containers start. An init container is exactly like a regular container, except that it always runs to completion and Execution of each init container must be successfully completed before the next container is started. To see - [Service Accounts](https://cloudyuga.guru/lesson/service-accounts-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Creating Roles and RoleBinding using RBAC](https://cloudyuga.guru/lesson/creating-roles-and-rolebinding-using-rbac-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Authorization (RBAC)](https://cloudyuga.guru/lesson/authorization-rbac-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [User Authentication using x-509 certificate (Public/Private Key Encryption)](https://cloudyuga.guru/lesson/user-authentication-using-x-509-certificate-public-private-key-encryption-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Authentication](https://cloudyuga.guru/lesson/authentication-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [ImagePullSecret](https://cloudyuga.guru/lesson/imagepullsecret-2/) - Deploy a Pod using Private Docker Image kubectl run mypod --image=nkhare/nginx1:1.10 kubectl get pods kubectl describe pod mypod Create a Docker Registry Secret A Kubernetes cluster uses the Secret of docker-registry type to authenticate with a container registry to pull a private image. Set some environment variables export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/ export DOCKER_USER= export DOCKER_EMAIL= export DOCKER_PASSWORD= - [Using Secrets as Environment Variables](https://cloudyuga.guru/lesson/using-secrets-as-environment-variables-2/) - Create a configuration file for the pod as shown below where we have given the Environment variable via secret. apiVersion: v1 kind: Pod metadata: name: secret-env spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never Take - [Basic Docker Networking Operations](https://cloudyuga.guru/lesson/basic-docker-networking-operations/) - How to list the available networks after starting the Docker daemon ? With docker network ls command, we can list available networks with Docker Daemon. sudo docker network ls How to get the IP address of a running container ? Let us start a container from nginx image and name it as web. sudo docker container run -d --name web - [Secrets](https://cloudyuga.guru/lesson/secrets-2/) - Create a Secret Suppose we want to share the secret value cloudyuga as username and cloudyuga123 as password value in the Kubernetes Secret specification file. For this we would first encode the values as below: echo -n cloudyuga | base64 echo -n cloudyuga123 | base64 From the above encoded data, create a configuration file for creating the secret apiVersion: v1 kind: - [ConfigMaps as Volumes](https://cloudyuga.guru/lesson/configmaps-as-volumes-2/) - Create the following Pod configuration file to demonstrate ConfigMaps as volume Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: config-volume spec: containers: - name: test-container image: teamcloudyuga/nginx:alpine volumeMounts: - name: config-volume mountPath: /tmp/config volumes: - name: config-volume configMap: name: customer1 restartPolicy: Never In this file, the configuration data enclosed - [ConfigMaps as Environment Variables](https://cloudyuga.guru/lesson/configmaps-as-environment-variables-2/) - Let's create the following YAML configuration file in which we have used the environment variables from the ConfigMaps Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: rsvp spec: replicas: 1 selector: matchLabels: app: rsvp template: metadata: labels: app: rsvp spec: containers: - name: rsvp-app image: teamcloudyuga/rsvpapp env: - name: - [ConfigMaps](https://cloudyuga.guru/lesson/configmaps-2/) - Create ConfigMaps Create a ConfigMap using the below configuration file Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: ConfigMap metadata: name: customer1 data: TEXT1: Customer1_Company TEXT2: Welcomes You COMPANY: Customer1 Company Technology Pvt. Ltd. Deploy the ConfigMap from the above yaml file kubectl apply -f config.yaml Get the list of ConfigMaps kubectl - [StatefulSets](https://cloudyuga.guru/lesson/statefulsets-2/) - Create a statefulSet Create a mongodb statefulset apiVersion: v1 kind: Service metadata: name: mongo spec: ports: - port: 27017 name: peer clusterIP: None selector: app: mongo --- apiVersion: v1 kind: ConfigMap metadata: name: mongo-init data: init.sh: | #!/bin/bash # Need to wait for the readiness health check to pass so that the # mongo names - [Introduction](https://cloudyuga.guru/lesson/introduction-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Dynamic Volume Provisioning](https://cloudyuga.guru/lesson/dynamic-volume-provisioning-2/) - List the StorageClasses kubectl get storageclass kubectl describe sc local-path Deploy the Backend and Frontend Applications apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-claim spec: accessModes: - ReadWriteOnce storageClassName: local-path resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: rsvp-db spec: replicas: 1 selector: matchLabels: appdb: rsvpdb template: metadata: labels: appdb: rsvpdb spec: volumes: - [Static Volume Management](https://cloudyuga.guru/lesson/static-volume-management-2/) - Creating a Persistent Volume Make a configuration file for Persistent volume (PV) as shown below. This will create a PV of 1 GB kind: PersistentVolume apiVersion: v1 metadata: name: pv0001 labels: type: local spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/data01" Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy a PV with - [Nodeselector](https://cloudyuga.guru/lesson/nodeselector-2/) - Create a pod using the Node selector apiVersion: v1 kind: Pod metadata: name: pod-demo labels: env: test spec: containers: - name: pod-node image: teamcloudyuga/nginx:1.9.1 nodeSelector: disktype: ssd Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the pod kubectl apply -f nodeselector-pod.yaml Check the status of the recently deployed pod kubectl get po The pod - [DaemonSets](https://cloudyuga.guru/lesson/daemonsets-2/) - Create a DaemonSet using a configuration file Get the list of Nodes available in your cluster kubectl get nodes Create a DaemonSet using a configuration file apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-ds spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 ports: - containerPort: 80 Take - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/lesson/setting-up-resource-quota-for-a-namespace-2/) - Create a Resource-Quota object for a Namespace Create a namespace kubectl create namespace quota-mem-cpu-example Create a resource quota for that namespace Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu namespace: quota-mem-cpu-example spec: hard: requests.cpu: "0.5" requests.memory: 512Mi limits.cpu: "1" limits.memory: 1Gi kubectl apply -f quota.yaml Describe the resource quota for that namespace - [Setting up defaults using LimitRange](https://cloudyuga.guru/lesson/setting-up-defaults-using-limitrange-2/) - Define a LimitRange to set Default requests and limits Define the LimitRange apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 512Mi defaultRequest: memory: 256Mi type: Container Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f mem-limit-range.yaml kubectl describe limitrange mem-limit-range Deploy the app with no requests and limits defined apiVersion: v1 kind: Pod - [Requests and Limits](https://cloudyuga.guru/lesson/requests-and-limits-2/) - Create a Pod with defined requests and limits apiVersion: v1 kind: Pod metadata: name: nginx-requests-limits labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 resources: limits: memory: "400Mi" cpu: "0.3" requests: memory: "300Mi" cpu: "0.2" Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f pod-requests-limits.yaml kubectl get pods - [Managing Resources in Kubernetes](https://cloudyuga.guru/lesson/managing-resources-in-kubernetes-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Network Policies - Egress Policies](https://cloudyuga.guru/lesson/network-policies-egress-policies-2/) - Deny egress traffic from an application Create an Nginx application kubectl run nginx --image=nginx --port 80 --expose --labels app=web Try to access the application from another pod with label set to app=client kubectl run --rm --image=alpine -it -l app=client test -- sh wget -qO- --timeout=2 http://nginx Create the NetworkPolicy, which denies egress connection from Pods which have label set to app=client - [Network Policies](https://cloudyuga.guru/lesson/network-policies-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/lesson/configure-virtual-host-based-ingress-routing-2/) - Create a Vhost based ingress object apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: virtual annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: blue.cy.guru http: paths: - pathType: Exact path: "/blue" backend: service: name: blue port: number: 80 - host: green.cy.guru http: paths: - pathType: Exact path: "/green" backend: service: name: green port: number: 80 Take Quiz Complete - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/lesson/configure-path-based-fan-out-ingress-routing-2/) - Create a Path based Ingress Object apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /blue pathType: Prefix backend: service: name: blue port: number: 80 - path: /green pathType: Prefix backend: service: name: green port: number: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply - [Ingress - Deploy Applications](https://cloudyuga.guru/lesson/ingress-deploy-applications-2/) - Blue And Green application Deployment Create and deploy the Blue application from the configuration file apiVersion: apps/v1 kind: Deployment metadata: name: blue spec: replicas: 1 selector: matchLabels: app: blue template: metadata: labels: app: blue spec: containers: - name: blue image: teamcloudyuga/blue ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: blue labels: app: - [Docker Networking Drivers](https://cloudyuga.guru/lesson/docker-networking-drivers/) - What are the networking drives? Docker provides various networking drivers that allow containers to communicate with each other and the external world. These networking drivers enable different networking modes and capabilities to suit different use cases. Bridge(Default) This is the default network driver. It creates an internal private network on the host to which containers - [Introduction to Ingress](https://cloudyuga.guru/lesson/introduction-to-ingress-2/) - Setting up Ingress Controller and it's component There are many Ingress Controllers available and can be configured in many different ways. You can checkout respective documentation to configure. For the chapter, we would using ingress-nginx controller, which is already pre-configured on this setup. kubectl get pods -n ingress-nginx The controller's pod shares the same network namespace with the host the system and - [External Name Service Type](https://cloudyuga.guru/lesson/external-name-service-type-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Headless Services](https://cloudyuga.guru/lesson/headless-services-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Services without Selectors](https://cloudyuga.guru/lesson/services-without-selectors-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [LoadBalancer Service Type](https://cloudyuga.guru/lesson/loadbalancer-service-type-3/) - Create a Loadbalancer service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_lb.yaml Create a LoadBalancer - [NodePort Service Type](https://cloudyuga.guru/lesson/nodeport-service-type-3/) - Create a Nodeport Service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_np.yaml Create a Nodeport - [ClusterIP Service Type](https://cloudyuga.guru/lesson/clusterip-service-type-3/) - Create a clusterIP service Deploy the application apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_CI.yaml Create a clusterIP - [Kubernetes Services](https://cloudyuga.guru/lesson/kubernetes-services-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cron Jobs](https://cloudyuga.guru/lesson/cron-jobs-3/) - The CronJob is a type of time-based job. CronJobs manages jobs by running them at a specific time or running them periodically. In spec.schedule you have to mention the time condition for the job at which the job gets scheduled and completed. Create a cron job configuration from the following file apiVersion: batch/v1 kind: CronJob metadata: name: - [Parallel Jobs](https://cloudyuga.guru/lesson/parallel-jobs-3/) - Create a job with Parallelism and Completion apiVersion: batch/v1 kind: Job metadata: name: nginx-parallel spec: completions: 10 parallelism: 2 template: metadata: name: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: OnFailure Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the job kubectl apply -f paralleljob.yaml Check - [Batch Operations with Job](https://cloudyuga.guru/lesson/batch-operations-with-job-3/) - Create a Job Create a job to run echo “Hello World” Create a simple Job from the following configuration file apiVersion: batch/v1 kind: Job metadata: name: nginx spec: template: metadata: name: nginx labels: app: job spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: Never Take Quiz Complete Lesson - [Health Checks - Readiness Probes](https://cloudyuga.guru/lesson/health-checks-readiness-probes-3/) - Readiness probes are used when application takes time to startup, or sometimes they are waiting for external services to come up or load some data. During this time, we don't want to kill the application, neither want to send the traffic to the application. They are very similar to liveness probes when comes to syntax: - [Health Checks - Liveness Probes](https://cloudyuga.guru/lesson/health-checks-liveness-probes-3/) - Examples with Liveness Probe Create a Pod with HTTP Liveness Probe apiVersion: v1 kind: Pod metadata: name: nginx-liveness labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 5 timeoutSeconds: 1 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f - [Field Selectors](https://cloudyuga.guru/lesson/field-selectors-3/) - Examples for Field Selectors Create a Pod kubectl run nginx --image=nginx:alpine Get the list of all the running pods in the default namespace kubectl get pods --field-selector status.phase=Running Get the list of all the running Pods in all the namespaces kubectl get pods --all-namespaces --field-selector status.phase=Running Get all running Pods in the cluster with restartPolicy - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/lesson/labels-and-annotations-for-deployment-object-3/) - Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment.yaml At-least one of the selector defined in the ReplicaSet section should match one of - [Annotations](https://cloudyuga.guru/lesson/annotations-3/) - Exploring Annotations Create a Pod with Annotations apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx annotations: build: demo builder: cloudyuga spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the Pod, describe it and check for annotations kubectl apply -f annotate-pod.yaml kubectl describe pod nginx - [Labels and Selectors](https://cloudyuga.guru/lesson/labels-and-selectors-3/) - Deploy the Pods Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: spec: containers: - name: myc image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: prod-pod labels: tier: frontend release: prod spec: containers: - name: prod-c image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- - [Deployment Startegy - Recreate](https://cloudyuga.guru/lesson/deployment-startegy-recreate-3/) - Updating the application with Recreate Deployment Strategy Create a Deployment with Recreate as deployment strategy Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 kubectl - [Deployment Startegy - Rolling Update](https://cloudyuga.guru/lesson/deployment-startegy-rolling-update-2/) - RollingOut the app with new version Updating the image version for our container kubectl set image deployment/nginx-deploy nginx=nginx:stable Checkout the RollOut status kubectl rollout status deployment nginx-deploy We can now describe any Pod to see if the image version is change or not. Let's update it one more time and watch the ReplicaSet changes. kubectl set image deployment/nginx-deploy nginx=nginx:latest - [Scaling the Deployments](https://cloudyuga.guru/lesson/scaling-the-deployments-2/) - Scaling the Deployments Scaling down the Deployment to 1 Replica kubectl scale deployment nginx-deploy --replicas=1 kubectl get deploy kubectl get pods Scaling up the Deployment to 2 Replicas kubectl scale deployment nginx-deploy --replicas=2 kubectl get pods Take Quiz Complete Lesson Next Lesson Reset Lesson - [Deployment](https://cloudyuga.guru/lesson/deployment-2/) - Deploy the App using Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Create the Deployment kubectl apply -f deployment.yaml List the Deployments kubectl get - [Replicaset](https://cloudyuga.guru/lesson/replicaset-2/) - Create and Manage ReplicaSets apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-app image: teamcloudyuga/nginx:alpine Take Quiz Complete Lesson Next Lesson Reset Lesson Create the ReplicaSet kubectl apply -f replicaset.yaml List the ReplicaSets kubectl get replicaset List the Pods kubectl - [Namespaces](https://cloudyuga.guru/lesson/namespaces-2/) - List the current the Namespaces kubectl get namespaces Create a new Namespace kubectl create namespace test Create a Pod in the newly created Namespace kubectl create -f pod.yaml -n test kubectl get pods -n test Delete the Namespace kubectl delete namespace test kubectl get ns Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi-Container Pods](https://cloudyuga.guru/lesson/multi-container-pods-2/) - Create and List a Multi-Container Pod Create and list the multi-container Pod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: multicontainer spec: containers: - name: con1 image: teamcloudyuga/nginx:alpine - name: con2 image: redis - name: con3 image: memcached kubectl apply -f multi-c-pod.yaml List the Pods kubectl get pods Delete - [Pods](https://cloudyuga.guru/lesson/pods/) - Create and List the Pods Create a YAML file (pod.yaml) for Pod and name the Pod as mypod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Create the Pod kubectl create -f pod.yaml List the - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/lesson/kubernetes-api-primitves-and-object-model-2/) - kubectl api-versions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Architecture](https://cloudyuga.guru/lesson/kubernetes-architecture-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Introduction](https://cloudyuga.guru/lesson/kubernetes-introduction-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Building Multi Architecture Images Using Buildx](https://cloudyuga.guru/lesson/building-multi-architecture-images-using-buildx/) - Due to the power of multi-arch images, Docker will automatically select the variation that matches the OS and CPU combination. There is no difference in its utilisation from the user's point of view, but the question is how do we develop them? What is buildx? Docker comes up with a docker buildx command that extends the capabilities - [ETCD Backup Restore](https://cloudyuga.guru/lesson/etcd-backup-restore/) - Install the ETCD [On Master Node/ Where etcd is running] Download the binary and put this binary in the Path wget https://github.com/etcd-io/etcd/releases/download/v3.4.22/etcd-v3.4.22-linux-amd64.tar.gz tar -xvzf etcd-v3.4.22-linux-amd64.tar.gz mv etcd-v3.4.22-linux-amd64/etcd /usr/bin/. mv etcd-v3.4.22-linux-amd64/etcdctl /usr/bin/. Get the list of ETCD member export ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/server.key --cert /etc/kubernetes/pki/etcd/server.crt --write-out=table member list Take snapshot of ETCD export - [Introduction](https://cloudyuga.guru/lesson/introduction-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Resource Consumption Monitoring](https://cloudyuga.guru/lesson/resource-consumption-monitoring/) - Prerequisites To see whether metrics-server (or another provider of the resource metrics API, metrics.k8s.io) is running, type the following command kubectl get apiservices | grep metrics If there is no metrics server running in the Kubernetes cluster then you can deploy it as follow. [Deploy only if there is no metrics server running in your - [Logging-Monitoring Applications : MultiContainer Logs](https://cloudyuga.guru/lesson/logging-monitoring-applications-multicontainer-logs/) - For multiple containers, we use the following syntax kubectl logs -c Let's apply the multi-container pod config apiVersion: v1 kind: Pod metadata: name: multi-container-logs spec: containers: - name: first-container image: teamcloudyuga/busybox:1.28 args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" i=$((i+1)); sleep 3; done - name: second-container image: - [Logging-Monitoring Applications : Single Container Logs](https://cloudyuga.guru/lesson/logging-monitoring-applications-single-container-logs/) - Syntax for logs kubectl logs POD [-c CONTAINER] [--follow] [flags] Syntax for exec kubectl exec POD [-c CONTAINER] -- COMMAND [args...] Let's take an example of a single container pod apiVersion: v1 kind: Pod metadata: name: single-container-logs spec: containers: - name: first-container image: teamcloudyuga/busybox:1.28 args: - /bin/sh - -c - > i=0; while true; do - [Logging-Monitoring Cluster : Kubelet Logs](https://cloudyuga.guru/lesson/logging-monitoring-cluster-kubelet-logs/) - Kubelet is one of the few components that is installed on all the nodes in the cluster. It runs as an agent on each node in the cluster. It makes sure that containers are running in a pod. It takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers - [Logging-Monitoring Cluster : Controller Logs](https://cloudyuga.guru/lesson/logging-monitoring-cluster-controller-logs/) - In the Kubernetes world, controllers take care of routine tasks to ensure the desired state of the cluster matches the observed state. Basically, each controller is responsible for a particular resource in the Kubernetes world. So it runs a control loop that watches the shared state of the cluster through the apiserver and makes changes - [Logging-Monitoring Cluster : K8s Events](https://cloudyuga.guru/lesson/logging-monitoring-cluster-k8s-events/) - Kubernetes events are resource type that will be created when other resources have a state change. These events are persisted in etcd and provide high-level information on what is happening in the cluster. To list all the events you can use kubectl get events These events are namespaced. This means that if we want events - [Overview Kubernetes Installation Configuration](https://cloudyuga.guru/lesson/overview-kubernetes-installation-configuration/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes HA-Stacked ETCD](https://cloudyuga.guru/lesson/kubernetes-ha-stacked-etcd/) - Prerequisites HA Multi-Master Stacked Etcd Creating a Multi-Master cluster using Kubeadm Prerequisites Assume to have the following configurations: 3 Virtual machines with Ubuntu 22.04 installed and sudo privileges. Name one node as master1 , second as master2 and the other as master3. 2 Virtual Machines with Ubuntu 22.04 and sudo privileges. Name one node as worker1 and the - [Kubernetes Installation Kubeadm : Single Control Plane](https://cloudyuga.guru/lesson/kubernetes-installation-kubeadm-single-control-plane/) - Kubeadm Kubeadm is a tool built to provide best-practice “fast paths” for creating Kubernetes clusters. It uses kubeadm init and kubeadm join type simple commands for creating a better end-user experience for cluster creation & maintenance. It enables Kubernetes administrators to quickly and easily bootstrap minimum viable clusters that are fully compliant with Certified Kubernetes guidelines. As a defacto - [Certificates PKI](https://cloudyuga.guru/lesson/certificates-pki/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Authorization (RBAC)](https://cloudyuga.guru/lesson/authorization-rbac/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi-Stage Builds with Dockerfiles](https://cloudyuga.guru/lesson/multi-stage-builds-with-dockerfiles/) - How does a multi-stage build reduce the image Size? The multi-stage build is very useful for optimizing the Dockerfile. It is a very challenging task to write down the efficient Dockerfile with the lesser Docker image size. Each instruction in the Dockerfile creates the layer to the Docker image. Generally, before this feature one Dockerfile - [Creating Roles and RoleBinding using RBAC](https://cloudyuga.guru/lesson/creating-roles-and-rolebinding-using-rbac/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Roles and Roles Bindings Create a Role within the cloudyuga namespace kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: cloudyuga name: deployment-manager rules: - apiGroups: ["", "apps"] resources: ["deployments", "replicasets", "pods"] verbs: ["get", "list", "watch", "create", "update"] In this yaml file we are creating the rule that allows a user to execute several - [Service Accounts](https://cloudyuga.guru/lesson/service-accounts/) - Take Quiz Complete Lesson Next Lesson Reset Lesson A service account in Kubernetes gives an identity to the processes running inside the pod to interact with the API-Server. It is a non-human type account that enables application pods and system components that can use specific credentials known as service accounts. Each service account has a namespace scope, - [User Authentication using x-509 certificate (Public/Private Key Encryption)](https://cloudyuga.guru/lesson/user-authentication-using-x-509-certificate-public-private-key-encryption/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Create a namespace for the user to connect kubectl create ns cloudyuga Create a Private Key and Certificate Signing Request (CSR) for the User Create the Private Key for user cy-user openssl genrsa -out cy-user.key 2048 Create the CSR for user cy-user openssl req -new -key cy-user.key -out cy-user.csr - [Authentication](https://cloudyuga.guru/lesson/authentication/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [ImagePullSecret](https://cloudyuga.guru/lesson/imagepullsecret/) - Deploy a Pod using Private Docker Image kubectl run mypod --image=nkhare/nginx1:1.10 kubectl get pods kubectl describe pod mypod Create a Docker Registry Secret A Kubernetes cluster uses the Secret of docker-registry type to authenticate with a container registry to pull a private image. Set some environment variables export DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/ export DOCKER_USER= export DOCKER_EMAIL= export DOCKER_PASSWORD= - [Using Secrets as Volumes](https://cloudyuga.guru/lesson/using-secrets-as-volumes/) - To showcase the usage of the Secrets as Volumes, I am going to use one of the container design patterns, Sidecar. Sidecar improves the application container often without the application container knowledge. The advantage of sidecars is reusability as similar functionality can be added to other containers. We can think of this as a helper container. This - [Using Secrets as Environment Variables](https://cloudyuga.guru/lesson/using-secrets-as-environment-variables/) - Create a configuration file for the pod as shown below where we have given the Environment variable via secret. apiVersion: v1 kind: Pod metadata: name: secret-env spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never Take - [Secrets](https://cloudyuga.guru/lesson/secrets/) - Create a Secret Suppose we want to share the secret value cloudyuga as username and cloudyuga123 as password value in the Kubernetes Secret specification file. For this we would first encode the values as below: echo -n cloudyuga | base64 echo -n cloudyuga123 | base64 From the above encoded data, create a configuration file for creating the secret apiVersion: v1 kind: - [ConfigMaps as Volumes](https://cloudyuga.guru/lesson/configmaps-as-volumes/) - Create the following Pod configuration file to demonstrate ConfigMaps as volume Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: config-volume spec: containers: - name: test-container image: teamcloudyuga/nginx:alpine volumeMounts: - name: config-volume mountPath: /tmp/config volumes: - name: config-volume configMap: name: customer1 restartPolicy: Never In this file, the configuration data enclosed - [ConfigMaps as Environment Variables](https://cloudyuga.guru/lesson/configmaps-as-environment-variables/) - Let's create the following YAML configuration file in which we have used the environment variables from the ConfigMaps Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: rsvp spec: replicas: 1 selector: matchLabels: app: rsvp template: metadata: labels: app: rsvp spec: containers: - name: rsvp-app image: teamcloudyuga/rsvpapp env: - name: - [ConfigMaps](https://cloudyuga.guru/lesson/configmaps/) - Create ConfigMaps Create a ConfigMap using the below configuration file Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: ConfigMap metadata: name: customer1 data: TEXT1: Customer1_Company TEXT2: Welcomes You COMPANY: Customer1 Company Technology Pvt. Ltd. Deploy the ConfigMap from the above yaml file kubectl apply -f config.yaml Get the list of ConfigMaps kubectl - [StatefulSets](https://cloudyuga.guru/lesson/statefulsets/) - Create a statefulSet Create a mongodb statefulset apiVersion: v1 kind: Service metadata: name: mongo spec: ports: - port: 27017 name: peer clusterIP: None selector: app: mongo --- apiVersion: v1 kind: ConfigMap metadata: name: mongo-init data: init.sh: | #!/bin/bash # Need to wait for the readiness health check to pass so that the # mongo names - [Dynamic Volume Provisioning](https://cloudyuga.guru/lesson/dynamic-volume-provisioning/) - List the StorageClasses kubectl get storageclass kubectl describe sc local-path Deploy the Backend and Frontend Applications apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-claim spec: accessModes: - ReadWriteOnce storageClassName: local-path resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: rsvp-db spec: replicas: 1 selector: matchLabels: appdb: rsvpdb template: metadata: labels: appdb: rsvpdb spec: volumes: - [Static Volume Management](https://cloudyuga.guru/lesson/static-volume-management/) - Creating a Persistent Volume Make a configuration file for Persistent volume (PV) as shown below. This will create a PV of 1 GB kind: PersistentVolume apiVersion: v1 metadata: name: pv0001 labels: type: local spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/data01" Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy a PV with - [Introduction](https://cloudyuga.guru/lesson/introduction-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Creating Images with Dockerfiles - Part II](https://cloudyuga.guru/lesson/creating-images-with-dockerfiles-part-ii/) - How to use RUN instruction in Dockerfile? The RUN instruction in a Dockerfile is used to execute commands during the build process. These commands are executed in a new layer on top of the current image layer, and the results are then committed to the final image. The RUN instruction can be used to, Install packages Update software Set - [Nodeselector](https://cloudyuga.guru/lesson/nodeselector/) - Create a pod using the Node selector apiVersion: v1 kind: Pod metadata: name: pod-demo labels: env: test spec: containers: - name: pod-node image: teamcloudyuga/nginx:1.9.1 nodeSelector: disktype: ssd Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the pod kubectl apply -f nodeselector-pod.yaml Check the status of the recently deployed pod kubectl get po The pod - [Creating Images with Dockerfiles - Part I](https://cloudyuga.guru/lesson/creating-images-with-dockerfiles-part-i/) - How and where to create a Dockerfile? Dockerfile is just a text file, which can be created from any text editor of your choice. We can create it anywhere we like. The build happens with respect to the folder which has the Dockerfile. We will create a folder myapp, inside which we will write a Dockerfile. Run the - [Advanced Image Operations](https://cloudyuga.guru/lesson/advanced-image-operations/) - Take Quiz Complete Lesson Next Lesson Reset Lesson 1. How to export a container to a tar file ? With the docker container export command, we can export a container into a tar file. List the containers sudo docker container ls Here we are taking a container with ID 5249571b5690 and exporting it to a tar file, change container id accordingly - [Building an Image From a Running Container](https://cloudyuga.guru/lesson/building-an-image-from-a-running-container/) - How to create an image from a running container? With the docker container commit command we can save the ephemeral storage of a container as a layer on the disk, to create a new image. Create a container and put some contents into it Run below command from the terminal sudo docker container run -it --name myalpine - [Images Tagging and Pushing them to DockerHub](https://cloudyuga.guru/lesson/images-tagging-and-pushing-them-to-dockerhub/) - What is image tagging ? While working on images in DockerHub, Either use your DockerHub username as prefix to your image. Like here, I am using cloudyuga/alpine:.... , where cloudyuga is my DockerHub username. sudo docker image push cloudyuga/alpine:test - [DaemonSets](https://cloudyuga.guru/lesson/daemonsets/) - Create a DaemonSet using a configuration file Get the list of Nodes available in your cluster kubectl get nodes Create a DaemonSet using a configuration file apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-ds spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 ports: - containerPort: 80 Take - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/lesson/setting-up-resource-quota-for-a-namespace/) - Create a Resource-Quota object for a Namespace Create a namespace kubectl create namespace quota-mem-cpu-example Create a resource quota for that namespace Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu namespace: quota-mem-cpu-example spec: hard: requests.cpu: "0.5" requests.memory: 512Mi limits.cpu: "1" limits.memory: 1Gi kubectl apply -f quota.yaml Describe the resource quota for that namespace - [Setting up defaults using LimitRange](https://cloudyuga.guru/lesson/setting-up-defaults-using-limitrange/) - Define a LimitRange to set Default requests and limits Define the LimitRange apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 512Mi defaultRequest: memory: 256Mi type: Container Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f mem-limit-range.yaml kubectl describe limitrange mem-limit-range Deploy the app with no requests and limits defined apiVersion: v1 kind: Pod - [Requests and Limits](https://cloudyuga.guru/lesson/requests-and-limits/) - Create a Pod with defined requests and limits apiVersion: v1 kind: Pod metadata: name: nginx-requests-limits labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 resources: limits: memory: "400Mi" cpu: "0.3" requests: memory: "300Mi" cpu: "0.2" Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f pod-requests-limits.yaml kubectl get pods - [Managing Resources in Kubernetes](https://cloudyuga.guru/lesson/managing-resources-in-kubernetes/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Init-Containers](https://cloudyuga.guru/lesson/init-containers/) - Init containers are one or more containers in a pod that run and complete their execution before other application containers start. An init container is exactly like a regular container, except that it always runs to completion and Execution of each init container must be successfully completed before the next container is started. To see - [Network Policies - Ingress Policies](https://cloudyuga.guru/lesson/network-policies-ingress-policies/) - Deny All traffic to the pods Create the nginx application as below: kubectl run nginx --image=nginx --labels app=nginx --expose --port 80 Run Busybox Pod and try to access the nginx application from it kubectl run --rm -i -t --image=alpine demo -- sh wget -qO- --timeout=2 http://nginx Create a Network Policy so it can restrict the - [Network Policies - Egress Policies](https://cloudyuga.guru/lesson/network-policies-egress-policies/) - Deny egress traffic from an application Create an Nginx application kubectl run nginx --image=nginx --port 80 --expose --labels app=web Try to access the application from another pod with label set to app=client kubectl run --rm --image=alpine -it -l app=client test -- sh wget -qO- --timeout=2 http://nginx Create the NetworkPolicy, which denies egress connection from Pods which have label set to app=client - [Network Policies](https://cloudyuga.guru/lesson/network-policies/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/lesson/configure-virtual-host-based-ingress-routing/) - Create a Vhost based ingress object apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: virtual annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: blue.cy.guru http: paths: - pathType: Exact path: "/blue" backend: service: name: blue port: number: 80 - host: green.cy.guru http: paths: - pathType: Exact path: "/green" backend: service: name: green port: number: 80 Take Quiz Complete - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/lesson/configure-path-based-fan-out-ingress-routing/) - Create a Path based Ingress Object apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /blue pathType: Prefix backend: service: name: blue port: number: 80 - path: /green pathType: Prefix backend: service: name: green port: number: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply - [Ingress - Deploy Applications](https://cloudyuga.guru/lesson/ingress-deploy-applications/) - Blue And Green application Deployment Create and deploy the Blue application from the configuration file apiVersion: apps/v1 kind: Deployment metadata: name: blue spec: replicas: 1 selector: matchLabels: app: blue template: metadata: labels: app: blue spec: containers: - name: blue image: teamcloudyuga/blue ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: blue labels: app: - [Introduction to Ingress](https://cloudyuga.guru/lesson/introduction-to-ingress/) - Setting up Ingress Controller and it's component There are many Ingress Controllers available and can be configured in many different ways. You can checkout respective documentation to configure. For the chapter, we would using ingress-nginx controller, which is already pre-configured on this setup. kubectl get pods -n ingress-nginx The controller's pod shares the same network namespace with the host the system and - [External Name Service Type](https://cloudyuga.guru/lesson/external-name-service-type/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Headless Services](https://cloudyuga.guru/lesson/headless-services/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [NodePort Service Type](https://cloudyuga.guru/lesson/nodeport-service-type-2/) - Create a Nodeport Service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_np.yaml Create a Nodeport - [Services without Selectors](https://cloudyuga.guru/lesson/services-without-selectors/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [LoadBalancer Service Type](https://cloudyuga.guru/lesson/loadbalancer-service-type-2/) - Create a Loadbalancer service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_lb.yaml Create a LoadBalancer - [Kubernetes Services](https://cloudyuga.guru/lesson/kubernetes-services-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [ClusterIP Service Type](https://cloudyuga.guru/lesson/clusterip-service-type-2/) - Create a clusterIP service Deploy the application apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_CI.yaml Create a clusterIP - [Parallel Jobs](https://cloudyuga.guru/lesson/parallel-jobs-2/) - Create a job with Parallelism and Completion apiVersion: batch/v1 kind: Job metadata: name: nginx-parallel spec: completions: 10 parallelism: 2 template: metadata: name: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: OnFailure Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the job kubectl apply -f paralleljob.yaml Check - [Cron Jobs](https://cloudyuga.guru/lesson/cron-jobs-2/) - The CronJob is a type of time-based job. CronJobs manages jobs by running them at a specific time or running them periodically. In spec.schedule you have to mention the time condition for the job at which the job gets scheduled and completed. Create a cron job configuration from the following file apiVersion: batch/v1 kind: CronJob metadata: name: - [Batch Operations with Job](https://cloudyuga.guru/lesson/batch-operations-with-job-2/) - Create a Job Create a job to run echo “Hello World” Create a simple Job from the following configuration file apiVersion: batch/v1 kind: Job metadata: name: nginx spec: template: metadata: name: nginx labels: app: job spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: Never Take Quiz Complete Lesson - [Health Checks - Readiness Probes](https://cloudyuga.guru/lesson/health-checks-readiness-probes-2/) - Readiness probes are used when application takes time to startup, or sometimes they are waiting for external services to come up or load some data. During this time, we don't want to kill the application, neither want to send the traffic to the application. They are very similar to liveness probes when comes to syntax: - [Health Checks - Liveness Probes](https://cloudyuga.guru/lesson/health-checks-liveness-probes-2/) - Examples with Liveness Probe Create a Pod with HTTP Liveness Probe apiVersion: v1 kind: Pod metadata: name: nginx-liveness labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 5 timeoutSeconds: 1 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f - [Field Selectors](https://cloudyuga.guru/lesson/field-selectors-2/) - Examples for Field Selectors Create a Pod kubectl run nginx --image=nginx:alpine Get the list of all the running pods in the default namespace kubectl get pods --field-selector status.phase=Running Get the list of all the running Pods in all the namespaces kubectl get pods --all-namespaces --field-selector status.phase=Running Get all running Pods in the cluster with restartPolicy - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/lesson/labels-and-annotations-for-deployment-object-2/) - Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment.yaml At-least one of the selector defined in the ReplicaSet section should match one of - [Annotations](https://cloudyuga.guru/lesson/annotations-2/) - Exploring Annotations Create a Pod with Annotations apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx annotations: build: demo builder: cloudyuga spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the Pod, describe it and check for annotations kubectl apply -f annotate-pod.yaml kubectl describe pod nginx - [Labels and Selectors](https://cloudyuga.guru/lesson/labels-and-selectors-2/) - Deploy the Pods Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: spec: containers: - name: myc image: teamcloudyuga/library/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: prod-pod labels: tier: frontend release: prod spec: containers: - name: prod-c image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- - [Deployment Strategy - Recreate](https://cloudyuga.guru/lesson/deployment-startegy-recreate-2/) - Updating the application with Recreate Deployment Strategy Create a Deployment with Recreate as deployment strategy Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 kubectl - [Deployment Strategy - Rolling Update](https://cloudyuga.guru/lesson/deployment-startegy-rolling-update/) - RollingOut the app with new version Updating the image version for our container kubectl set image deployment/nginx-deploy nginx=nginx:stable Checkout the RollOut status kubectl rollout status deployment nginx-deploy We can now describe any Pod to see if the image version is change or not. Let's update it one more time and watch the ReplicaSet changes. kubectl set image deployment/nginx-deploy nginx=nginx:latest - [Scaling the Deployments](https://cloudyuga.guru/lesson/scaling-the-deployments/) - Scaling the Deployments Scaling down the Deployment to 1 Replica kubectl scale deployment nginx-deploy --replicas=1 kubectl get deploy kubectl get pods Scaling up the Deployment to 2 Replicas kubectl scale deployment nginx-deploy --replicas=2 kubectl get pods Take Quiz Complete Lesson Next Lesson Reset Lesson - [Deployment](https://cloudyuga.guru/lesson/deployment/) - Deploy the App using Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Create the Deployment kubectl apply -f deployment.yaml List the Deployments kubectl get - [Replicaset](https://cloudyuga.guru/lesson/replicaset/) - Create and Manage ReplicaSets apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-app image: teamcloudyuga/nginx:alpine Take Quiz Complete Lesson Next Lesson Reset Lesson Create the ReplicaSet kubectl apply -f replicaset.yaml List the ReplicaSets kubectl get replicaset List the Pods kubectl - [Namespaces](https://cloudyuga.guru/lesson/namespaces/) - List the current the Namespaces kubectl get namespaces Create a new Namespace kubectl create namespace test Create a Pod in the newly created Namespace kubectl create -f pod.yaml -n test kubectl get pods -n test Delete the Namespace kubectl delete namespace test kubectl get ns Take Quiz Complete Lesson Next Lesson Reset Lesson - [Pods](https://cloudyuga.guru/lesson/pods-2/) - Create and List the Pods Create a YAML file (pod.yaml) for Pod and name the Pod as mypod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Create the Pod kubectl create -f pod.yaml List the - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/lesson/kubernetes-api-primitves-and-object-model/) - kubectl api-versions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Networking Overview](https://cloudyuga.guru/lesson/kubernetes-networking-overview/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Architecture](https://cloudyuga.guru/lesson/kubernetes-architecture/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Introduction](https://cloudyuga.guru/lesson/kubernetes-introduction/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi-Container Pods](https://cloudyuga.guru/lesson/multi-container-pods/) - Create and List a Multi-Container Pod.. Create and list the multi-container Pod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: multicontainer spec: containers: - name: con1 image: teamcloudyuga/nginx:alpine - name: con2 image: redis - name: con3 image: memcached kubectl apply -f multi-c-pod.yaml List the Pods kubectl get pods Delete - [Prometheus](https://cloudyuga.guru/lesson/prometheus/) - History and Introductionsss... Google introduced the Borg system. The Borg system is “a cluster manager that runs hundreds of thousands of jobs, from many thousands of different applications, across a number of clusters each with up to tens of thousands of machines. Google also developed the monitoring system for the Google Borg which is called - [Accesssing Kubernetes](https://cloudyuga.guru/lesson/accesssing-kubernetes/) - kubectl version kubectl get nodes kubectl proxy Take Quiz Complete Lesson Next Lesson Reset Lesson Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTaVZtQVRvVkpmVGxMWEdaaldDM0NhVEk1M3lYWkVHQkRPeHVMUUJrbU4KaXc5a0ErdFhicnRBSEJYUXRYRjhFdUs5Nlp2TDZqOUJmL3pNaEY0R3Z4NmFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVpqSTdsKzZyeGc4anFQay9sQVFGCmdCZi83Mmd3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWGZ2THN6UzhtTDR2ZzU5UFhjODlyMEgrTHQ3a0xHeEwKWi84ZkFiU0JiOWdDSUJvL1BibWNnTEs4bjZ6UXJmcXB6WkhiYkh6RCt0aVVtSkpCR1U4YTJoTlUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.197.191:6443 name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZVFLOVBtVzVVMGt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOakE1TWpBd016ZzBNQjRYRFRJd01USXlPVEF3TURZeU5Gb1hEVEl4TVRJeQpPVEF3TURZeU5Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJLOGJxa2lSaVhIbXlPS3oKeGRCcVNvVW51aG5MQ1d6amdHVjRrMzBIZnRGbzUrdHYzMmRXTlNlZzFaQW5JM0ZZb2hDeTk1N3ZpeFlkbTJoSgpiWTNmOXoyalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVHBGSXBCNlZFY3pEZjI4ODA5eXZ3Y1o4eVRRekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQXhWUWpESDBGZXdGYWprRkY3ZzdmM0tSYXduTThjaWdYUjIxMExQZzdVT1FDSUNHcWdZMG55UWFPN2pIRQpDdUc4U05LS3BnTUFGQ0xqaUNha29vai92bXY1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUbG9MUnFoUCtaWElLdm9VcysvSUR3ZXVSZzdTS3YwSmV4cXpYVUUvUnUKUlBudGwxY3NDWHFlUzd6cVFNZ1VaWE0rWkI1TGt4UDdQeUlyRGpWS01ZR0dvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTZSU0tRZWxSSE13Mzl2UE5QY3I4CkhHZk1rME13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYzhxalBsVEVVTWt2VS8vVlpGMmxKR2liTUZ2YWowRG8KcGNmWlVERVhBWmdDSUV4U24wNjArbm8vUitPckJiaFNVQ0h2L05WOXI1RE1UdlhmRThJanFDaWQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVnZmE0aU9QNDdSKzdUVmdPMC9NMUo4R0lMRm51VEtOKzEyQmp3eFVYMTJvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFcnh1cVNKR0pjZWJJNHJQRjBHcEtoU2U2R2NzSmJPT0FaWGlUZlFkKzBXam42Mi9mWjFZMQpKNkRWa0NjamNWaWlFTEwzbnUrTEZoMmJhRWx0amQvM1BRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= location. - [Accesssing Kubernetes](https://cloudyuga.guru/lesson/accesssing-kubernetes-2/) - kubectl version kubectl get nodes kubectl proxy Take Quiz Complete Lesson Next Lesson Reset Lesson Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTaVZtQVRvVkpmVGxMWEdaaldDM0NhVEk1M3lYWkVHQkRPeHVMUUJrbU4KaXc5a0ErdFhicnRBSEJYUXRYRjhFdUs5Nlp2TDZqOUJmL3pNaEY0R3Z4NmFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVpqSTdsKzZyeGc4anFQay9sQVFGCmdCZi83Mmd3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWGZ2THN6UzhtTDR2ZzU5UFhjODlyMEgrTHQ3a0xHeEwKWi84ZkFiU0JiOWdDSUJvL1BibWNnTEs4bjZ6UXJmcXB6WkhiYkh6RCt0aVVtSkpCR1U4YTJoTlUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.197.191:6443 name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZVFLOVBtVzVVMGt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOakE1TWpBd016ZzBNQjRYRFRJd01USXlPVEF3TURZeU5Gb1hEVEl4TVRJeQpPVEF3TURZeU5Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJLOGJxa2lSaVhIbXlPS3oKeGRCcVNvVW51aG5MQ1d6amdHVjRrMzBIZnRGbzUrdHYzMmRXTlNlZzFaQW5JM0ZZb2hDeTk1N3ZpeFlkbTJoSgpiWTNmOXoyalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVHBGSXBCNlZFY3pEZjI4ODA5eXZ3Y1o4eVRRekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQXhWUWpESDBGZXdGYWprRkY3ZzdmM0tSYXduTThjaWdYUjIxMExQZzdVT1FDSUNHcWdZMG55UWFPN2pIRQpDdUc4U05LS3BnTUFGQ0xqaUNha29vai92bXY1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUbG9MUnFoUCtaWElLdm9VcysvSUR3ZXVSZzdTS3YwSmV4cXpYVUUvUnUKUlBudGwxY3NDWHFlUzd6cVFNZ1VaWE0rWkI1TGt4UDdQeUlyRGpWS01ZR0dvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTZSU0tRZWxSSE13Mzl2UE5QY3I4CkhHZk1rME13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYzhxalBsVEVVTWt2VS8vVlpGMmxKR2liTUZ2YWowRG8KcGNmWlVERVhBWmdDSUV4U24wNjArbm8vUitPckJiaFNVQ0h2L05WOXI1RE1UdlhmRThJanFDaWQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVnZmE0aU9QNDdSKzdUVmdPMC9NMUo4R0lMRm51VEtOKzEyQmp3eFVYMTJvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFcnh1cVNKR0pjZWJJNHJQRjBHcEtoU2U2R2NzSmJPT0FaWGlUZlFkKzBXam42Mi9mWjFZMQpKNkRWa0NjamNWaWlFTEwzbnUrTEZoMmJhRWx0amQvM1BRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= location. - [Image Layers](https://cloudyuga.guru/lesson/image-layers/) - What are image layers ? Using the docker image history command, we can see the commands that are used to create the layers and finally build an image. To demonstrate image layer we will pull an image, For Example: we will pull nginx:latest image, and view the layers. Pull the image form docker-hub registry docker image pull nginx:latest - [Advanced Operations with Docker](https://cloudyuga.guru/lesson/advanced-operations-with-docker/) - How to create a new process inside a running container? With docker container exec option we can create any process inside an already running container. This option is very useful for debugging. In the following, we are executing a new process to get the IP address of the container. As soon as ip a command finishes, the newly forked - [Overview of Container Registry - Docker Hub](https://cloudyuga.guru/lesson/overview-of-container-registry-docker-hub/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and try again!! Please rewatch the video and try again!! Please rewatch the video and try again!! - [Docker Engine](https://cloudyuga.guru/lesson/docker-engine/) - How to install Docker Engine? We will install docker engine for the Ubuntu distribution of Linux using convenience script as it is recommended for testing and development environments. Download and run the following script to install Docker. curl -fsSL https://get.docker.com -o install-docker.sh sudo sh install-docker.sh To check Docker's client and server versions, run the following command. docker version To view more information. docker - [Network Policies - Ingress Policies](https://cloudyuga.guru/lesson/network-policies-ingress-policies-2/) - Deny All traffic to the pods Create the nginx application as below: kubectl run nginx --image=nginx --labels app=nginx --expose --port 80 Run Busybox Pod and try to access the nginx application from it kubectl run --rm -i -t --image=alpine demo -- sh wget -qO- --timeout=2 http://nginx Create a Network Policy so it can restrict the - [Summary](https://cloudyuga.guru/lesson/summary-41/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Summary In this module, we learned: How to refine search using bash shell's globbing operators To execute commands in conjunction with pipe operator How to create and use variables in scripts Various ways to control program flow using functions like dynamic scoping, conditional execution, and command substitution - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-43/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Understand bash and its features Utilise shell globbing to improve search filteration Execute two or more commands in conjunction using pipe operator Make use of input stream literals in your scripts using here-docs Introduce variables - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-42/) - Learning Objectives By the end of this module, you will be able to: Understand why scripting is important Set the the right file permissions to execute scripts Define Variables & Data Types used in shell scripting Improve script execution using shebang line and PATH variable Utilize built-in bash commands on your Linux system Make scripts - [Summary](https://cloudyuga.guru/lesson/summary-40/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Summary In this module, we learned: Why scripting plays important for system admins and development teams How to write file permissions to execute the scripts How to define and use Variables & Data Types To directly execute scripts from command line To make shell scripts more readable - [Summary](https://cloudyuga.guru/lesson/summary-39/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Summary In this module, we learned: How to redirect output for a command to a text file How to take input for a command from a text file How to take error logs using error redirection - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-41/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Understand why we need redirection Utilize output redirection to store output data Use text files as command input with input redirection Take error logs with error redirection - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-40/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Understand why conditional statements are used in shell scripting Utilise different types of If-else statements Differentiate between If-else and case statements Execute conditional case statements - [Summary](https://cloudyuga.guru/lesson/summary-38/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Summary In this module, we learned: When to use conditional statements Different types of if...else conditional statements The difference between if...else and case statements and when to use each - [Summary](https://cloudyuga.guru/lesson/summary-37/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Summary In this module, you learned: How to use arithmetic operators in scripts How to use comparison operators for different objects in scripts - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-39/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Perform arithmetic operations in scripts using shell arithmetic operators Compare objects using comparison operators in shell scripts - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-38/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Understand the differences and use the various looping structures in shell Write and execute while, for, and until loops Infer what situation suits better for different loops Control loop flow using the break and continue - [Summary](https://cloudyuga.guru/lesson/summary-36/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: About the different looping structures in shell To write and execute while, for, and until loops To control loop flow using the break and continue statements - [Summary](https://cloudyuga.guru/lesson/summary-35/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, you learned: How to declare and use custom functions in shell scripts To utilise custom arguments and variables in functions To use different exit and return codes - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-37/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Declare and use functions in scripts Create and use variables inside functions Pass custom arguments to functions Create and use custom exit codes and return values - [Summary](https://cloudyuga.guru/lesson/summary-34/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: How to take user input in shell scripts How to pass and utilise command line arguments in scripts - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-36/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Objectives By the end of this module, you will be able to: Make interactive shell scripts by taking user input Write dynamic scripts that utilise command line arguments - [Summary](https://cloudyuga.guru/lesson/summary-33/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, you learned: About various exit codes and understood how a command executes - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-35/) - Take Quiz Complete Lesson Next Lesson Reset Lesson By the end of this module, you will be able to: Use exit codes to understand command execution better - [Course Summary](https://cloudyuga.guru/lesson/course-summary/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-31/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: To use the noexec command for pre-checking scripts How to use xtrace mode to eliminate logical errors To debug specific parts of the script to pinpoint errors Use the trap command to step by step check errors in the script - [Using trap command](https://cloudyuga.guru/lesson/using-trap-command/) - Bash provides a trap feature which can be used to execute a command repetitively. The arguments specified with-in trap ... DEBUG are executed before each subsequent statement in the script. This can be useful in a situation where we want to understand what value is being assigned to a variable after each step in the Bash script. In the - [Debugging Specific Parts of the Script](https://cloudyuga.guru/lesson/debugging-specific-parts-of-the-script/) - Take Quiz Complete Lesson Next Lesson Reset Lesson There might be some situations where we may want to only debug specific parts of the script. For that we need to enable the debug mode before the intended code block starts and later end the debug mode after the code block finishes. Let's check out the following example: - [Using xtrace Mode](https://cloudyuga.guru/lesson/using-xtrace-mode/) - Take Quiz Complete Lesson Next Lesson Reset Lesson If we want to find the logical errors, then we need to trace the state of variables and commands during the execution process. For such cases, we need to execute the script in xtrace (execution trace) mode using the -x option. Following is our example script COURSE_NAME="shell" if [ $COURSE_NAME = - [Syntax Checking in noexec Mode](https://cloudyuga.guru/lesson/syntax-checking-in-noexec-mode/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Having syntax errors in scripting or programming is very common. In Bash, we can use the noexec mode using the -n option. In this mode, the Bash will just read the commands but will not execute them. Run the following command to demonstrate executing script in the noexec mode: bash -n course_name_with_error.sh If - [Introduction](https://cloudyuga.guru/lesson/introduction-6/) - Take Quiz Complete Lesson Next Lesson Reset Lesson While executing the Bash scripts, we might encounter errors. To find those errors, we might need to perform debugging. Bash provides extensive debugging features. In the coming chapters, we will see some of the common debugging approaches. - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-33/) - Take Quiz Complete Lesson Next Lesson Reset Lesson By the end of this module, you will be able to: Utilise the noexec command to pre-check scripts Use xtrace mode to find out logical errors in the scripts Use the trap command to step by step check the executing script - [Summary](https://cloudyuga.guru/lesson/summary-32/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: How to use the logger command to save and check system logs - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-34/) - Take Quiz Complete Lesson Next Lesson Reset Lesson By the end of this module, you will be able to Utilise the logger command to add and check system logs - [Logging](https://cloudyuga.guru/lesson/logging/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Logging is the act of keeping information as a log so that this information can be used later for debugging or useful purposes. This information can be events that occur in an operating system or other software runs or any user-defined logs. For Example, whenever a user logs - [Exit Statuses and Return Codes](https://cloudyuga.guru/lesson/exit-statuses-and-return-codes/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Whenever a Linux command is executed, it returns an exit code. It is an integer number in the range of 0 to 255. If the exit code is 0, then the command execution was successful. On the other hand, if the exit code is non-zero (1-255), then command execution was unsuccessful. Let’s check - [Command Line Arguments](https://cloudyuga.guru/lesson/command-line-arguments/) - Take Quiz Complete Lesson Next Lesson Reset Lesson While executing a shell script, we can also pass arguments if the script allows us to do so. There are following multiple ways to pass arguments: Positional Parameters Flags (getopts function) Loop Construct Shift Operator Positional Parameters In this, arguments passed to the script are processed positionally, in the - [User Input](https://cloudyuga.guru/lesson/user-input/) - We can also accept user input in the shell scripting. There are multiple ways to do it. One of the common ways is to use the read built-in bash command. Single and multiple data can be taken with a read command with its different options. printf "Enter first name: " read first_name echo "Welcome $first_name to CY Cloud Engineer - [Return and Exit from function](https://cloudyuga.guru/lesson/return-and-exit-from-function/) - The purpose of return built-in command is to exit from a function while the exit built-in command will cause the script to end at the point where it is called. In both cases, if we pass an integer n, it will be available as exit status and can be captured in the special variable $?. However, if nothing is supplied then - [Function Arguments](https://cloudyuga.guru/lesson/function-arguments/) - Take Quiz Complete Lesson Next Lesson Reset Lesson We can pass arguments to the shell function like in other programming languages so that we can perform specific operations on those arguments. To pass arguments to a function, we need to add the parameters after the function call separated by spaces. The following table describes some - [Function Variables and Scope](https://cloudyuga.guru/lesson/function-variables-and-scope/) - Take Quiz Complete Lesson Next Lesson Reset Lesson The variables in a shell script are global by default and can be accessed from anywhere in the program including the function bodies. Interestingly, the variables defined inside a function are also global. However, if we add the keyword local then we can restrict variables to be accessible within the function body and the nested functions - [Declare and Calling a Function](https://cloudyuga.guru/lesson/declare-and-calling-a-function/) - Take Quiz Complete Lesson Next Lesson Reset Lesson We need to declare a function before its execution. The execution of the function happens only when we invoke the function in the program. See the example below to understand how a function is declared and called. Example function hello { echo "Hello, I am function 'hello'." - [Introduction](https://cloudyuga.guru/lesson/introduction-5/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In Shell scripting, sometimes you want to execute a block of code containing variables, commands, or any valid shell statement repeatedly for a number of periods of time. For such cases, we use function. It also helps us in making our scripts more readable and avoid writing the same - [break and continue](https://cloudyuga.guru/lesson/break-and-continue/) - In this chapter, we will learn how to use break and continue statements. These are used within the looping statements ( like while, for and until ) to alter the flow of the loop in our bash script. These are also available as built-in bash commands. Let's check the command information: type break continue Output: break is a shell builtin continue is a shell - [until Loop](https://cloudyuga.guru/lesson/until-loop/) - This loop executes the body of the loop as many times till the condition evaluates to false. It can be considered the opposite of the while loop where the loop happens till the condition is evaluated to be true. Syntax until [ condition ]; do statements done Example 1 let num=1 until [ $num -gt - [for Loop](https://cloudyuga.guru/lesson/for-loop/) - This kind of loop executes the set of statements present in the body for the number of items present in the list. Syntax for var in list; do statements done Example 1 arr=(10 20 30 40 50) for i in "${arr[@]}"; do echo $i done Run the script to see how a for loop works: - [while Loop](https://cloudyuga.guru/lesson/while-loop/) - In the while loop, first, the condition will be evaluated and if it is true then the commands inside the loop will execute until the condition remains true else the loop will end. Syntax while [ condition ]; do statements done Example 1 let i=0 while [ $i -lt 10 ]; do echo $i i=$((i+1)) - [Loops in Shell Scripting](https://cloudyuga.guru/lesson/loops-in-shell-scripting/) - In programming, we use loops to execute a set of commands repeatedly till a certain condition is met. There are following three types of loops in the Shell scripting: while loop: Here, the loop continues to execute till the expression or condition is evaluated to be true. for loop: It repeats the set of statements for every item in the - [File Comparison Operators](https://cloudyuga.guru/lesson/file-comparison-operators/) - Take Quiz Complete Lesson Next Lesson Reset Lesson These comparison operators help in checking different aspects of the file/directory such as if the file exists or not, whether the file has writable or executable permissions or not, etc. These are the most widely used comparison operators. The following table will show you different types of - [String Comparison Operators](https://cloudyuga.guru/lesson/string-comparison-operators/) - Take Quiz Complete Lesson Next Lesson Reset Lesson These operators will compare two or more string values. These operators are in the form of parameters as listed below: NOTE: As a best practice, the single equality = operator should be used with single square [ ] brackets, and the double equality == operator should be used with double square [[ ]] brackets. Example #!/bin/bash - [Numeric Comparison Operators](https://cloudyuga.guru/lesson/numeric-comparison-operators/) - Take Quiz Complete Lesson Next Lesson Reset Lesson These operators will compare two or more numeric values. These operators are in the form of parameters as listed below: Example num1=10 num2=20 if [ $num2 -gt $num1 ]; then echo "$num2 is greater than $num1" fi if [ $num1 -eq 10 ]; then echo "$num1 is - [Comparisons Operators](https://cloudyuga.guru/lesson/comparisons-operators/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In shell programming, you may need to make certain comparisons and perform actions based on the results. For such situations, we use comparison operators. There are three types of comparison operators based on the type of object being compared. Numeric Comparison Operators String Comparison Operators File Comparison Operators - [Arithmetic Operators](https://cloudyuga.guru/lesson/arithmetic-operators/) - Take Quiz Complete Lesson Next Lesson Reset Lesson We can easily perform arithmetic operations like addition, subtraction, multiplication, and division in Shell scripting. These operations are achieved by arithmetic operators. Following is the list of arithmetic operators in Shell: NOTE: Consider value of a as 20 and b as 10 in the following table. Example num1=20 num2=10 sum=$((num1+num2)) echo "Sum = - [Introduction](https://cloudyuga.guru/lesson/introduction-7/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In shell programming, operators are symbols or words that perform specific operations on one or more operands (values or variables). There are two types of operators in shell programming: Arithmetic Operators Comparison Operators Let's write a script using Arithmetic Operators. - [Case Statement](https://cloudyuga.guru/lesson/case-statement/) - Take Quiz Complete Lesson Next Lesson Reset Lesson The case statement is another option one can use instead of a multilevel if-then-else-fi statement. The case statement helps to simplify the complex conditions by providing multiple different choices. It is easier to maintain and more readable than nested if statements. Syntax: case $variable-name in pattern-1) statements ;; pattern-2) statements ;; - [If Statement](https://cloudyuga.guru/lesson/if-statement/) - Take Quiz Complete Lesson Next Lesson Reset Lesson A basic if statement works on the principle that if a certain condition is met then execute a set of actions, otherwise, skip the actions, and continue with the rest of the program/script. Simple if statement Syntax: if [ expression ]; then statements fi Check out the example below for if statement: COURSE_NAME="linux" if [ - [Using Secrets as Volumes](https://cloudyuga.guru/lesson/using-secrets-as-volumes-2/) - To showcase the usage of the Secrets as Volumes, I am going to use one of the container design patterns, Sidecar. Sidecar improves the application container often without the application container knowledge. The advantage of sidecars is reusability as similar functionality can be added to other containers. We can think of this as a helper container. This - [Kubernetes Networking Overview](https://cloudyuga.guru/lesson/kubernetes-networking-overview-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Overview](https://cloudyuga.guru/lesson/overview/) - Take Quiz Complete Lesson Next Lesson Reset Lesson While Scripting, you may face certain scenarios where you need to alter the flow of the program based on certain conditions. This can be achieved using certain flow control statements called conditional statements. There are two kinds of conditional statements in Shell scripting: The if statement The case statement Let's explore how - [Error Redirection](https://cloudyuga.guru/lesson/error-redirection/) - Take Quiz Complete Lesson Next Lesson Reset Lesson By default, whenever the error happens on running any command, it is displayed on the screen. However, we can redirect these errors to a file other than screen for further processing of error logs to perform meaningful decisions. Try running the following erroneous command: undefined_cmd 2> errors.log - [Input Redirection](https://cloudyuga.guru/lesson/input-redirection/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Similarly, we can overwrite the standard input and accept some command output as input using the < character. Here, the right operand is set as standard input. Run the following command to get the output of date.txt file previously created as input to character count command: cp ../output-redirection/date.txt . wc -c - [Output Redirection](https://cloudyuga.guru/lesson/output-redirection/) - Take Quiz Complete Lesson Next Lesson Reset Lesson We can overwrite the standard output and redirect our command output to somewhere else like a file using the > character. Here, the right operand is set as the standard output. Run the following command to send the output of the date command to a file instead of displaying it on the screen. - [Introduction](https://cloudyuga.guru/lesson/introduction-8/) - Take Quiz Complete Lesson Next Lesson Reset Lesson The Linux system provides some special characters that will help to change the standard input (stdin) and standard output (stdout) when executing a command on the terminal. Standard streams and File descriptors In computer programming, we have some standard streams which are interconnected input and output communication - [Adding Comments in Bash](https://cloudyuga.guru/lesson/adding-comments-in-bash/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Comments are human-readable text mostly explaining or annotating to make the script easy to understand. The interpreter ignores the commented lines during the script execution. Also, comments help to increase overall program readability. Bash support two types of comments: Single line comment Multi-line comment Single Line Comment To - [Adding Scripts to Paths](https://cloudyuga.guru/lesson/adding-scripts-to-paths/) - As we had seen in the previous chapter, to execute a shell script we need to type its path (relative or full). Run the following commands to create a simple shell script and make it executable: echo 'echo "Hello Bash!"' > hello-bash.sh && chmod +x hello-bash.sh Following is the relative way of executing the script: - [Types of Variables by Content](https://cloudyuga.guru/lesson/types-of-variables-by-content/) - Take Quiz Complete Lesson Next Lesson Reset Lesson We can categorize variables into the following types based on the content we store in them: String variables Integer variables Array variables Constant String Variable The default type of variable, string stores a sequence of characters in the variable. We can easily create a string variable as - [Special Shell Variables](https://cloudyuga.guru/lesson/special-shell-variables/) - Take Quiz Complete Lesson Next Lesson Reset Lesson There are a few special type of shell variables that are set internally by the shell and available to the users: The following script will print the first, second, and the current script name and list of arguments: echo "Username: $1" echo "Email: $2" echo "Current script - [User Defined Variables](https://cloudyuga.guru/lesson/user-defined-variables/) - Take Quiz Complete Lesson Next Lesson Reset Lesson These types of variables are created by the user for storing, reading, accessing, and manipulating data. Things to keep in mind while creating a new variable: The name of the variable can only contain letters (a-z or A-Z), numbers (0-9), and underscore characters. Variable names can only - [System Defined Variables](https://cloudyuga.guru/lesson/system-defined-variables/) - Take Quiz Complete Lesson Next Lesson Reset Lesson These types of variables are special built-in variables available in the system (or shell) which are needed by the system itself for their function. These variables are defined in CAPITAL LETTERS. Example: HOME, PATH, USERNAME, HOSTNAME, etc. We can see the list of system variables using the env, printenv, or set commands. - [Variables and its Kinds](https://cloudyuga.guru/lesson/variables-and-its-kinds/) - Like in any other programming language, a variable is a string of characters that is used to assign a value. This value could be anything from a number, string, array, device, filename, etc. There are three kinds of variables available: System Defined Variables User Defined Variables Special Shell Variables - [Built-in Bash Commands](https://cloudyuga.guru/lesson/built-in-bash-commands/) - The built-in bash commands are a set of commands/functions that can be called directly from a shell without invoking another program. Run the following command to view information about bash builtin commands: help Output: Following are a few useful built-in commands: alias It prints the list of aliases for certain commands on the standard output. Run the - [Script Execution and Shebang Line](https://cloudyuga.guru/lesson/script-execution-and-shebang-line/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Script Execution In the previous hello world script example, we saw that we could run the bash script by invoking the bash binary followed by the file name. bash hello.sh However, ideally, the shell script should be self-executable. To make it executable, we need to assign it execute permission. - [Sample Scripts](https://cloudyuga.guru/lesson/sample-scripts/) - Script 1: Hello World Now, let's go through our first shell script with the name hello.sh which will create a text file with content Hello, World! , display the newly created text file, and also count the number of words it contains. echo "Hello, World!" > hello.txt cat hello.txt cat hello.txt | wc -w Run the following command to - [Introduction to Scripting](https://cloudyuga.guru/lesson/introduction-to-scripting/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Being a system administrator, you have to manage the Linux server/systems and need to run a set of shell commands on a daily basis. These commands can be of any kind from gathering information, creating files or directories, managing processes, storing information, etc. Performing these commands on - [Dynamic Scoping](https://cloudyuga.guru/lesson/dynamic-scoping/) - In computer programming, the scope of a name binding (an association of a name to an entity, such as a variable) is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts of the program, the name may - [Conditional Execution](https://cloudyuga.guru/lesson/conditional-execution/) - Bash supports "conditional execution" command separators which are used to make the execution of a command dependent on the exit code of the previous command. It is of following two types: AND Operator Syntax: command1 && command2 Where command2 is executed if, and only if, command1 succeeds. Execute the following command to see how it works: date && echo "Date command - [Command Substitution](https://cloudyuga.guru/lesson/command-subtitution/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Command substitution allows us to use the output of a command as text input for another command. A command substitution, i.e. the whole $(...) expression is replaced by its output, which is the primary use of command substitutions. The command inside the $(...) expression is executed in a subshell, which means it has its own environment - [Variables](https://cloudyuga.guru/lesson/variables/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Run the following commands to declare variables: STUDENT=RAJ COURSE="Mastering Bash and Shell Scripting" echo "Course name is $COURSE and student is $STUDENT" You should see the output as “Course name is Mastering Bash and Shell Scripting and student is RAJ” Another example where we are using Shell environment - [Here Documents](https://cloudyuga.guru/lesson/here-documents/) - Take Quiz Complete Lesson Next Lesson Reset Lesson The Here document (here-doc) is a file literal or input stream literal. It is also used for a form of multiline string literals that use similar syntax, preserving line breaks and other whitespaces (including indentation) in the text. It is a type of redirection that allows you - [Piping](https://cloudyuga.guru/lesson/piping/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Bash piping is a mechanism to send data from one process to another. The operator used is the | (pipe) character usually found below the backspace key on the keyboard. The job of this operator is to feed the output from the process on the left side as input to the - [Filename Globbing](https://cloudyuga.guru/lesson/filename-globbing/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Bash has no built-in support for regular expressions like many other scripting languages. However, it has a feature that can be used to match or expand specific types of patterns (wild card characters). This feature is known as Globbing. It is mainly used to match filenames or search - [Introduction to bash](https://cloudyuga.guru/lesson/introduction-to-bash/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Bash was developed by Brian Fox in 1989. It is one of the most used shells and default for many operating systems. We can also run in inside windows using Windows Subsystem for Linux. Features of Bash Filename globbing (wildcard matching) Piping Here documents Command substitution Variables Control structures for condition-testing Iteration Dynamically scoped - [Shells in Linux](https://cloudyuga.guru/lesson/shells-in-linux/) - Introduction to Shells and Bash If we dig deep Shells are like command processors that run in a text window, where the user types commands to cause some desirable action. Here are a few of the most popular shells available: The Bourne Shell (sh) The Bourne-Again Shell (bash) The C Shell (csh) The Korn Shell (ksh) The Z Shell (zsh) Take Quiz - [Introduction & Prerequisite](https://cloudyuga.guru/lesson/introduction-prerequisite/) - Introduction Learn the powerful and versatile skills of shell programming in this comprehensive course. Shell programming allows you to automate tasks and manipulate files and directories, making it an essential tool for system administrators and power users. With a focus on practical application and hands-on exercises, you'll gain a solid foundation in shell scripting and - [Docker Networking Concepts](https://cloudyuga.guru/lesson/docker-networking-concepts/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! - [Container Images & Basic Image Operations](https://cloudyuga.guru/lesson/container-images-basic-image-operations/) - How to search images on DockerHub ? With the docker search command we can list the available images on DockerHub. We can also access the DockerHub from the browser and search. sudo docker search nginx How to pull an image from DockerHub? To pull an image we can use docker image pull command. sudo docker image pull nginx By default the - [Basic Container Operations](https://cloudyuga.guru/lesson/basic-container-operations-2/) - To Install a Docker on the VM; Refer our Chapter Getting Started with Docker >> Docker Engine. How to pull a container image to create a container? With docker image pull command we can pull an image. sudo docker image pull alpine By default, the pull command will pull the images from Docker Registry/Hub. We can pull the images from a - [Docker's Architecture](https://cloudyuga.guru/lesson/dockers-architecture/) - Chapter Quiz Take Quiz Complete Lesson Next Lesson Reset Lesson - [What is Docker?](https://cloudyuga.guru/lesson/what-is-docker/) - Chapter Quiz Take Quiz Complete Lesson Next Lesson Reset Lesson - [Docker Architecture](https://cloudyuga.guru/lesson/docker-architecture/) - Chapter Quiz Take Quiz Complete Lesson Next Lesson Reset Lesson Please rewatch the video and Try Again!!! - [Docker Context](https://cloudyuga.guru/lesson/docker-context/) - 1. What is docker context ? It is an easy way to store connection information and work with multiple Docker Engines via single Docker CLI. We can easily switch between multiple docker daemons. From the Docker client CLI context, you can run commands on another Docker remote machine as shown in the figure below. Docker Context provides a - [Docker Desktop](https://cloudyuga.guru/lesson/docker-desktop-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Container Runtimes](https://cloudyuga.guru/lesson/container-runtimes/) - Namespaces and Cgroups have existed for a long time, and they are related to containers because these features of Linux Kernels help create containers, which is not an easy process. Hence, Container Runtimes acts as the middleware software to save us and facilitate the easy creation of containers. They use these complex kernel features to create ready-to-deploy containers, which - [VMs Vs Containers](https://cloudyuga.guru/lesson/vms-vs-containers-2/) - Chapter Quiz Please rewatch the video and Try Again!!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Why Containers?](https://cloudyuga.guru/lesson/why-containers-3/) - Chapter Quiz Please rewatch the video and try again!! Please rewatch the video and try again!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [What are Containers?](https://cloudyuga.guru/lesson/what-are-containers-3/) - Chapter Quiz How many containers can be run from one container image? Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Meet Your Instructor](https://cloudyuga.guru/lesson/meet-your-instructor-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Virtual Machines vs Containers](https://cloudyuga.guru/lesson/vms-vs-containers/) - Containers can run more applications than VMs with same configurations Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Docker Compose (Quiz)](https://cloudyuga.guru/lesson/docker-compose-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Docker Logging (Quiz)](https://cloudyuga.guru/lesson/docker-logging-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Storage Management with Docker (Quiz)](https://cloudyuga.guru/lesson/storage-management-with-docker-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Network Management with Docker (Quiz)](https://cloudyuga.guru/lesson/network-management-with-docker-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Working with Container Images using Docker (Quiz)](https://cloudyuga.guru/lesson/working-with-container-images-using-docker-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Getting Started with Docker (Quiz)](https://cloudyuga.guru/lesson/getting-started-with-docker-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Working with Containers using Docker (Quiz)](https://cloudyuga.guru/lesson/working-with-containers-using-docker-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Introduction to Containers (Quiz)](https://cloudyuga.guru/lesson/introduction-to-containersquiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exploring Kubernetes Metrics using ECK](https://cloudyuga.guru/lesson/exploring-kubernetes-metrics-using-eck/) - Metricbeat is a lightweight carrier that can be installed on servers to periodically collect metrics from the operating system and from services running on the server. To get the Kubernetes Metrics we would first install the kube-state-metrics (KSM) service that listens to the Kubernetes API server and generates metrics about the state of the objects. (See examples in - [Application Logging using Elastic Cloud on Kubernetes (ECK)](https://cloudyuga.guru/lesson/application-logging-using-elastic-cloud-on-kubernetes-eck/) - In this section we'll look at filebeat example using which we can collect logs from all the containers running on the cluster. Before doing this lab, make sure you have the running setup of ECK before continuing here. Install the filebeat kubectl apply -f filebeat-eck.yaml kubectl get beat Now access the Kibana on port via app-port-30000 link under the Lab URLs - [Application Performance Monitoring with ECK](https://cloudyuga.guru/lesson/application-performance-monitoring-with-eck/) - Deploy ECK in Kubernetes Cluster Install CRDs and Operators. kubectl create -f https://download.elastic.co/downloads/eck/1.8.0/crds.yaml kubectl apply -f https://download.elastic.co/downloads/eck/1.8.0/operator.yaml kubectl get pods -n elastic-system Deploy an Elasticsearch cluster Apply a simple Elasticsearch cluster specification kubectl apply -f es.yaml Check its health and progress kubectl get elasticsearch Check the pods kubectl get pods --selector='elasticsearch.k8s.elastic.co/cluster-name=quickstart' Request Elasticsearch Access Get the - [Application Logging with EFK/ELK](https://cloudyuga.guru/lesson/application-logging-with-efk-elk/) - Install ElasticSearch kubectl apply -f es.yaml Install Kibana kubectl apply -f kibana.yaml And access the Kibana on port via app-port-30000 link under the Lab URLs section on your top right. Install the application kubectl apply -f filebeat-app.yaml On Kibana -> Management -> Index Patterns and create one pattern Go to Kibana -> Discover Take Quiz Complete Lesson Next Lesson - [OpenTelemetry - Python Example](https://cloudyuga.guru/lesson/opentelemetry-python-example/) - Emitting a trace to your console Install the required python packages apt install python3-pip -y pip install opentelemetry-api pip install opentelemetry-sdk Run the following Python Program from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( BatchSpanProcessor, ConsoleSpanExporter, ) provider = TracerProvider() processor = BatchSpanProcessor(ConsoleSpanExporter()) provider.add_span_processor(processor) trace.set_tracer_provider(provider) tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("foo"): with - [OpenTelemetry Introduction](https://cloudyuga.guru/lesson/opentelemetry-introduction/) - Sample Trace DAG for the MicroService - [Canary Deployment](https://cloudyuga.guru/lesson/canary-deployment/) - As stated rightly by Danilo Sato in this CanaryRelease article,"Canary release is a technique to reduce the risk of introducing a new software version in production by slowly rolling out the change to a small subset of users before rolling it out to the entire infrastructure and making it available to everybody." Canary is one of the most - [Blue Green Deployment](https://cloudyuga.guru/lesson/blue-green-deployment/) - To experience how the blue-green deployment works with Argo Rollouts, we will deploy the sample app which contains Rollouts, Service, and Ingress as Kubernetes objects. rollout.yaml content: # This example demonstrates a Rollout using the blue-green update strategy, which contains a manual # gate before promoting the new stack. apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: rollout-bluegreen spec: replicas: 2 - [Setting up Argo Rollouts and Deployments](https://cloudyuga.guru/lesson/setting-up-argo-rollouts-and-deployments/) - Clone the Argo Rollouts example GitHub repo or preferably, please fork this git clone https://github.com/NiniiGit/argo-rollouts-example.git Installation of Argo Rollouts controller Create the namespace for installation of the Argo Rollouts controller kubectl create namespace argo-rollouts You will see the namespace has been created kubectl get ns argo-rollouts So we will use the latest version to install the Argo - [Progressive Delivery With Argo Rollouts](https://cloudyuga.guru/lesson/progressive-delivery-with-argo-rollouts/) - Continuous Integration(CI) and Continuous Delivery(CD) have been widely adopted in modern software development, enabling organizations to deploy this software to customers quickly. But doing it correctly is essential as, in some cases, unfinished code can lead to failures, and customers have to face downtime. So to solve this, progressive delivery got introduced, which enables to deliver software with the - [GitOps with ArgoCD and Jenkins](https://cloudyuga.guru/lesson/gitops-with-argocd-and-jenkins/) - As the name suggests, with GitOps, we would want to manage our operations, like application deployment, management, scaling, etc, via Git. We can commit to Git, and our applications/infrastructures get installed, updated, etc. Many tools support these, like ArgoCD, Flux, and many more. GitOps tools give us the following features:- Declarative Observability Auditability and Compliance Rollback GitOps Workflow Following - [Introduction](https://cloudyuga.guru/lesson/introduction-11/) - CI/CD is an integral part of DevOps. CI stands for Continuous Integration, where developers frequently push and merge their code changes to a central code repository where automated tests and builds run. On the other hand, CD means Continuous Delivery or Continuous Deployment of the new changes to the end-users. Continuous Integration(CI) is an automation process that helps integrate software development - [Mirroring](https://cloudyuga.guru/lesson/mirroring/) - Traffic mirroring, known as shadowing, helps the production team to bring the features live with less risk. Mirroring sends a copy of live traffic to a mirrored service. Create two different versions of httpbin deployment and service that has logging enabled. Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: httpbin-v1 spec: replicas: - [Traffic Shifting](https://cloudyuga.guru/lesson/traffic-shifting/) - To migrate traffic from one version of the microservice to another. In Istio, it is achieved by configuring routing rules that redirect a percentage of traffic from one version to another. Route all traffic to the v1 version To get started, run the following command to route all traffic to the v1 version of each - [Request Routing](https://cloudyuga.guru/lesson/request-routing/) - In the bookinfo application, there are three different versions of the reviews microservices. If the application is visited multiple times, one can observe that sometimes the output contains star ratings, and sometimes not. To solve this, route all the traffic to any one of the versions of the review microservices. Virtual Service to route all traffic to v1 of the - [Traffic Management](https://cloudyuga.guru/lesson/traffic-management/) - As Istio service mesh helps achieve the following Traffic Management Security Observability Extensibility Traffic Management The traffic management in Istio is done via Envoy proxies which are deployed along with the services. Istio connects to a service discovery system to manage traffic inside the mesh to know all the endpoints. With this service discovery system, - [BookInfo App setup](https://cloudyuga.guru/lesson/bookinfo-app-setup/) - To instruct the Istio to inject the Envoy sidecar proxies automatically when an application is being deployed, add a namespace label istio-injection=enabled kubectl label namespace default istio-injection=enabled kubectl get ns --show-labels Deploy the bookinfo application kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/bookinfo/platform/kube/bookinfo.yaml Verify the app pods and services, and wait for some time to get it running kubectl get pods,svc Describe one - [Istio Installation and App setup](https://cloudyuga.guru/lesson/istio-installation-and-app-setup/) - There are specific ways Istio can be configured in the Kubernetes cluster, such as : Istioctl CLI Helm Istio Operator But, we will be installing Istio with istioctl cli. Download the istioctl binary and install it. curl -L https://istio.io/downloadIstio | sh - cd istio-1.* sudo cp bin/istioctl /usr/bin/. Verify the istioctl installation istioctl Deploy the Istio Service Mesh - [Envoy Introduction](https://cloudyuga.guru/lesson/envoy-introduction/) - In general, proxy means an authority to represent someone else. It acts as an intermediary between the client and the server. As a user, your requests run through a proxy server, which changes your IP addresses and then connects you to the requested website. There are different proxy software such as Nginx, HAproxy, Envoy, etc. As - [Introduction](https://cloudyuga.guru/lesson/introduction-10/) - Challenges with Microservices There are specific challenges while working with microservices which are: Service-to-service communication Dynamic service discovery and its routing Load balancing of services Secure communication of services Observability Authentication and authorization Circuit breaking Retries and timeouts To overcome the above challenges, service mesh has been introduced. Service Mesh Service mesh is a solution that - [Alerting With Prometheus](https://cloudyuga.guru/lesson/alerting-with-prometheus/) - Rules in Prometheus are how to run a promql expression at a particular interval of time and store it in a time-series database. There are two types of rules in Prometheus: Recording Rules: They are used to pre-calculate computationally expensive and time-consuming queries. Alerting Rules: It allows to define alert conditions based on promql expressions and send notifications to - [Service Endpoints of an app in Prometheus](https://cloudyuga.guru/lesson/service-endpoints-of-an-app-in-prometheus/) - As we have deployed a python application. Create a docker image of it. Then create a deployment and service for it. FROM python:3.9-slim-buster WORKDIR /app RUN apt update RUN pip3 install --upgrade pip COPY requirements.txt . RUN pip3 install --no-cache-dir -r requirements.txt COPY app app ENV PYTHONUNBUFFERED 1 ENV PYTHONPATH=/app CMD ["python3", "app/main.py"] Take Quiz - [Prometheus in Kubernetes](https://cloudyuga.guru/lesson/prometheus-in-kubernetes/) - Helm must be installed. Install Prometheus using the helm Install the Prometheus with Helm chart in a namespace monitoring. kubectl create ns monitoring helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/prometheus --namespace monitoring Get the list of the Pods in the monitoring namespace. kubectl get pods -n monitoring Get the list of the services in - [Capturing Python Application Metrics with Prometheus](https://cloudyuga.guru/lesson/capturing-python-application-metrics-with-prometheus/) - Prometheus has various client libraries for monitoring the services such as: Golang Java Python Ruby etc. In this lab, we will create a python application and make Prometheus monitor it. Create a python application main.py in the app directory. mkdir app Take Quiz Complete Lesson Next Lesson Reset Lesson # main.py import http.server from prometheus_client import start_http_server from prometheus_client import Counter - [Working with Prometheus](https://cloudyuga.guru/lesson/working-with-prometheus/) - Install Prometheus Binary curl -L https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz --output prometheus-2.40.0.linux-amd64.tar.gz && tar -xf prometheus-2.40.0.linux-amd64.tar.gz mv prometheus-2.40.0.linux-amd64/prometheus /usr/bin/ prometheus --version Prometheus is configured via a prometheus.yml where Targets are mentioned. cat prometheus-2.40.0.linux-amd64/prometheus.yml Types Of Metrics There are four types of metrics in Prometheus based on their use cases: 1. Counter Its value can only increase or be reset to zero on restart. Use cases - [Intorduction](https://cloudyuga.guru/lesson/introduction-9/) - Helm helps you manage Kubernetes applications. Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application. Charts are easy to create, version, share, and publish. The CNCF maintains the latest version of Helm in collaboration with Microsoft, Google, Bitnami, and the Helm contributor community. The major role of the helm are: - [Custom Resource Definition](https://cloudyuga.guru/lesson/custom-resource-definition/) - Introduction The Kubernetes 1.7 adds an important feature called CustomResourceDefinitions (CRD), which enables plugging in your own managed object and application as if it were a native Kubernetes component. A custom resource is an extension of the Kubernetes API that is not necessarily available on every Kubernetes cluster. We can then use the Kubernetes API - [Helm Chart Repositories](https://cloudyuga.guru/lesson/helm-chart-repositories-2/) - Introduction A chart repository consists of packaged charts and a special file called index.yaml which contains an index of all of the charts in the repository. The preferred way to share a chart is by uploading them to chart repository Storing Chart in a Repository Packaging the chart In order to share a chart, the first step - [Create a Helm Chart From Scratch](https://cloudyuga.guru/lesson/create-a-helm-chart-from-scratch-2/) - Create a sample chart demo helm create demo cat demo/Chart.yaml Templates directory will contain manifest files in yaml format, this can be non parameterized or parameterized. If parameterized it will get corresponding values from value.yaml the file ls demo/templates Create a manifest file for deployment cat demo/templates/deployment.yaml Explore the values.yaml file cat demo/values.yaml Installing the package Here we are going to - [Helm Charts](https://cloudyuga.guru/lesson/helm-charts-2/) - Searching the Charts Go to https://artifacthub.io/ and search for package you are interested in. Searching in a repo Add repo to your helm helm repo add jenkins https://charts.jenkins.io Update repo helm repo update Search for jenkins You can find details about this chart here helm search repo jenkins Installing a new release using a chart To install a new - [Installation](https://cloudyuga.guru/lesson/installation-2/) - Install Helm curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh Check the version using the following command helm version Take Quiz Complete Lesson Next Lesson Reset Lesson - [Falco on Kubernetes](https://cloudyuga.guru/lesson/falco-on-kubernetes/) - Installation As a prerequisite install this if haven't apt search linux-headers-$(uname -r) apt-get -y install linux-headers-$(uname -r) Install Falco on Kubernetes with helm helm repo add falcosecurity https://falcosecurity.github.io/charts helm repo update kubectl create ns falco helm install falco falcosecurity/falco --namespace falco --version 2.5.5 kubectl get pods -n falco Add the Custom Rules customRules: falco_rules.local.yaml: |- - [Falco on Linux](https://cloudyuga.guru/lesson/falco-on-linux/) - Installation curl -s https://falco.org/repo/falcosecurity-packages.asc | apt-key add - echo "deb https://download.falco.org/packages/deb stable main" \ | tee -a /etc/apt/sources.list.d/falcosecurity.list apt-get update -y apt search linux-headers-$(uname -r) apt-get -y install linux-headers-$(uname -r) apt-get install -y falco=0.33.1 systemctl start falco systemctl status falco Adding a sample rule Add the following sample rule in /etc/falco/falco_rules.local.yaml file which will give warning on creating a - [Runtime Security using Falco](https://cloudyuga.guru/lesson/runtime-security-using-falco/) - The Falco Project is an open-source runtime threat detection engine. It is a CNCF incubating project created by Sysdig that analyses the current system behavior, detects and reports any threats based on the rules defined in Falco, and sends alerts. It has three core components: Events Rules Alerts Falco analyzes the system calls coming from the applications in user space to - [What is Runtime Security?](https://cloudyuga.guru/lesson/what-is-runtime-security/) - Runtime security is the detection of threats and malicious behaviors that occur in containers or pods at runtime and taking necessary actions on it. It can protect workloads from a variety of threats after being application is deployed, such as: Authorized access to sensitive information (secrets) that, ideally container should not read, but it manages due - [Kubernetes Auditing](https://cloudyuga.guru/lesson/kubernetes-auditing/) - In general, auditing means inspection, and Kubernetes auditing refers to a set of records documenting the sequence of actions in a cluster. The cluster audits the activities generated by users, by applications that use the Kubernetes API, and by the control plane itself. But why do we need auditing in Kubernetes when we have logs - [Overview of GitOps](https://cloudyuga.guru/lesson/overview-of-gitops/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Configuring Whitelist Registries](https://cloudyuga.guru/lesson/configuring-whitelist-registries/) - To ensure security in every aspect, the image registry role becomes important. To restrict clusters to using images from trusted and approved registries to reduce the risks and pull correct images. Policy Engines such as Kyverno, and OPA can help apply policies on the cluster to ensure this. In this, we will see how to - [ImagePolicyWebhook](https://cloudyuga.guru/lesson/imagepolicywebhook/) - Setup Enable the Admission Controller in the APIServer Configuration Define Admission Controller Configuration file and refer the APIServer Configuration file Define the kubeConfigFile to setup the connection with backend service Send the Payload request Take Quiz Complete Lesson Next Lesson Reset Lesson { "apiVersion":"imagepolicy.k8s.io/v1alpha1", "kind":"ImageReview", "spec":{ "containers":[ { "image":"myrepo/myimage:v1" }, { "image":"myrepo/myimage@sha256:beb6bd6a68f114c1dc2ea4b28db81bdf91de202a9014972bec5e4d9171d90ed" } ], "annotations":{ - [Clair](https://cloudyuga.guru/lesson/clair/) - Clair is an application for parsing image contents and reporting vulnerabilities affecting the contents. This is done via static analysis and not at runtime Clair is a scalable set of services that provides information to both developers and operations about your container's security. It's an open source project and it is community developed. Clair v4 - [Trivy](https://cloudyuga.guru/lesson/trivy/) - “Trivy (tri pronounced like trigger, vy pronounced like envy) is a simple and comprehensive vulnerability/misconfiguration scanner for containers and other artifacts ”. After reading this you might be thinking why we selected this tool and not others. Check this table Trivy detects vulnerabilities of OS packages (Alpine, RHEL, CentOS, etc.) and application dependencies (Bundler, Composer, npm, yarn, - [Exploring Image Scanning Tools](https://cloudyuga.guru/lesson/exploring-image-scanning-tools/) - Image scanning helps in identifying the software vulnerabilities in the container images. Container scanning is the deployment of automated tools that compare the contents of each container to a database of known vulnerabilities. If they determine that a library or other dependency within a container image is subject to a known vulnerability, they will flag - [OPA Conftest](https://cloudyuga.guru/lesson/opa-conftest/) - OPA Conftest helps us write tests against structured configuration data from Kubernetes configuration, Tekton pipeline definitions, Terraform code, Serverless configs or any other config files. It uses the Rego language from OPA. Install Install OPA conftest with the binary LATEST_VERSION=$(wget -O - "https://api.github.com/repos/open-policy-agent/conftest/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*//' | cut -c 2-) wget "https://github.com/open-policy-agent/conftest/releases/download/v${LATEST_VERSION}/conftest_${LATEST_VERSION}_Linux_x86_64.tar.gz" tar xzf conftest_${LATEST_VERSION}_Linux_x86_64.tar.gz sudo mv - [KubeSec](https://cloudyuga.guru/lesson/kubesec/) - KubeSec is a security risk analysis tool for Kubernetes resources. It is available as :- Docker container image at docker.io/kubesec/kubesec:v2 Linux/MacOS/Win binary (get the latest release) Kubernetes Admission Controller Kubectl plugin cat - [Static Analysis](https://cloudyuga.guru/lesson/static-analysis/) - Static analysis is a method for analyzing code/applications for defects, bugs or security issues, tools perform automated checks to improve quality. Some of the static analysis tools are: kubesec OPA Conftest Take Quiz Complete Lesson Next Lesson Reset Lesson - [CIS Benchmark for Docker](https://cloudyuga.guru/lesson/cis-benchmark-for-docker/) - We have already seen what the CIS benchmark is and why do we need it in the General OS Security section there we have applied the CIS benchmark on the OS which was Ubuntu 20.04 . Now we are going to learn about the CIS benchmark for Docker. We are going to use the Docker - [Sharing Namespaces between the host and container](https://cloudyuga.guru/lesson/sharing-namespaces-between-the-host-and-container/) - Network Namespace docker container run -it --net=host alpine sh Pid Namespace docker container run -it --pid=host alpine sh Pid and Network Namespace docker container run -it --net=host --pid=host alpine sh Mounting "/" of host system to container docker container run -it -v /:/host alpine sh Take Quiz Complete Lesson Next Lesson Reset Lesson - [Container Privileged Mode](https://cloudyuga.guru/lesson/container-privileged-mode/) - With the privileged mode, we can give extended privileges to the container to access the devices. By default, it is not enabled. To enable it, we need to pass --privileged option with docker container run command. Let us start container and share the network namespace of the host system, but without the --privileged mode. Run the following command from the console - [Image Signing with Kyverno and Cosign](https://cloudyuga.guru/lesson/image-signing-with-kyverno-and-cosign/) - In this part, we will see how to sign container images with cosign, a sub-project by sigstore with public/private key-pairs. We will then impose a policy with the help of the Kyverno policy engine to use signed container images only in the cluster. What is Cosign? Cosign is a command-line utility that helps in signing container images. Not only container images, but it - [Image Signing](https://cloudyuga.guru/lesson/image-signing/) - We need to make sure that we are using the images which were created by the author. There can be a man-in-the-middle attack, and we may get an untrusted image. To avoid we can sign the images while pushing them to the container registry, and then end-users can verify the signature at the download time. - [Image Registries](https://cloudyuga.guru/lesson/image-registries/) - Image registries are the software on which we store our container images. These can be both Public and Private. Following are some example of registries :- DockerHub Red Hat Quay Amazon Elastic Container Registry (ECR) Azure Container Registry Jfrog Container Registry VMware Harbor, etc. Setting up a Private Registry docker run -d -p 5000:5000 --restart - [Make the root filesystem as read-only](https://cloudyuga.guru/lesson/make-the-root-filesystem-as-read-only/) - docker container run -it --read-only alpine /bin/sh Take Quiz Complete Lesson Next Lesson Reset Lesson - [Remove Shell Access](https://cloudyuga.guru/lesson/remove-shell-access/) - We can remove the Shell's binary from the container image to make more secure. Take Quiz Complete Lesson Next Lesson Reset Lesson FROM ubuntu AS buildstep RUN apt-get update && apt-get install -y build-essential gcc COPY hello.c /app/hello.c WORKDIR /app RUN gcc -static -o hello hello.c && chmod +x hello FROM alpine RUN mkdir -p - [Run Applications as non-root user](https://cloudyuga.guru/lesson/run-applications-as-non-root-user/) - FROM openjdk:8u121-jdk-alpine RUN apk add --no-cache git openssh-client curl unzip bash ttf-dejavu coreutils ARG user=jenkins ARG group=jenkins ARG uid=1000 ARG gid=1000 ARG http_port=8080 ARG agent_port=50000 ENV JENKINS_HOME /var/jenkins_home ENV JENKINS_SLAVE_AGENT_PORT ${agent_port} ... ... ... USER ${user} COPY jenkins-support /usr/local/bin/jenkins-support COPY jenkins.sh /usr/local/bin/jenkins.sh ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"] # from a derived Dockerfile, can use `RUN plugins.sh - [Multistage Dockerfiles](https://cloudyuga.guru/lesson/multistage-dockerfiles/) - The multi-stage build is the new feature introduced in Docker 17.05, Which is very useful for optimizing the Dockerfile. It is a very challenging task to write down the efficient Dockerfile with the lesser Docker image size. Each instruction in the Dockerfile creates the layer to the Docker image. Generally, before this feature one Dockerfile - [Combine Multiple RUN Instructions](https://cloudyuga.guru/lesson/combine-multiple-run-instructions/) - As only RUN, COPY and ADD instructions create layers and intermediate containers, which may increase the image size. , if we add combine a logical set of commands in one RUN instruction, we can reduce the size of our image. Take a look at the following Dockerfile for nginx in which, we can combined multiple RUN instructions into one. Take Quiz Complete Lesson Next - [Minimizing Image Footprint and Secure Images](https://cloudyuga.guru/lesson/minimizing-image-footprint-and-secure-images/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exploring Images with dive](https://cloudyuga.guru/lesson/exploring-images-with-dive/) - dive is a tool for exploring a docker image, layer contents, and discovering ways to shrink the size of your Docker/OCI image. wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb sudo apt install ./dive_0.9.2_linux_amd64.deb dive Dive In Extension in Docker Desktop Docker Dive is an image analysis tool that helps one find layers and gives a separate size of each layer and - [Dockerfile from Image (dfimage)](https://cloudyuga.guru/lesson/dockerfile-from-image-dfimage/) - dfimage tool can be used to reverse-engineer a Dockerfile from a Docker image. docker pull quay.io/laniksj/dfimage alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm quay.io/laniksj/dfimage" docker pull nginx:latest dfimage nginx:latest Verify the Dockerfile content from nginx dockerhub Take Quiz Complete Lesson Next Lesson Reset Lesson - [Dockerfiles](https://cloudyuga.guru/lesson/dockerfiles/) - # # NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" # # PLEASE DO NOT EDIT IT DIRECTLY. # FROM debian:buster-slim LABEL maintainer="NGINX Docker Maintainers " ENV NGINX_VERSION 1.21.3 ENV NJS_VERSION 0.6.2 ENV PKG_RELEASE 1~buster RUN set -x \ # create nginx user/group first, to be consistent throughout docker variants && addgroup --system --gid 101 nginx - [Docker Images](https://cloudyuga.guru/lesson/docker-images/) - docker image pull nginx docker image inspect nginx:latest docker image ls --digests docker image history nginx:latest Take Quiz Complete Lesson Next Lesson Reset Lesson - [Storage Drivers for Containers](https://cloudyuga.guru/lesson/storage-drivers-for-containers/) - Every Container gets a temporary storage to work with. and when we store images for containers, they get stored in layers. To support the temporary storage and store images we need a storage driver. Docker support many such storage drivers. Take Quiz Complete Lesson Next Lesson Reset Lesson - [UnionFS](https://cloudyuga.guru/lesson/unionfs/) - UnionFS transparently overlays files and directories of separate filesystems, to create a coherent filesystem. Each one of the participant directories is referred to as a branch. We can set the priority while mounting branches, mount them read-only, etc. In the following diagram, we can see that dir1 has two files, f1 and f2. dir2 also has two files,f3 and f4. After mounting them using FUSE implementation - [Container Images](https://cloudyuga.guru/lesson/container-images/) - A container image is a file with application code and binaries that can create a container on a system. It is immutable. A container image consists of layers that are added to a parent/base image. These layers help reuse components and configurations across images, which also helps reduce image size and performance. Take Quiz Complete - [Kubernetes and Container Runtimes](https://cloudyuga.guru/lesson/kubernetes-and-container-runtimes/) - In Kubernetes,kubelet is the agent that works on each cluster node. It receives what containers should be running and make them run with the help of container runtime on the node. It also contains information about running containers from container runtime. The kubelet deals with the container engine through a Container Runtime Interface (CRI) Container Runtime - [Containerd and ctr](https://cloudyuga.guru/lesson/containerd-and-ctr/) - With the help of runc we can only create one container If we have to manage multiple such containers we can not do it with the help of runc. However, we have containerd, to facilitate such kind of operation. Containerd is a high-level container runtime. It is a daemon that manages the lifecycle of containers on a single host: creates, - [Understanding Container Runtimes](https://cloudyuga.guru/lesson/understanding-container-runtimes/) - Containers are becoming the default choice to deploy applications. Containers are created using the Containers Runtimes like Containerd, cri-o, Docker, etc. We run our applications in an isolated environment such that applications have their own independent identity like hostname, IP Address, etc. In Operating Systems like Linux and Windows, we have features like Cgroups and Namespaces; which enable containerization. Cgroups: - [Configuring mTLS](https://cloudyuga.guru/lesson/configuring-mtls/) - This example is taken from Envoy's Double Proxy with mTLS Encryption. But before that let's see how a network proxy (Envoy Proxy) helps in doing secure service-to-service communication. This demo shows a double proxy configuration in which aiohttp app connects to the PostgreSQL database with two Envoy proxies in between. This example encrypts the transmission of data between the two middle - [What is mTLS?](https://cloudyuga.guru/lesson/what-is-mtls/) - Mutual TLS(mTLS) is a method for mutual authentication. In mutual communication, when two sides of communication verify each other identities instead of only one side verifying the other. It is also known as two-way authentication.mTLS ensures that each party at the end of a network connection is the one who they claim to be by verifying their - [Open Policy Agent (OPA)](https://cloudyuga.guru/lesson/open-policy-agent-opa/) - OPA (Open Policy Agent) is an open-source, general-purpose policy engine that helps in policy enforcement across the stack which is now maintained by CNCF. OPA provides a high-level declarative language (REGO) that lets you specify policy as code and simple APIs to offload policy decision-making from your software. You can use OPA to enforce policies in - [Kyverno](https://cloudyuga.guru/lesson/kyverno/) - kyverno(Greek for “govern”) is a policy engine designed for Kubernetes. Kyverno runs as a dynamic admission controller in a Kubernetes cluster. It can validate, mutate or generate resources. It also helps in verifying container images for software supply chain security. Kyverno receives validating and mutating admission webhook HTTP callbacks from the kube-apiserver and applies matching policies - [Kubernetes Admission Controllers](https://cloudyuga.guru/lesson/kubernetes-admission-controllers/) - Take Quiz Complete Lesson Next Lesson Reset Lesson As Kubernetes has become standard for advanced container orchestration, it’s also necessary to use extensions that work alongside Kubernetes to provide security and modularity. Some of the most advanced security features that work alongside Kubernetes nowadays are admission controllers. An admission controller is a piece of code that intercepts - [Policy Enforcement using OPA and Kyverno](https://cloudyuga.guru/lesson/policy-enforcement-using-opa-and-kyverno/) - There are two popular policy agents are used with Kubernetes Kyverno - Kubernetes Native Open Policy Agent - General Purpose OPA (Open Policy Agent) is an open-source, general-purpose policy engine that uses a high-level declarative language (REGO) with a steep learning curve. On the other hand, Kyverno(Greek for “govern”) is an open-source policy engine natively for Kubernetes, and policies are written in YAML as Kubernetes resources for keeping things - [Encrypting Secrets at ETCD](https://cloudyuga.guru/lesson/encrypting-secrets-at-etcd/) - Please refer the Building Secure Cluster -> Exploring ETCD and enabling Encryption section Take Quiz Complete Lesson Next Lesson Reset Lesson - [Secrets as Volumes](https://cloudyuga.guru/lesson/secrets-as-volumes/) - kubectl apply -f secret-vol.yaml Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: secret-volume spec: containers: - name: test-container image: nginx:alpine volumeMounts: - name: secret-volume mountPath: /tmp/config volumes: - name: seccet-volume secret: secretName: mysecret restartPolicy: Never - [Secrets as Environment Variables](https://cloudyuga.guru/lesson/secrets-as-environment-variables/) - Create a configuration file for the pod as shown below where we have given the Environment variable via secret. apiVersion: v1 kind: Pod metadata: name: secret-env spec: containers: - name: nginx image: nginx:alpine env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never Take - [Managing Secrets](https://cloudyuga.guru/lesson/managing-secrets/) - Create a Secret Suppose we want to share the secret value cloudyuga as username and cloudyuga123 as password value in the Kubernetes Secret specification file. For this we would first encode the values as below: echo -n cloudyuga | base64 echo -n cloudyuga123 | base64 From the above encoded data, create a configuration file for creating the secret apiVersion: v1 kind: - [Setting up ResourceQuota for a Namespace](https://cloudyuga.guru/lesson/setting-up-resourcequota-for-a-namespace/) - Create a Resource-Quota object for a Namespace Create a namespace kubectl create namespace quota-mem-cpu-example Create a resource quota for that namespace Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu namespace: quota-mem-cpu-example spec: hard: requests.cpu: "0.5" requests.memory: 512Mi limits.cpu: "1" limits.memory: 1Gi kubectl apply -f quota.yaml Describe the resource quota for that namespace - [Setting up defaults using LimitRange](https://cloudyuga.guru/lesson/setting-up-defaults-using-limitrange-3/) - Define a LimitRange to set Default requests and limits Define the LimitRange apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 512Mi defaultRequest: memory: 256Mi type: Container Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f mem-limit-range.yaml kubectl describe limitrange mem-limit-range Deploy the app with no requests and limits defined piVersion: v1 kind: Pod - [Requests and Limits](https://cloudyuga.guru/lesson/requests-and-limits-3/) - Create a Pod with defined requests and limits apiVersion: v1 kind: Pod metadata: name: nginx-requests-limits labels: app: nginx spec: containers: - name: nginx image: registry.cloudyuga.guru/library/nginx:alpine ports: - containerPort: 80 resources: limits: memory: "400Mi" cpu: "0.3" requests: memory: "300Mi" cpu: "0.2" Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f pod-requests-limits.yaml kubectl get pods - [Enforcing Resource Limiting](https://cloudyuga.guru/lesson/enforcing-resource-limiting/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Enabling Read-Only FS](https://cloudyuga.guru/lesson/enabling-read-only-fs/) - Read only file system has various advantage, you can safely assume and make sure that once done, there are manually changes in container configuration. It also acts as first line of defence against attacker, to not allow installs on the system, or make any changes to config in the system. apiVersion: v1 kind: Pod metadata: - [Allow Privilege Escalation](https://cloudyuga.guru/lesson/allow-privilege-escalation/) - Privileged - determines if any container in a pod can enable privileged mode. By default a container is not allowed to access any devices on the host, but a “privileged” container is given access to all devices on the host. This allows the container nearly all the same access as processes running on the host. - [Linux Capabilities](https://cloudyuga.guru/lesson/linux-capabilities/) - apiVersion: v1 kind: Pod metadata: name: security-context-remove-cap spec: containers: - name: sec-ctx-remove-cap image: nginx:alpine securityContext: capabilities: drop: - NET_RAW Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f remove-network-cap.yaml Now exec into the container kubectl exec -it security-context-remove-cap -- sh And then try to ping any website. - [Configuring SecurityContext](https://cloudyuga.guru/lesson/configuring-securitycontext/) - A security context defines privilege and access control settings for a Pod or Container. Following is one of the example apiVersion: v1 kind: Pod metadata: name: security-context-demo spec: securityContext: runAsUser: 1000 runAsGroup: 3000 fsGroup: 2000 volumes: - name: sec-ctx-vol emptyDir: {} containers: - name: sec-ctx-demo image: busybox command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: - [Container Runtime Sandoxes like Kata containers, gVisor](https://cloudyuga.guru/lesson/container-runtime-sandoxes-like-kata-containers-gvisor/) - Katacontainers Storage isolation layer Creates a VM for every container QEMU as default hypervisor. gVisor gVisor is an application kernel, written in Go, that implements a substantial portion of the Linux system call interface. It provides an additional layer of isolation between running applications and the host operating system. gVisor includes an Open Container Initiative (OCI) runtime called runsc that - [CIS Benchmark of OS](https://cloudyuga.guru/lesson/cis-benchmark-of-os/) - When a new operating system or application is installed, it comes with default settings. Usually, all ports are open, and all application services are turned on. In other words, freshly installed assets are highly insecure.CIS benchmarks are a set of configuration standards and best practices designed to help organizations ‘harden’ the security of their digital - [Configuring Linux Firewall](https://cloudyuga.guru/lesson/configuring-linux-firewall/) - A firewall is a security system for networks that manages the flow of incoming and outgoing network traffic based on established security policies. Its purpose is to prevent unauthorized access and maintain control over network traffic. The Netfilter subsystem, integrated into the Linux kernel, is responsible for managing network traffic entering or passing through a server. This system serves as the foundation for modern Linux - [Limiting Network Access](https://cloudyuga.guru/lesson/limiting-network-access/) - Run a local firewall and don’t open ports you don’t need. Even when you’re not on the internet, there is no reason to allow everything into the machine. If an attacker (or insider threat) has access to one host on your network, it should be hard for them to move laterally to other assets. Applications - [Seccomp in Kubernetes](https://cloudyuga.guru/lesson/seccomp-in-kubernetes/) - As discussed earlier with Secure Computing (seccomp) we can restrict the systemcalls which are made by the program. We can load our seccomp profiles with Kubernetes as well. It has enabled from Kubernetes 1.19 and with RuntimeDefault feature, which is currently in alpha, we can load the our profile for all the workloads. Lets are now look at the - [Seccomp](https://cloudyuga.guru/lesson/seccomp/) - Secure computing (seccomp) is a security feature in the Linux kernel that allows you to restrict the system calls that can be made by a process. A system call is a process through which a user-space process communicates with the Linux kernel in order to access resources or functionality. Whenever you want to create a file, change - [AppArmor in Kubernetes](https://cloudyuga.guru/lesson/apparmor-in-kubernetes/) - AppArmor is a Linux security kernel module that limits user and group permissions to a program's resources. Kubernetes also supports Apparmor. Check AppArmor is enabled and profiles are loaded in the node with cat /sys/module/apparmor/parameters/enabled cat /sys/kernel/security/apparmor/profiles Securing a Pod with Apparmor Apparmor profiles are container-specific. One has to add an annotation in the pod's - [AppArmor Commands](https://cloudyuga.guru/lesson/apparmor-commands/) - There are several AppArmor commands which help in working with profiles easily. Check the AppArmor Profiles status To check the current status of the existing AppArmor profiles, execute apparmor_status Take Quiz Complete Lesson Next Lesson Reset Lesson apparmor module is loaded. 9 profiles are loaded. 9 profiles are in enforce mode. /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/NetworkManager/nm-dhcp-helper /usr/lib/connman/scripts/dhclient-script /usr/lib/snapd/snap-confine - [AppArmor](https://cloudyuga.guru/lesson/apparmor/) - AppArmor is a Linux kernel security module and a Mandatory Access Control (MAC) system for applications. It confines programs to a limited set of resources. It restricts programs to a specific set of files and capabilities so that it doesn't go deep into the system and create havoc situations. It enables system administrators to specify the permissions for individual applications and - [Understanding Linux Capabilities](https://cloudyuga.guru/lesson/understanding-linux-capabilities/) - The Linux capabilities feature breaks up the privileges available to processes run as the root user into smaller privileges groups. This way, a process running with root privilege can be limited to get only the minimal permissions it needs to perform its operation. Docker supports Linux capabilities as part of the docker run command: with --cap-add and --cap-drop. By default, - [Understanding Resource Isolation and Limiting](https://cloudyuga.guru/lesson/understanding-resource-isolation-and-limiting/) - In OS like Linux, we have the concept of Namespaces and Cgroups, which provides isolation and resource allocation respectively. Namespaces There are six namespaces :- ipc mnt net pid user uts (hostname) They are used to provide resource isolation to every program and in most cases containers are program in execution; these namespaces provide isolation to container as well. Control - [Minimize IAM Roles](https://cloudyuga.guru/lesson/minimize-iam-roles/) - practice, it is recommended to use non-root users always and use sudo for root user privileges. Similarly, in cloud platforms, When a user signs up and creates an account (say AWS), it is known as a root user, which has all the privileges and can access all AWS services. But there also, a good approach is - [Aquasec Tracee](https://cloudyuga.guru/lesson/aquasec-tracee/) - Tracee is an open-source project created by AquaSecurity.Earlier, it was designed to trace system calls made by containers with eBPF technology to observe system behavior. But now, it is more than a tracer, it helps in performing forensics investigations and dynamic analysis of binaries. Features of Tracee Powerful, accurate, and reliable ebpf threat-detection engine With the help of Tracee - [Strace Tool](https://cloudyuga.guru/lesson/strace-tool/) - Strace is a useful debugging and troubleshooting tool used to diagnose the communication between a program's user and kernel space. It includes system calls and signal deliveries, and its return values are printed on standard error or could be redirected to a file using -o flag on the terminal. Strace internally uses ptrace for tracing the system calls. The ptrace() system call provides a means - [Overview of Systemcalls](https://cloudyuga.guru/lesson/overview-of-systemcalls/) - The system call is the fundamental interface between an application and the Linux kernel. A system call is an entry point into the Linux kernel. Usually, system calls are not invoked directly; most system calls have corresponding C library wrapper functions that perform the steps required to invoke the system call. Thus, making a system call looks the same - [Minimize Host OS footprint](https://cloudyuga.guru/lesson/minimize-host-os-footprint/) - If our workload consists of only containers, we don't need the generic Operating System; which may contain un-necessary packages. Now there are many minimal OS available which are optimised for container workloads like CoreOS, AWS Bottelrocket, Flatcar Linux Google's Container-Optimized OS. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Understanding Userspace/Kernel Space](https://cloudyuga.guru/lesson/understanding-userspace-kernel-space/) - Let's try to perform a simple operation of reading a file. cat /etc/os-release The above command will read the content from file /etc/os-release and print in the screen. In the above example, when we performed the command cat /etc/os-release, then open() , read() or other system calls are performed in the User space which tell the Kernel with help of glibc to locate - [Least Privilege Principle](https://cloudyuga.guru/lesson/least-privilege-principle/) - In the least Privilege principle, give privileges to users that are only needed. In this, disable the root user and give sudo access to non-root users. Always install packages that are required. Open only those network ports that will be used and enable a firewall on them. Always use RBAC in case of the cluster - [Configuring Secure Access to the Dashboard](https://cloudyuga.guru/lesson/configuring-secure-access-to-the-dashboard/) - To installed the Kubernetes dashboard we can use the YAML file given at its git repository. But we made minor changes to work on our with insecure port and without any auto generated certificates, as we already have HTTPS configured. kubectl apply -f k8s-dashboard.yaml Let us now deploy the ingress to access it. apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - [Add ImagePullSecrets to a Service Account](https://cloudyuga.guru/lesson/add-imagepullsecrets-to-a-service-account/) - Instead of adding ImagePullSecrets for each Pod, when we pull images from private repository, we can add it to the Service Account. As Service Account get attached to the Pod, the ImagePullSecrets also get attached. kubectl create secret docker-registry myregistrykey --docker-server=DUMMY_SERVER \ --docker-username=DUMMY_USERNAME --docker-password=DUMMY_DOCKER_PASSWORD \ --docker-email=DUMMY_DOCKER_EMAIL kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}' Take Quiz Complete Lesson Next Lesson Reset Lesson - [Configuring Service Accounts](https://cloudyuga.guru/lesson/configuring-service-accounts/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Manually Creating a Service Account apiVersion: v1 kind: ServiceAccount metadata: name: cloudyuga kubectl apply -f sa.yaml In version 1.6+, we can opt out of automounting API credentials for a service account by setting automountServiceAccountToken: false on the service account. apiVersion: v1 kind: ServiceAccount metadata: name: cloudyuga-sa automountServiceAccountToken: false Similarly - [Accessing the API from a Pod](https://cloudyuga.guru/lesson/accessing-the-api-from-a-pod/) - If a service account is mounted inside a Pod, then we can easily connect to the APIServer via a simple curl call like following:- Take Quiz Complete Lesson Next Lesson Reset Lesson # Point to the internal API server hostname APISERVER=https://kubernetes.default.svc # Path to ServiceAccount token SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount # Read this Pod's namespace NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace) # Read the - [Accessing Cluster with Programmatic access to the API](https://cloudyuga.guru/lesson/accessing-cluster-with-programmatic-access-to-the-api/) - apt update; apt install python3-pip pip install kubernetes python pod-ip-all-ns.py Take Quiz Complete Lesson Next Lesson Reset Lesson - [Accessing Cluster via REST API](https://cloudyuga.guru/lesson/accessing-cluster-via-rest-api/) - APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ") SECRET_NAME=$(kubectl get secrets | grep ^default | cut -f1 -d ' ') TOKEN=$(kubectl describe secret $SECRET_NAME | grep -E '^token' | cut -f2 -d':' | tr -d " ") curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure APISERVER=$(kubectl - [Accessing Cluster via kubectl](https://cloudyuga.guru/lesson/accessing-cluster-via-kubectl/) - To know about the kubectl version kubectl version To know about the Kubernetes cluster nodes information kubectl get nodes To connect securely to Kubernetes Apiserver, run the following command. kubectl proxy Open another terminal and run the curl command. curl 127.0.0.1:8001 Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1URXhNREExTXpJd05Wb1hEVE15TVRFd056QTFNekl3TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTlMzCmFIeC80UEM1eDZXcHZRemRlTjY3TzFpZTdqWGhaWWhGc1FkSGkxWFg1SVBLQmlqTmJobEVldjlYVmFtMWx0MDAKdUVZak4yamNrUmRwelEzVk5QdHJhK0RrMTJFVXhOcUNSNDNvS3lCSzUxSUFNWSt2ZmZzNDlnUU5QbXRyYUxyMgoydGVNUXJVdCtiVisyaGc1S1JSdFlDQmx6cjkvUllSWGEwZHVtREx1eUFyVHVDNURXMEFCdXNJckdjRmtBMWl4CkkwOXdLNG9NWXl1Q2tPdGhCeUU1OTVzN0lpd3JKWHdwYmxTUXZQU3pFTmZEZDc2bFBBQkVPOEJOYy95MWpwaloKK05RVHdNbGhRZDVlZjdGS3dlYXhHT0RTNnc3Qjd0c2MyelpyMVJNZ25zRitRTlNBZG9ZeWdjZnlMMW1reEhQTApvUTlnNzJBenFLRGV0V1krRkZjQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZCMXQ3V0NqNTJUVWhmeHNtRlZwSm9wdzVlY05NQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSk80TzQ2R3lOdTkzdTJPalBpSQpqVEswdXdiczNPdGFqalNiMnZvb3ExYkovNWVrTFB4d3lzNFl2YmFnQUFSOGJwS3ZuYW51VGN1S0hpd1Z3WkhvClZ4S1Yzdk9lUUphMVdNQVpFeWVYWVBMTmVqUWRRTWtTZDE3ZnZxdVQzS3NFUGd1bk85bHZoVGxuTVQweFd6ZVoKbHN2U2tGUkZXNXlDRGpjVnU3SkVBTXZmc0xCT0hZRGZ3b0xtaUxkMktCb2VmMzdHaW9qQzJxazRnaHhzY1BubQpZWkhRc21xMVZocWpkYjN1U3BRd3FMY1VuR3ErbGRmeE1rbjVqendjbE14ajVxVkNWM2F4VzJ2MWp2TGhiSGFkCnpwMzZiY2tIZ3dnWWE5ZHZ4ZjhYbzR1NUpzQWlLVmY0b0p6emltdFJPK3JjQ0pOQ0g5VHR4dzFQNkxQQ0xITkoKektBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://10.0.5.115:6443 name: kubernetes contexts: - - [Accessing Cluster](https://cloudyuga.guru/lesson/accessing-cluster/) - We can access the cluster either via command like or via API. Let us explore both the options here. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exploring RBAC Krew Plugins](https://cloudyuga.guru/lesson/exploring-rbac-krew-plugins/) - To learn different Kubectl Plugins for RBAC managed by Krew Plugin Manager. Install Krew ( set -x; cd "$(mktemp -d)" && OS="$(uname | tr '[:upper:]' '[:lower:]')" && ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*//' -e 's/aarch64$/arm64/')" && KREW="krew-${OS}_${ARCH}" && curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" && tar zxvf "${KREW}.tar.gz" && ./"${KREW}" install krew ) export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" echo - [Role and Bindings](https://cloudyuga.guru/lesson/role-and-bindings/) - Create a Role within the cloudyuga namespace kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: cloudyuga name: deployment-manager rules: - apiGroups: ["", "apps"] resources: ["deployments", "replicasets", "pods"] verbs: ["get", "list", "watch", "create", "update"] Take Quiz Complete Lesson Next Lesson Reset Lesson In this yaml file we are creating the rule that allows a user to execute several operations on Deployments, Pods - [Configuring Authorization using RBAC](https://cloudyuga.guru/lesson/configuring-authorization-using-rbac/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Service Accounts](https://cloudyuga.guru/lesson/service-accounts-4/) - From the Kubernetes Documentation :- User accounts are for humans. Service accounts are for processes, which run in pods. User accounts are intended to be global. Names must be unique across all namespaces of a cluster. Service accounts are namespaced. Typically, a cluster's user accounts might be synced from a corporate database, where new user - [Normal Users](https://cloudyuga.guru/lesson/normal-users-2/) - Create a namespace for the user to connect kubectl create ns cloudyuga Create a Private Key and Certificate Signing Request (CSR) for the User Create the Private Key for user cy-user openssl genrsa -out cy-user.key 2048 Create the CSR for user cy-user openssl req -new -key cy-user.key -out cy-user.csr -subj "/CN=cy-user/O=cloudyuga" cat cy-user.csr Generate the Kubernetes Certificate - [Authentication](https://cloudyuga.guru/lesson/authentication-3/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cluster Upgrades](https://cloudyuga.guru/lesson/cluster-upgrades/) - A Kubernetes Release looks like 1.26.4, where 1 is the major release 26 is the minor release 4 is the patch The release cycle for a minor release is every 4 months. We should regularly update our cluster to get recent fixes and be supported. Only the last 3 minor versions are officially supported. Upgrade - [Node Metadata Protection](https://cloudyuga.guru/lesson/node-metadata-protection/) - we are on the Cloud like AWS, Azure, DigitalOcean, GCP etc, then the Kubernetes nodes and Pods running inside the cluster can access the underlying metadata of the nodes. This may contain some sensitive information like VM creation credential etc and we should protect it. $ kubectl get nodes NAME STATUS ROLES AGE VERSION pool-6ajnnu79t-u77m7 - [Configuring Network Policy](https://cloudyuga.guru/lesson/configuring-network-policy/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Egress Network Policy](https://cloudyuga.guru/lesson/egress-network-policy/) - Deny egress traffic from an application Create an Nginx application kubectl run nginx --image=nginx --port 80 --expose --labels app=web Try to access the application from another pod with label set to app=client kubectl run --rm --image=alpine -it -l app=client test -- sh wget -qO- --timeout=2 http://nginx Create the NetworkPolicy, which denies egress connection from Pods which have label set to app=client - [Ingress Network Policy](https://cloudyuga.guru/lesson/ingress-network-policy/) - Deny All traffic to the pods Create the nginx application as below: kubectl run nginx --image=nginx --labels app=nginx --expose --port 80 Run Busybox Pod and try to access the nginx application from it kubectl run --rm -i -t --image=alpine demo -- sh wget -qO- --timeout=2 http://nginx Create a Network Policy so it can restrict the - [Ingress Controller and Ingress](https://cloudyuga.guru/lesson/ingress-controller-and-ingress/) - A Kubernetes ingress is an API object that helps expose outside internet traffic to the services running within the Kubernetes cluster by exposing HTTP and HTTPS routes. It helps in load-balancing the traffic, terminate SSL/TLS, and offers virtual-based and fan-out routing.Ingress does this with the help of an ingress controller, which allows users to define how external clients should - [Encrypting Secrets Data at Rest](https://cloudyuga.guru/lesson/encrypting-secrets-data-at-rest/) - By default etcd stores all the secrets as base64 encoding, which we can easily decode. If someone get access to our etcd data, then all the secrets can be revealed. Create a secret with a name first and provide key-value through --from-literal flag kubectl create secret generic first --from-literal=foo=bar kubectl get secret first -o yaml This command will show the key's value in an encoded format and - [ETCD in Kubernetes](https://cloudyuga.guru/lesson/etcd-in-kubernetes/) - In the previous article, we have seen about etcd, its installation with its implementation, and how to set up a 3-node etcd local cluster. Now, in this article, we will be exploring the working of etcd in Kubernetes and how it stores the information about the cluster, and how we can interact with etcd to fetch the cluster-info. - [Exploring ETCD](https://cloudyuga.guru/lesson/exploring-etcd/) - ETCD Installation To get started with etcd, first, let’s see how to install it on the local system with the below-mentioned steps having Linux as its operating system. sudo apt install etcd -y etcd --version export ETCDCTL_API=3 && etcdctl version Start the etcd server etcd & Basic Interaction with ETCD Write a key etcdctl put - [Exploring ETCD and enabling Encryption](https://cloudyuga.guru/lesson/exploring-etcd-and-enabling-encryption/) - etcd is a strongly consistent, distributed key-value store that provides a reliable way to store data that needs to be accessed by a distributed system or cluster of machines. It is an open-source project maintained by CNCF. Most notably, it manages the configuration data, state data, and metadata for Kubernetes, the popular container orchestration platform. etcd has its roots with the developers at CoreOS. The - [Exploring Network Ports used by different Cluster components](https://cloudyuga.guru/lesson/exploring-network-ports-used-by-different-cluster-components/) - From the Kubernetes Documentation Take Quiz Complete Lesson Next Lesson Reset Lesson - [PKI in Kubernetes](https://cloudyuga.guru/lesson/pki-in-kubernetes/) - While setting up the Kubernetes Cluster via Kubeadm, PKI is setup by the installation process. Most of them are saved under /etc/kubernetes/pki. We need to make sure the communication between different components are secure and that is why we create different client and server certificates to verify each other. We can need server certificates to be validated by the clients and client - [Public Key Infrastructure and Let's Encrypt](https://cloudyuga.guru/lesson/public-key-infrastructure-and-lets-encrypt/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Public Key Infrastructure (PKI) and Kubernetes Setup](https://cloudyuga.guru/lesson/public-key-infrastructure-pki-and-kubernetes-setup/) - Let us explore the Public Key Infrastructure (PKI), Let's Encrypt and Kubernetes Setup. In the Kuberentes cluster, every component interacts with each other over a secure channel.They do it with the help of TLS certificates.Each server and client side has certificates generated for them to authenticate themselves. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Verify Platform Binaries](https://cloudyuga.guru/lesson/verify-platform-binaries/) - If you are trying to install it manually then before installation you can go to the Kubernetes Git Repo and get the checksums of different binaries. For example for release v1.26.0, we can go to the following:- Click on the CHANGELOG and get SHA512 HASH of different Client, Server and Node binaries. Then after downloading the tar file locally we can - [Kubelet Security](https://cloudyuga.guru/lesson/kubelet-security/) - Kubelet in Kubernetes does the following things: Node agent on each worker node which registers the worker node to the API-Server. Creates pods on worker nodes with the help of container runtime. Keeps a check on whether pods running on worker nodes are healthy or not and reports to the API-Server accordingly. One always has to - [APIServer Configuration File](https://cloudyuga.guru/lesson/apiserver-configuration-file/) - apiVersion: v1 kind: Pod metadata: annotations: kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.197.127:6443 creationTimestamp: null labels: component: kube-apiserver tier: control-plane name: kube-apiserver namespace: kube-system ..... ..... status: {} Take Quiz Complete Lesson Next Lesson Reset Lesson APISever Configuration Options You can find the details about all the options here. spec: containers: - command: - kube-apiserver - --advertise-address=192.168.197.127 - --allow-privileged=true - --authorization-mode=Node,RBAC - [Different Kubernetes Components](https://cloudyuga.guru/lesson/different-kubernetes-components/) - slides Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kube-Bench: CIS Benhmark](https://cloudyuga.guru/lesson/kube-bench-cis-benhmark/) - kube-bench is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the CIS Kubernetes Benchmark. Kube-bench is written as a Go application. It is distributed as a container, and can also be installed and run as a standalone binary. To help you quickly update and extend your test suite according to - [CIS Tool in Linux](https://cloudyuga.guru/lesson/cis-tool-in-linux/) - The CIS-CAT-LITE tool is a free open tool by CIS to help in doing security benchmarking of the system. Download the zip file from the following link: Google Drive Link This zip file is for Ubuntu 22.04 version and is quite large in size. Now as a prerequisite, install Java which is required by the tool. apt update - [Security Benchmark and CIS](https://cloudyuga.guru/lesson/security-benchmark-and-cis/) - Whenever a machine is configured to use and deploy production-scale applications, it has to go under security audits to ensure the system is secure to use. There are multiple ways to attack a machine and make it vulnerable. The following are the few best practices to make a secure system. Disable physical USB (if a - [Attacking Insecure Ports on the Cluster](https://cloudyuga.guru/lesson/attacking-insecure-ports-on-the-cluster/) - Before Kubernetes 1.10 there was an option to run the APIServer on insecure port. It is deprecated after that and it is removed in 1.24. So if don't have such old cluster, there is no need to worry. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Getting Access to Nodes](https://cloudyuga.guru/lesson/getting-access-to-nodes/) - Nsenter is a utility enters the namespaces of one or more other processes and then executes the specified program. Most Linux distros ship with an outdated version of util-linux. So, we have a alexeiled/nsenter Docker image with nsenter program on-board. This is a super small Docker image, of 900K size, created from scratch image and a single statically linked nsenter binary - [Attacking Web App with SQL Injection](https://cloudyuga.guru/lesson/attacking-web-app-with-sql-injection/) - This example is taken from the Falco's Git Repository . This allows us to ping from a container, if the user is authenticated. Deploy the application kubectl apply -f . Access the application via Ingress Click on the Sample App from Lab URLs on you right and the append ping.php to it, like https://c-a8d22d28-4a7e-4142-85b0-4923bd9e9de4-cloudyuga-28466807-j9yca.cloudyuga.guru/ping.php Enter the correct credentials and press OK Enter the wrong credentials and press OK Enter the wrong credentials with SQL injection and - [Mis-configured RBAC Policies](https://cloudyuga.guru/lesson/mis-configured-rbac-policies/) - kubectl create sa rbac-test Assign a role to the Service Account to manage ConfigMaps Only. But by mistake access to manage Secrets is also given kubectl apply -f role.yaml kubectl apply -f role-binding.yaml kubectl get roles,rolebindings Assign the Service Account to a Pod kubectl apply -f pod.yaml Exec into the Pod and Access the secrets using the - [DoS for Memory/CPU reosurces](https://cloudyuga.guru/lesson/dos-for-memory-cpu-reosurces/) - In Kubernetes, utilization of resources can be managed by setting limits on it but what ifthere is no specification of resources in the Kubernetes and can not apply limit ranges for the containers. As an attacker, one can consume all the resources where the pod/deployment is running and starve other resources and cause a DoS - [Checking out Environment Variables](https://cloudyuga.guru/lesson/checking-out-environment-variables/) - Deploy the applications kubectl apply -f dbs.yaml Exec into one of the Pod and check its environment variables kubectl exec printenv Create a new Pod and Exec into it kubectl run nginx --image=nginx:alpine kubectl exec nginx printenv Login into the Node on which Pod is running and inspect the container docker container inspect - [Private Registry without Security](https://cloudyuga.guru/lesson/private-registry-without-security/) - Access to un-secure Private Registry docker run -d -p 5000:5000 --restart always --name registry registry:2 Build an image and push it to the registry docker image build -t backend . docker image tag backend:latest localhost:5000/backend:latest Attack Access the registry over curl and list all repositories curl localhost:5000/v2/_catalog List the manifests of the given backend repository curl localhost:5000/v2/backend/manifests/latest We - [Shell on All Nodes](https://cloudyuga.guru/lesson/shell-on-all-nodes/) - Consider a scenario in which an intruder has access to all the cluster nodes via a shell and when it’s inside the shell, that intruder can do anything and can access any node and utilize it. Below is the daemonset.yaml file for the same which on running gives access to a shell on all the nodes. apiVersion: - [The Hack](https://cloudyuga.guru/lesson/the-hack/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this example we'll see how installing a HELM package, which looks very simple and straight forward can give away access of the host system it is running. On the hacker's system Assuming the hacker has a Linux instance running on the somewhere on the cloud and - [Different Attacking Scenarios](https://cloudyuga.guru/lesson/different-attacking-scenarios/) - In the following, let's see the different attacking scenarios in which one can expose important information to hackers and put the system at risk in terms of cloud, cluster, container, and code. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Threat Matrix](https://cloudyuga.guru/lesson/kubernetes-threat-matrix/) - Kubernetes Threats Take Quiz Complete Lesson Next Lesson Reset Lesson - [4C's of Cloud-Native Security](https://cloudyuga.guru/lesson/4cs-of-cloud-native-security-2/) - There are 4 C's of cloud-native security which are: Cloud Cluster Container Code Each layer depends on the outermost layer, and security at each level is important. Cloud The first layer, cloud or co-located data centers, is the most trusted base for clusters. If the cloud becomes vulnerable, then workloads/components running on this base are - [Kubernetes Krew Plugins](https://cloudyuga.guru/lesson/kubernetes-krew-plugins/) - A plugin is a standalone executable file, whose name begins with kubectl-. To install a plugin, move its executable file to anywhere on your PATH. One can install kubectl plugins available in the open-source using Krew which is a plugin manager. Today, about 160 kubectl plugins are available on Krew Krew is a tool that makes it easy to use kubectl - [Useful Kubernetes Commands](https://cloudyuga.guru/lesson/useful-kubernetes-commands/) - Kubectl Alias alias k=kubectl Cluster Info Get clusters kubectl config get-clusters Get cluster info kubectl cluster-info To view kube config kubectl config view Contexts Get a list of contexts kubectl config get-contexts Get Command kubectl get Describe Command kubectl describe Delete Command kubectl delete Logs kubectl logs -l - [Useful Docker Commands](https://cloudyuga.guru/lesson/useful-docker-commands/) - Docker commands docker version Pulling a Container Image docker pull : Running a Container in background docker run -it -d : Listing running and stopped container docker container ls -a Spawning a new process inside container docker exec -it / Exposing a container on host port docker run -it -p : - [Setup Introduction](https://cloudyuga.guru/lesson/setup-introduction/) - Cluster Details Check the cluster nodes kubectl get nodes -o wide Check kubectl version kubectl version Docker installation Verify whether Docker is installed or not docker --version Helm Installation curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh helm version Take Quiz Complete Lesson Next Lesson Reset Lesson - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction-7/) - Kubernetes is an open-source container orchestration platform for deploying, scaling and managing containerized applications. It provides a lot of flexibility and security benefits compared to traditional monolith software platforms. However it also introduces additional security complexities as it becomes a universal control plane to deploy/manage application & infrastructure together. This course is designed to help - [Deploy Java Application with Docker](https://cloudyuga.guru/lesson/deploy-java-application-with-docker/) - Clone the RSVP Java application GitHub repository with a specific branch in /root directory. git clone https://github.com/cloudyuga/rsvpapp-springboot.git && cd rsvpapp-springboot Install Java 8 and Maven. apt update && apt install openjdk-8-jdk -y && apt install maven -y Set the following application environment variables. export LINK=http://www.meetup.com/cloudyuga/ export TEXT1=CloudYuga export TEXT2=Garage RSVP export LOGO=https://github.com/cloudyuga/rsvpapp/blob/master/static/cloudyuga.png export COMPANY=CloudYugaTechnologyPvt.Ltd. Run a MongoDB docker container - [ClusterIP Service Type](https://cloudyuga.guru/lesson/clusterip-service-type-4/) - Create a clusterIP service Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the application apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset - [Collecting Telemetry Data Together](https://cloudyuga.guru/lesson/collecting-telemetry-data-together/) - As in the previous chapters, we have individually explored Traces, Logs, and Metrics data with OpenTelemetry.Now let's put them all together and understand how these data correlate and help in observability. Head over to the /root directory, where all the application-required files are present. cd /root/rsvpapp-springboot Now, it has collector-config.yaml which has all the information about the receivers, exporters - [Collecting Metrics of Java Application with OTEL Collector](https://cloudyuga.guru/lesson/collecting-metrics-of-java-application-with-otel-collector/) - In this, we will deploy the otel-collector, which will collect metrics data from the application and send it to the Prometheus exporter, and we will visualize through Grafana for better analysis. Prometheus is an open-source monitoring and alerting tool for collecting metrics. Learn more about Prometheus with one of our hands-on labs here. Head over to the /root directory, where all the application-required - [Collecting Logs of Java Application with OTEL Collector](https://cloudyuga.guru/lesson/collecting-logs-of-java-application-with-otel-collector/) - In this, we will deploy the otel-collector, which will collect log data from the application and send it to the Loki exporter, and we will visualize through Grafana for better analysis. Loki is a highly-available, cost-effective,multi-tenant log aggregation system by Grafana. Learn more about Loki from Grafana Labs. Head over to the /root directory, where all the application-required files are present. cd /root/rsvpapp-springboot - [Collecting Traces of Java Application with OTEL Collector](https://cloudyuga.guru/lesson/collecting-traces-of-java-application-with-otel-collector/) - In this, we will deploy the otel-collector, which will collect traces from the application and send them to the Tempo exporter, and we will visualize through Grafana for better analysis. Tempo is an open-source, highly-scale distributed tracing backend by Grafana and it is compatible with Jaeger, Zipkin, and OpenTelemetry.Learn more about Tempo from Grafana Labs. Head over to the /root directory, where all - [Terraform with Kubernetes Provider](https://cloudyuga.guru/lesson/terraform-with-kubernetes-provider/) - In this lab, we will be going to see how to deploy Kubernetes resources on a cluster with the help of Terraform. Prerequisites For this lab, you will need the following: A Kubernetes cluster Terraform CLI Terraform Installation Install the terraform module, which will be utilized to manage a Kubernetes cluster. wget -O- https://apt.releases.hashicorp.com/gpg | - [Software Defined Storage](https://cloudyuga.guru/lesson/software-defined-storage/) - By making storage resources programmable, software-defined storage (SDS) enables users and organizations to detach or abstract storage resources from the underlying hardware platform, allowing for greater flexibility, efficiency, and scalability. Let's understand by re-deploying the database of the rsvp application (deployed previously) with a volume provisioned with it. Deploy the mongo db of rsvp application with persistent volume claim from storage - [Networking with Kubernetes](https://cloudyuga.guru/lesson/networking-with-kubernetes/) - Let's understand by deploying an application on the Kubernetes cluster with a deployment controller and scaling the deployment in a Kubernetes cluster to understand how different IP addresses get assigned to the deployment pods. Check the nodes details of the cluster kubectl get nodes -o wide Apply the following YAML manifests to deploy frontend and backend applications # frontend.yaml - [Service Accounts](https://cloudyuga.guru/lesson/service-accounts-3/) - From the Kubernetes Documentation :- User accounts are for humans. Service accounts are for processes, which run in pods. User accounts are intended to be global. Names must be unique across all namespaces of a cluster. Service accounts are namespaced. Typically, a cluster's user accounts might be synced from a corporate database, where new user - [Auto Instrumentation of Java Application](https://cloudyuga.guru/lesson/auto-instrumentation-of-java-application-2/) - Install docker-compose apt install docker-compose -y docker version docker-compose version Clone the RSVP Java application GitHub repository with a specific branch. git clone https://github.com/cloudyuga/rsvpapp-springboot.git -b auto-instrument-otel && cd rsvpapp-springboot Now, it has collector-config.yaml which has all the information about the receivers, exporters and service pipelines for logs,traces and metrics. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Knative in Kubernetes](https://cloudyuga.guru/lesson/knative-in-kubernetes/) - Knative is an open-source and CNCF incubation project that helps run serverless and event-driven applications on Kubernetes. It is a platform-agnostic solution for running serverless deployments. Features of Knative Autoscaling: Scale down to zero or up from zero according to need. Progressive Rollouts: Choose a rollout strategy according to the need. Simple Abstractions: Simplify YAML with custom - [Autoscaling with KEDA](https://cloudyuga.guru/lesson/autoscaling-with-keda/) - KEDA, a Kubernetes Event-Driven Autoscaler is a lightweight component that can be added to your Kubernetes cluster to scale applications based on the number of events it process. It makes autoscaling simple and optimizes the cost by providing a feature of scaling resources to zero. KEDA works along with the Horizontal Pod Autoscaler (HPA) in a Kubernetes cluster by - [Horizontal Pod Autoscaler](https://cloudyuga.guru/lesson/horizontal-pod-autoscaler/) - Deploy the application's front end by creating a deployment and exposing it through a service. Take Quiz Complete Lesson Next Lesson Reset Lesson # frontend.yaml apiVersion: apps/v1 kind: Deployment metadata: name: rsvp spec: replicas: 1 selector: matchLabels: app: rsvp template: metadata: labels: app: rsvp spec: containers: - name: rsvp-app image: teamcloudyuga/rsvpapp:latest resources: limits: cpu: "50m" - [StatefulSets](https://cloudyuga.guru/lesson/statefulsets-3/) - Create a mongodb statefulset Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Service metadata: name: mongo spec: ports: - port: 27017 name: peer clusterIP: None selector: app: mongo --- apiVersion: v1 kind: ConfigMap metadata: name: mongo-init data: init.sh: | #!/bin/bash # Need to wait for the readiness health check to pass so - [Dynamic Volume Provisioning](https://cloudyuga.guru/lesson/dynamic-volume-provisioning-3/) - List the StorageClasses kubectl get storageclass kubectl describe sc local-path Deploy the Backend and Frontend Applications apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-claim spec: accessModes: - ReadWriteOnce storageClassName: local-path resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: rsvp-db spec: replicas: 1 selector: matchLabels: appdb: rsvpdb template: metadata: labels: appdb: rsvpdb spec: volumes: - [Static Volume Management](https://cloudyuga.guru/lesson/static-volume-management-3/) - Creating a Persistent Volume Make a configuration file for Persistent volume (PV) as shown below. This will create a PV of 1 GB kind: PersistentVolume apiVersion: v1 metadata: name: pv0001 labels: type: local spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/tmp/data01" Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy a PV with - [Ingress – Deploy Applications](https://cloudyuga.guru/lesson/ingress-deploy-applications-3/) - Create and deploy the Blue application from the configuration file Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: blue spec: replicas: 1 selector: matchLabels: app: blue template: metadata: labels: app: blue spec: containers: - name: blue image: teamcloudyuga/blue ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: - [LoadBalancer Service Type](https://cloudyuga.guru/lesson/loadbalancer-service-type-5/) - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_lb.yaml Create a LoadBalancer Service by using the following YAML file - [NodePort Service Type](https://cloudyuga.guru/lesson/nodeport-service-type-5/) - Create a deployment Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 kubectl apply -f deploy_np.yaml Create a Nodeport Service using the following - [ClusterIP Service Type](https://cloudyuga.guru/lesson/clusterip-service-type-5/) - Deploy the application apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_CI.yaml Create a clusterIP service for the above-created - [DaemonSet](https://cloudyuga.guru/lesson/daemonset/) - Get the list of Nodes available in your cluster kubectl get nodes Create a DaemonSet using a configuration file Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-ds spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 ports: - containerPort: 80 - [Cron Jobs](https://cloudyuga.guru/lesson/cron-jobs-4/) - The CronJob is a type of time-based job. CronJobs manages jobs by running them at a specific time or running them periodically. In spec.schedule you have to mention the time condition for the job at which the job gets scheduled and completed. Create a cron job configuration from the following file apiVersion: batch/v1 kind: CronJob metadata: name: - [Parallel Jobs](https://cloudyuga.guru/lesson/parallel-jobs-4/) - Create a job with Parallelism and Completion Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: batch/v1 kind: Job metadata: name: nginx-parallel spec: completions: 10 parallelism: 2 template: metadata: name: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: OnFailure Deploy the job kubectl apply -f paralleljob.yaml Check - [Batch Operations with Job](https://cloudyuga.guru/lesson/batch-operations-with-job-4/) - Create a job to run echo “Hello World” Create a simple Job from the following configuration file apiVersion: batch/v1 kind: Job metadata: name: nginx spec: template: metadata: name: nginx labels: app: job spec: containers: - name: nginx image: teamcloudyuga/nginx:1.9.1 command: ["/bin/sh"] args: ["-c", "echo Hello World"] restartPolicy: Never Take Quiz Complete Lesson Next Lesson Reset - [Health Checks – Readiness Probes](https://cloudyuga.guru/lesson/health-checks-readiness-probes-4/) - Readiness probes are used when application takes time to startup, or sometimes they are waiting for external services to come up or load some data. During this time, we don't want to kill the application, neither want to send the traffic to the application. They are very similar to liveness probes when comes to syntax: - [Health Checks – Liveness Probes](https://cloudyuga.guru/lesson/health-checks-liveness-probes-4/) - apiVersion: v1 kind: Pod metadata: name: nginx-liveness labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:1.15-alpine ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 15 periodSeconds: 5 timeoutSeconds: 1 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f liveness-http-pod.yaml kubectl get pods Liveness check with TCP Probe apiVersion: v1 - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/lesson/labels-and-annotations-for-deployment-object-5/) - Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment.yaml At-least one of the selector defined in the ReplicaSet section should match one of - [Annotations](https://cloudyuga.guru/lesson/annotations-5/) - apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx annotations: build: demo builder: cloudyuga spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the Pod, describe it and check for annotations kubectl apply -f annotate-pod.yaml kubectl describe pod nginx Delete the Pod kubectl delete -f annotate-pod.yaml - [Labels and Selectors](https://cloudyuga.guru/lesson/labels-and-selectors-5/) - Deploy the Pods apiVersion: v1 kind: Pod metadata: name: mypod labels: spec: containers: - name: myc image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: prod-pod labels: tier: frontend release: prod spec: containers: - name: prod-c image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: beta-pod labels: - [Deployment Strategy - Recreate](https://cloudyuga.guru/lesson/deployment-strategy-recreate-2/) - Create a Deployment with Recreate as deployment strategy apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment-recreate.yaml kubectl get deploy,rs,pods Updating - [Deployment](https://cloudyuga.guru/lesson/deployment-5/) - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Create the Deployment kubectl apply -f deployment.yaml List the Deployments kubectl get deployment List the ReplicaSets kubectl - [Replicasets](https://cloudyuga.guru/lesson/replicasets/) - apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-app image: teamcloudyuga/nginx:alpine Take Quiz Complete Lesson Next Lesson Reset Lesson Create the ReplicaSet kubectl apply -f replicaset.yaml List the ReplicaSets kubectl get replicaset List the Pods kubectl get pod Delete one - [Multi-Container Pods](https://cloudyuga.guru/lesson/multi-container-pods-5/) - Create and list the multi-container Pod apiVersion: v1 kind: Pod metadata: name: multicontainer spec: containers: - name: con1 image: teamcloudyuga/nginx:alpine - name: con2 image: redis - name: con3 image: memcached Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f multi-c-pod.yaml List the Pod kubectl get pods Interact with pod containers, as there are - [Pods in Kubernetes](https://cloudyuga.guru/lesson/pods-in-kubernetes/) - Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Create the Pod kubectl create -f pod.yaml List the Pods kubectl get pods kubectl get pods -o wide Describe the Pods kubectl describe pod mypod Get - [Linux Firewall](https://cloudyuga.guru/lesson/linux-firewall/) - A firewall is a security system for networks that manages the flow of incoming and outgoing network traffic based on established security policies. Its purpose is to prevent unauthorized access and maintain control over network traffic. The Netfilter subsystem, integrated into the Linux kernel, is responsible for managing network traffic entering or passing through a server. This system serves as the foundation for modern Linux - [Umask](https://cloudyuga.guru/lesson/umask/) - Upon creating a file/directory, the Linux system provides a set of permissions that enables the users to read, write, or execute a file/directory. Umask or the User file-creation mode mask is a 4-digit octal number used to define default permissions a file/directory will have on creation. The default umask value details the permissions removed from certain users. Umask command - [Overview of Apparmor](https://cloudyuga.guru/lesson/overview-of-apparmor/) - AppArmor is a Linux kernel security module and a Mandatory Access Control (MAC) system for applications. It confines programs to a limited set of resources. It restricts programs to a specific set of files and capabilities so that it doesn't go deep into the system and create havoc situations. It enables system administrators to specify the permissions for individual applications and - [Introduction to System Security](https://cloudyuga.guru/lesson/introduction-to-system-security/) - System security refers to the practice of introducing controls and safeguards to ensure that the system resources and networks remain safe from interference, downtime, or malicious attacks. Linux Security Linux is a widely-used, open-source operating system that is known for its stability, security, and flexibility. Security in Linux refers to the measures and techniques used to protect the system and its resources (such as - [Capturing Network Traffic Through Tcpdump](https://cloudyuga.guru/lesson/capturing-network-traffic-through-tcpdump/) - tcpdump command is a powerful tool that allows us to capture and help analyze the network traffic in the system. It is mostly used in troubleshooting networking issues. To install tcpdump in your system, run the following command: apt install -y tcpdump To begin with, the command, let’s list the available interfaces by running following command: tcpdump --list-interfaces You - [Configuring a Web Server with Apache](https://cloudyuga.guru/lesson/configuring-a-web-server-with-apache/) - Apache Web server is one of the most commonly used web servers on Linux systems. Web servers serve web pages(HTML content), and users access them through web browsers such as chrome, firefox, etc. It also runs as a service in Linux and is managed via systemctl. Install the apache web server through the following command sudo apt - [Using Secure Shell (SSH) for remote login and remote execution](https://cloudyuga.guru/lesson/using-secure-shell-ssh-for-remote-login-and-remote-execution/) - SSH protocol, also known as Secure Shell, is a way to secure remote login from one system to another. It secures communication and maintains its integrity with strong encryption. Use of SSH Ensure secure access for users Make data transfer securely To manage network infrastructure remotely. Working of SSH protocol This protocol is based on a client-server - [DNS and resolv.conf Configuration](https://cloudyuga.guru/lesson/dns-and-resolv-conf-configuration/) - As mentioned in the DNS topic under IP Address chapter, DNS stands for Domain Name System and it is a naming convention that helps identify systems over the internet via domain names. It is used to map domain names to IP addresses and follows TCP/IP Protocol. How does DNS Route Traffic Resolving the IP Address of the - [Virtual Private Network](https://cloudyuga.guru/lesson/virtual-private-network/) - A Virtual Private Network (VPN) is a technology that creates a safe and encrypted connection to promote privacy and anonymity by creating a private network over a public internet connection. It will help mask your internet protocol (IP) address and encrypt all the traffic leaving personal computers/laptops so that data is inaccessible by anyone between sender and - [Routing in Linux](https://cloudyuga.guru/lesson/routing-in-linux/) - As discussed in the earlier chapter, a Router is a device responsible for forwarding network traffic. When the datagrams arrive at a router and determine the destination IP address, it finds the best route to reach the destination. It uses a routing table to identify the IP address of the next router to reach the destination. Routing is - [Type of Area Networks: LAN and WAN](https://cloudyuga.guru/lesson/type-of-area-networks-lan-and-wan/) - The computer networks can be categorized into following two commonly used types based on their size or scope. Local Area Network (LAN) This type of network covers group of computers and peripheral devices which are connected in a limited area such as school, office or home building etc. This network type is widely used for sharing resources like - [Computer Network Architecture](https://cloudyuga.guru/lesson/computer-network-architecture/) - It simply refers to the design of a computer network. It describes how tasks are allocated between all of the computers in the network and the way in which all network devices and services are organized and managed to connect other devices. Type of Network Architecture Peer-to-Peer Network In this type of network, all the computers are - [HTTP and HTTPS](https://cloudyuga.guru/lesson/http-and-https/) - HTTP HTTP stands for Hyper Text Transfer Protocol. It is an application layer protocol that has a set of rules and standards for communication between client web browsers and servers. It is a stateless protocol which means that each transaction is executed as a separate one without knowledge of previous ones. Once the transaction is done, - [Overview of Networking Protocols](https://cloudyuga.guru/lesson/overview-of-networking-protocols/) - In networking, a protocol is a set of rules for forwarding and processing data. These are like languages for computers. As computers use different hardware and software, so, the use of protocols enables them to communicate with each other. Some of the commonly used protocols are HTTP HTTPS TCP UDP FTP SMTP BGP DHCP and so - [Configuring Network Interfaces with ip Command](https://cloudyuga.guru/lesson/configuring-network-interfaces-with-ip-command/) - Let us now explore how we can use the ip command to configure the network interfaces. But before let us how we use the ping command to check the connectivity to other hosts. Ping command The PING (Packet INternet Groper) command checks the network connectivity between the hosts. It takes an IP address or domain name as an input, sends a data packet to - [IP Address and Subnetting](https://cloudyuga.guru/lesson/ip-address-and-subnetting/) - An IP (Internet Protocol) address is a unique address assigned to each device on a computer network for communication. And the Internet Protocol is a set of rules which makes the Internet work. The IP address is divided into two parts: Prefix: It identifies the physical network to which the system is attached, known as a network address. Suffix: - [Configure Hostname in Linux](https://cloudyuga.guru/lesson/configure-hostname-in-linux/) - As seen in the important concepts of networking, the hostname command will help to know the system's hostname, a unique identification name in the network. Run again following command to know your hostname: hostname The file which maintains this value is /etc/hostname. Now, we can use the hostnamectl command to set our hostname without even opening and editing in the /etc/hostname file - [Important Concepts of Networking](https://cloudyuga.guru/lesson/important-concepts-of-networking/) - There are certain terminologies in a computer network that one needs to understand. Hostname Every machine in the network has a unique name for identification. This is known as hostname. One can find out the hostname of the machine through the hostname command. Run the following command to know your system hostname hostname IP Address IP stands - [OSI Model](https://cloudyuga.guru/lesson/osi-model/) - OSI stands for Open System Interconnection, a reference model that mentions how information from a software application in one system can be transferred to another via a physical medium. This model has seven layers where each layer has a certain function to achieve, and tasks by this layer can be done independently. The top three layers (upper layers) are in the software - [Cgroups and Namespaces](https://cloudyuga.guru/lesson/cgroups-and-namespaces/) - In Operating Systems like Linux and Windows, we have features like Cgroupsand Namespaces; which helps in enabling process isolation which is building blocks of Containerization. Cgroups A control group (cgroup) is a Linux kernel feature that limits, accounts for, and isolates the resource usage (CPU, memory, disk I/O, network, and so on) of a collection of processes. In - [Process Priority and Nice Value](https://cloudyuga.guru/lesson/process-priority-and-nice-value/) - In a typical computer machine, if a CPU has n cores then it can only execute n processes in parallel. However, if the number of processes becomes more than n, then the processes are switched between very quickly to provide multitasking behavior. Due to this feature, we can able to run multiple processes on a CPU even if it has only one - [top and htop commands](https://cloudyuga.guru/lesson/top-and-htop-commands/) - top command The top command provides a dynamic real-time view of the running processes. It can display system summary information as well as a list of processes or threads currently being managed by the Linux kernel. When you run the top command, it will open an interactive command mode where the first half will contain the details - [Process Monitoring](https://cloudyuga.guru/lesson/process-monitoring/) - Often while working with Linux systems, we need to see the behavior of processes. Linux provide many different ways to monitor the processes. In the following lessons, we will learn about following two common ways to monitor processes in Linux system: top command htop command We will also see how to change the priority so that one process - [Process vs Threads](https://cloudyuga.guru/lesson/process-vs-threads/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Terminating a process manually](https://cloudyuga.guru/lesson/terminating-a-process-manually/) - In the Linux Operating System, a kill command is used to terminate a running process. It is available builtin in the shell and present in most shells like Bash, Zsh etc. However, the behavior of the kill command might different between the shells and the standalone /bin/kill executable available in the system. Run following command to see all the - [Creating a new process](https://cloudyuga.guru/lesson/creating-a-new-process/) - In this chapter we will see how to create a new process. There might be many ways to create process, however, following are two common ways to see process being created. New process in Bash The quickest way to see new process being created is through the bash shell. Try to run following command in - [Types of Processes](https://cloudyuga.guru/lesson/types-of-processes/) - Following are different type of processes in the Linux system: The init process The init process is one of the first processes that get started when Linux boots. It is a daemon process that continues running until Linux is shut down. It can't be killed. Most processes have init as a parent or grandparent. Init usually has the process id 1 and the parent process id - [Exploring /proc](https://cloudyuga.guru/lesson/exploring-proc/) - The /proc file system is an in-memory filesystem which is present in the memory and gets created every time during the system boot and doesn’t contain any persistent content. This gets dissolved at the time of system shutdown. It is sometimes referred to as a process information pseudo-file system as it doesn't contain 'real' files but runtime - [Process states](https://cloudyuga.guru/lesson/process-states/) - Following are different states a process can go in its lifetime: New State: It is the first state in the process life cycle. In this state, the process is about to be created. The program which is present in secondary memory that will be picked up by the OS to create the process. Ready State: When the - [Process Control Block](https://cloudyuga.guru/lesson/process-control-block/) - A process control block (PCB) is a data structure used by computer operating systems to store all the information about a process. It is also known as a process descriptor. When a process is created (initialized or installed), the operating system creates a corresponding process control block. The PCB stores data needed for correct and efficient process management. This information is used by - [Listing processes](https://cloudyuga.guru/lesson/listing-processes/) - We can use the ps command to see the list of running processes in the system. The ps command displays a snapshot of the current processes. The syntax is as follows: Copy Codeps [options] It generally accepts two kinds of options: UNIX options, which may be grouped and must be preceded by a dash. BSD options, which may be - [File Permissions](https://cloudyuga.guru/lesson/file-permissions/) - There are following three categories of permissions: Read: For regular files, allow users to open and read the file only. For directories, allow the listing of directory content. Write: User can modify (edit, delete) the file and save it. For folders, enable a user to modify its contents like create, delete, and rename the files inside it. - [File Ownership](https://cloudyuga.guru/lesson/file-ownership/) - We can use the chown command to change the ownership of the file/directory. Syntax of chown command is: chown / Run the following command to change the ownership of hello.txt file to linux user we created above: chown linux hello.txt Now, run following command to verify: ls -l hello.txt You should see the user is updated to linux as in the below output: To change - [File Ownership and Permissions](https://cloudyuga.guru/lesson/file-ownership-and-permissions/) - Linux is a multi-user operating system and can be accessed by multiple users simultaneously. This might raise security concerns as an unauthorized user can corrupt, change or remove important data. To effectively manage security, Linux offers authorization into following two levels: Ownership Permissions Run the following command to create hello.txt file and see its permission touch hello.txt && ls - [sudo and su](https://cloudyuga.guru/lesson/sudo-and-su/) - The sudo program allows users to run a command on the system as a different user (By default as the super user). It is always recommended to use your user account than using root or super user. The main reason behind this is that humans are prone to do mistakes and one can delete the entire system by mistake if - [Group Management](https://cloudyuga.guru/lesson/group-management/) - Linux provides a mechanism to group user accounts so that it becomes easy to manage multiple users having similar permissions. This allows system administrators to apply permissions on a number of users and manage effectively. You can find the group of any user in Linux through following command: groups ubuntu Type of Group in Linux Linux provide following two types of groups: - [User Management](https://cloudyuga.guru/lesson/user-management/) - Linux user management is an important concept as it helps manage user accounts or group accounts. It deals with user account creation, adding users to a group, setting the right access permissions, and deleting the account. Its configuration files are present in /etc/directory. There are four configuration files are present for user and user group management. /etc/passwd /etc/shadow /etc/group - [Linux User and Group](https://cloudyuga.guru/lesson/linux-user-and-group/) - A user in Linux is an entity with privileges to access the system resources and can manipulate files and perform several other operations. Each user has a unique ID assigned to it, known as a User ID (UID) during its creation. We can group users with similar privileges, which we refer as group in Linux. For each group we have Group ID (GID). A user can be - [Filesystem Commands](https://cloudyuga.guru/lesson/filesystem-commands/) - lsblk command lsblk is a command that displays information about block devices and lists existing partitions. To display a list of block devices lsblk root@master:~/.../basic-filesystem-commands# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 32G 0 disk ├─vda1 254:1 0 31.9G 0 part / ├─vda14 254:14 0 4M 0 part └─vda15 254:15 0 106M - [Mounting and Unmounting Filesystems](https://cloudyuga.guru/lesson/mounting-and-unmounting-filesystems/) - As different file systems can be used. For this, a disk partition must be formatted and mounted before use. Disk formatting can be done for several reasons, such as deleting data, fixing errors, or changing the file system. Mounting a filesystem means making a particular filesystem ready and accessible for use at a certain point - [Disk partitioning and mounting a file system from a loopback device](https://cloudyuga.guru/lesson/disk-partitioning-and-mounting-a-file-system-from-a-loopback-device/) - Linux supports a special block device called a loop device. It maps a normal file to a virtual block device. With Linux, it is possible to create a file system inside a single file as a virtual file system. These storage devices are available as device files such as /dev/device_name. To see information about the partition - [Disk Partitioning and Filesystem Creation](https://cloudyuga.guru/lesson/disk-partitioning-and-filesystem-creation/) - The process of dividing a disk (physical drive) into one or more logical areas, known as partitions allows users to work separately. It is an important part of disk formatting. Whenever a partition is created, information like the date of creation, location, and size of the partition is stored in a partition table. The main benefit - [Types of File Systems](https://cloudyuga.guru/lesson/types-of-file-systems/) - There are many file systems in Linux, such as Ext, Ext2, Ext3, Ext4, XFS, Btrfs, Swap, Reiserfs, JFS, etc. But how Linux decides which one to use when and for this, it uses VFS (Virtual File System). Virtual File System The Virtual File System (VFS) is a layer that acts as an interface between the user - [Why do we need Linux File system?](https://cloudyuga.guru/lesson/why-do-we-need-linux-file-system/) - Every computer system needs to store data in an organized manner so that it can be accessed easily at the point of requirement. It generally stores data on Hard Disk Drive (HDD) or Solid-State Drive (SSD). And there are a couple of reasons why we need a filesystem: As RAM (Random Access Memory) is a volatile - [Introduction to File System](https://cloudyuga.guru/lesson/introduction-to-file-system/) - In general, the file system is a structured collection of files on a disk drive/partition. It is an architecture defining how files are organized logically. A partition is a segment of disk that contains specific data, and a filesystem resides inside it. What is a Linux File system? It is a built-in layer of the Linux - [Managing Packages in Ubuntu](https://cloudyuga.guru/lesson/managing-packages-in-ubuntu/) - dpkg package manager As dpkg is a low-level package manager tool for Debian-based systems. This installs a package from the compiled *.deb file . The problem with this method is that there is no dependency resolution, as one has to install the package from a compiled file. So to solve this apt is introduced for Debian-based systems which is a high-level package manager. - [What is Package Management?](https://cloudyuga.guru/lesson/what-is-package-management/) - A package is usually referred to as an application, but it could be a GUI application, command line tool, or a software library (required by other software programs). A package is essentially an archive file containing the binary executable, configuration file, and sometimes information about the dependencies. Package management is the method of installing and maintaining software on the system. - [Service Logs using journalctl](https://cloudyuga.guru/lesson/service-logs-using-journalctl/) - Systemd runs the systemd-journald.service, which stores logs in the journal from the different services maintained by systemd. We use journalctl command to read these log entries from the journal. To get all the logs journalctl It will show the logs in the paginated view. To get the last few logs entries journalctl -n 10 To find the logs - [Custom Services with systemctl](https://cloudyuga.guru/lesson/custom-services-with-systemctl/) - One can also create a custom service with the help of systemd and its unit file. First, create a script file that will run the tasks when the service will be started. Take Quiz Complete Lesson Next Lesson Reset Lesson # test_service.sh DATE=`date '+%Y-%m-%d %H:%M:%S'` echo "Example service started at ${DATE}" | systemd-cat -p info while : - [Managing Services with systemctl](https://cloudyuga.guru/lesson/managing-services-with-systemctl/) - Take an example of starting a apache2. service in the system with the help of systemctl. This service enables us to run a web server on the system. For that first find out whether apache2 service is present or not in the system systemctl status apache2 If it is not present then install it with apt package managera[t apt update; apt install - [Services in Linux](https://cloudyuga.guru/lesson/services-in-linux/) - Service is generally a process or application which is running in your system. The first process that starts in the system is the init process at the /sbin/init location. In modern Linux systems, systemd has replaced the SysVinit systems. Systemd is a system and service manager for Linux operating systems. It acts as a init system that brings up and maintains userspace - [Linux System Startup](https://cloudyuga.guru/lesson/linux-system-startup/) - Take Quiz Complete Lesson Next Lesson Reset Lesson 4 Stages of the Linux Boot Process Phase I: BIOS/UEFI Initialization Phase II: The Bootloader Phase III: Loading the Kernel Phase IV: Run Levels/Targets Phase I: BIOS/ UEFI Initialization The first phase of the booting process involves initializing BIOS or UEFI. Both tasks are to look for, load, and execute - [300 Linux Command References](https://cloudyuga.guru/lesson/300-linux-command-references/) - T.Dhanasekar and team from INDIAN LINUX USER'S GROUP - CHENNAI (MADRAS) has compiled a PDF of 300 commands, which is very useful. You can download it here. Title: linux_300commands.pdf Open in a new tab Take Quiz Complete Lesson Next Lesson Reset Lesson - [Other Useful commands](https://cloudyuga.guru/lesson/other-useful-commands/) - history To know the commands you executed in the system history NOTE : you can ctrl+r for reverse searching a particular command which Prints the location of the executable file for the application on the screen which python3 whereis Locates the binary, source, and manual page of a command. whereis bash wget To download from - [Automating Tasks using Cron](https://cloudyuga.guru/lesson/automating-tasks-using-cron/) - cron in Linux/Unix systems is a system utility that allows users to automatically execute repeated tasks at fixed intervals. A daemon called crond runs in the background to enable this functionality. The cron process looks up a file called crontab for predefined scripts to execute them. cron jobs can be scheduled to run from hourly to monthly or even yearly. To install the cron package, execute: apt install cron - [Text Manipulation Commands](https://cloudyuga.guru/lesson/text-manipulation-commands/) - grep grep is a Linux text-manipulating utility that searches for a string of characters or patterns known as regular expressions in a file or text. The grep tool belongs to the family of utilities that include egrep, fgrep, and grep, among which fgrep is the fastest of all, while grep is the easiest. grep "Mem" /proc/meminfo grep -i "Mem" /proc/meminfo where -i is used - [Commands to monitor Processes and Memory](https://cloudyuga.guru/lesson/commands-to-monitor-processes-and-memory/) - The memory utilization of the system can be found through certain commands in a Linux system. The top (table of processes) command shows a real-time view of running processes in Linux and displays kernel-managed tasks. The command also provides a system information summary that shows resource utilization, including CPU and memory usage. top htop command in Linux system is a command line utility - [Commands to manage Environment Variables](https://cloudyuga.guru/lesson/commands-to-manage-environment-variables/) - Environment variables are available system-wide and are inherited by all spawned child processes and shells. Shell variables are variables that apply only to the current shell instance. Each shell, such as zsh and bash, has its own set of internal shell variables. There are several commands available that allow you to list and set environment variables in Linux: env – The command allows you to - [Other Files Related Linux Commands](https://cloudyuga.guru/lesson/other-files-related-linux-commands/) - Encrypt and decrypt file command To encrypt or decrypt a file with an encryption tool, gpg is used.GPG stands for GNU Privacy Guard, which allows secure files. To encrypt a file gpg -c greetings.py where -c tells to encrypt with a symmetric cipher using a passphrase. To decrypt gpg greetings.py.gpg Compare two files To compare between files, the diff command is used. - [Compression and Archive](https://cloudyuga.guru/lesson/compression-and-archive/) - It is useful to store a group of files in one file for easy backup, transfer to another directory, or transfer to another computer. It is also useful to compress large files; compressed files take up less disk space and download faster via the Internet. With tar and gzip Tar, also known as a tarball, is - [Hard and Soft links](https://cloudyuga.guru/lesson/hard-and-soft-links/) - A link is like a pointer to a file or directory. Creating links is like a shortcut to accessing files. There are two types of links: Soft or Symbolic links Hard links Soft Links The soft link, also known as a symbolic link, acts as a pointer to the file. It doesn't access the contents of the - [Files and Directories related commands](https://cloudyuga.guru/lesson/files-and-directories-related-commands/) - In general, commands are the instructions given to the machine to tell what to do. The commands are case-sensitive. Whenever a user types a command, it passes to the shell, which reads and executes it. Shell is a method for the user to interact with the system. The default shell in Linux is called bash (Bourne-Again - [Tmux commands](https://cloudyuga.guru/lesson/tmux-commands/) - Installation Tmux on ubuntu can be installed with the following command sudo apt update && sudo apt install tmux -y Tmux Session Create a session To start/create a session in tmux use tmux It will give a new session, a new window, and a shell in that window. On the right side is information about - [Tmux](https://cloudyuga.guru/lesson/tmux/) - Tmux is a terminal multiplexer which is a Linux application that allows multitasking in a terminal window and it is based around sessions. Basically, a terminal multiplexer lets you leave a terminal in the middle of a process and return to it seamlessly. For example, if you are running a python server and MySQL console and in the middle of the workflow, you have - [Vim Commands](https://cloudyuga.guru/lesson/vim-commands/) - Take Quiz Complete Lesson Next Lesson Reset Lesson There are Vim commands which the user needs to learn while working with the Vim editor in its different modes. Basic Vim commands : -To get into command mode Esc -To get into normal mode i - To get into insert mode v or V - To get into visual mode - [Vim Editor](https://cloudyuga.guru/lesson/vim-editor/) - Vim (Vi IMproved) is a famous and powerful Unix-based text editor used by many developers and sysadmins created by Bram Moolenaar. It is a free and open-source text editor. It is a cross-platform and command-centric editor available on the most popular platforms like Windows, Linux, Mac, and other UNIX variants. It is a clone of the Vi editor. Features of Vim Its memory footprint is - [Linux FileSystem Hierarchy](https://cloudyuga.guru/lesson/linux-filesystem-hierarchy/) - In Linux and many other operating systems, directories can be structured in a tree-like hierarchy. The Linux directory structure is well-defined and documented in the Linux Filesystem Hierarchy Standard (FHS). The following list provides a very brief understanding of the standard, well-known, and defined top-level Linux directories and their purposes. / (root filesystem): The root filesystem is the - [Tracing Userspace Processes](https://cloudyuga.guru/lesson/tracing-userspace-processes/) - What is Strace? Strace is a useful debugging and troubleshooting tool used to diagnose the communication between a program's user and kernel space. It includes system calls and signal deliveries, and its return values are printed on standard error or could be redirected to a file using -o flag on the terminal. Strace internally uses ptrace for tracing the system calls. The ptrace() system call - [Systemcall](https://cloudyuga.guru/lesson/systemcall/) - What is Systemcall? The system call is the fundamental interface between an application and the Linux kernel. A system call is an entry point into the Linux kernel. Usually, system calls are not invoked directly; most system calls have corresponding C library wrapper functions that perform the steps required to invoke the system call. Thus, making a system call - [GlibC](https://cloudyuga.guru/lesson/glibc/) - What is GlibC? Glibc is the GNU C Library, the GNU project's implementation of the C standard library. It was started in the 1980s by the Free Software Foundation (FSF) for the GNU operating system. Glibc is free software released under the terms of the GNU Lesser General Public License. Glibc provides the following functions: Provides the core libraries for the - [User & Kernel Space](https://cloudyuga.guru/lesson/user-kernel-space/) - Take Quiz Complete Lesson Next Lesson Reset Lesson User and Kernel Space Let's try to perform a simple operation of reading a file. cat /etc/os-release The above command will read the content from file /etc/os-release and print in the screen. In the above example, when we performed the command cat /etc/os-release, then open() , read() or other system calls are performed in - [Kernel Modules](https://cloudyuga.guru/lesson/kernel-modules/) - Take Quiz Complete Lesson Next Lesson Reset Lesson What is Kernel Module? Although, the Linux kernel is monolithic by design it is still quite flexible. The Kernel capabilities can be extended by dynamically loaded Kernel Modules which don't require rebooting the system. When we download the Kernel from The Linux Kernel Archives, we get a compiled version with minimal modules. Modules - [Linux Kernel](https://cloudyuga.guru/lesson/linux-kernel/) - What is Linux Kernel? The Linux kernel is a free and open-source, monolithic, modular, multitasking, Unix-like operating system kernel. It was originally authored by Linus Torvalds in 1991 for his i386-based PC, and it was soon adopted as the kernel for the GNU operating system, which was written to be a free replacement for Unix. Since the - [Shell : bash and sh](https://cloudyuga.guru/lesson/shell-bash-and-sh/) - A Shell is an interface between the user and the system which takes input from the user and executes programs based on that input. After the program finishes executing, it displays that program's output. It displays the error if there is any error executing the program. Every Linux operating system comes with a default shell. Run the - [Various Distributions of Linux](https://cloudyuga.guru/lesson/various-distributions-of-linux/) - Distributions in Linux There are over 600+ Linux distributions (or distros) and about 500+ are in active development. However, the following are 7 Linux distros that are popular among different user bases: Debian Debian is renowned for being a mother to popular Linux distributions such as Deepin, Ubuntu, and Mint, which have provided solid performance, stability, and unparalleled user experience. The latest stable release - [Why Linux?](https://cloudyuga.guru/lesson/why-linux/) - In the previous Operating System overview section we have seen majorly three types of operating systems. In this Section, we will be talking specifically about Linux. Linux is one of the most popular Operating Systems among advanced users, specifically developers, and system administrators. A user chooses Linux since it is freely available, and easier to download, install and operate. Moreover, it - [Bare metal, Virtualized, and Containerized Systems](https://cloudyuga.guru/lesson/bare-metal-virtualized-and-containerized-systems/) - Bare metal, Virtualized, and Containerized Systems Bare Metal A bare-metal server is a physical computer server that is used by one consumer, or tenant, only. We can have one Operating System installed and run our multiple applications. It gives us complete control over the hardware and software resources we like to run. It is the best fit for those software applications that - [Operating System and its functions](https://cloudyuga.guru/lesson/operating-system-and-its-functions/) - Take Quiz Complete Lesson Next Lesson Reset Lesson What is an Operating System? An Operating System (OS) is a system software that helps in operating hardware and software of the computer and also manages all other application programs in a computer. It acts as an interface between computer hardware components and the user. It is the most important program that is first - [Introduction to Process](https://cloudyuga.guru/lesson/introduction-to-process/) - A process is the instance of a computer program that is being executed by one or many threads. It comprises the program code, assigned system resources, physical and logical access permissions, and data structures to initiate, control, and coordinate execution activity. In general, a process consists of the following resources: An image of the executable machine code associated with a - [Introduction to Linux Networking](https://cloudyuga.guru/lesson/introduction-to-linux-networking/) - A computer network means a group of computers and devices connected via a means of cables, optical fiber, etc to communicate with each other and allocates resources. One of the best examples is the internet. Need for Computer Networking The following are the reasons for the need for computer networking. Communications between computer systems and - [Advanced Vim Commands](https://cloudyuga.guru/lesson/advanced-vim-commands/) - Vim commands for searching and replacing / – Search expression in a forward direction. ? – Search expression in a backward direction. n – repeat the search in the same direction N – repeat the search in the opposite direction :%s///g – replace all old with new throughout the file :%s///gc – replace all old with new throughout the file with confirmations Vim - [Course Introduction1](https://cloudyuga.guru/lesson/course-introduction-6/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [YAML Tips and Tricks](https://cloudyuga.guru/lesson/yaml-tips-and-tricks-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Logging-Monitoring Cluster : Kubectl Verbosity](https://cloudyuga.guru/lesson/logging-monitoring-cluster-kubectl-verbosity/) - Kubectl verbosity is controlled with the -v or --v flags followed by an integer representing the log level. General Kubernetes logging conventions are as below. --v=0 Generally useful for this to ALWAYS be visible to an operator. --v=1 A reasonable default log level if you don’t want verbosity. --v=2 Useful steady state information about the service and important - [Kubernetes HA-Envoy](https://cloudyuga.guru/lesson/kubernetes-ha-envoy/) - Creating a Multi Master cluster using Kubeadm Prerequisites Assume to have the following configurations: 3 Virtual machines with Ubuntu 20.04 installed and sudo privileges. Name one node as Master1 other as master2 and we will use third VM as a load balancer, name it as worker-lb 2 GB or more of RAM per machine. 2 CPUs - [About ArgoCD](https://cloudyuga.guru/lesson/about-argocd/) - ArgoCD is an open-source, declarative, GitOps continuous delivery tool for Kubernetes. It follows the GitOps pattern of using Git repositories as a single source of truth for defining the desired application state. The Kubernetes manifests can be applied in the following ways: kustomize applications Helm charts Plain directory of yaml/json manifests Deploy and Manage Applications with - [What is GitOps?](https://cloudyuga.guru/lesson/what-is-gitops/) - GitOps is an operational framework that uses DevOps best practices for application development, such as version control, collaboration, and CI/CD and applies them to infrastructure automation. It uses Git Repositories as a single source of truth to deliver infrastructure as code. GitOps delivers the following: A standard workflow for application development Increased security for setting - [About Helm](https://cloudyuga.guru/lesson/about-helm/) - Helm helps you manage Kubernetes applications. Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application. Charts are easy to create, version, share, and publish. The CNCF maintains the latest version of Helm in collaboration with Microsoft, Google, Bitnami, and the Helm contributor community. The major role of the helm are: Create - [Working with Helm](https://cloudyuga.guru/lesson/working-with-helm/) - Installation Install Helm curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh Check the version using the following command helm version Searching the Charts Go to https://artifacthub.io/ and search for package you are interested in. Searching in a repo Add repo to your helm helm repo add jenkins https://charts.jenkins.io Update repo helm repo update Search for jenkins You - [Creating Roles and RoleBinding using RBAC](https://cloudyuga.guru/lesson/creating-roles-and-rolebinding-using-rbac-3/) - Create a Role within the cloudyuga namespace kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: cloudyuga name: deployment-manager rules: - apiGroups: ["", "apps"] resources: ["deployments", "replicasets", "pods"] verbs: ["get", "list", "watch", "create", "update"] Take Quiz Complete Lesson Next Lesson Reset Lesson In this yaml file we are creating the rule that allows a user to execute several operations on Deployments, Pods - [Normal Users](https://cloudyuga.guru/lesson/normal-users/) - Create a namespace for the user to connect kubectl create ns cloudyuga Create a Private Key and Certificate Signing Request (CSR) for the User Create the Private Key for user cy-user openssl genrsa -out cy-user.key 2048 Create the CSR for user cy-user openssl req -new -key cy-user.key -out cy-user.csr -subj "/CN=cy-user/O=cloudyuga" cat cy-user.csr Generate the Kubernetes Certificate - [4C's of Cloud Native Security](https://cloudyuga.guru/lesson/4cs-of-cloud-native-security/) - There are 4 C's of cloud-native security which are: Cloud Cluster Container Code Each layer depends on the outermost layer, and security at each level is important. Cloud The first layer, cloud or co-located data centers, is the most trusted base for clusters. If the cloud becomes vulnerable, then workloads/components running on this base are - [Introduction to OpenTelemetry](https://cloudyuga.guru/lesson/introduction-to-opentelemetry-2/) - OpenTelemetry, also known as OTEL. Currently, it is a CNCF incubating project. It is a combination of OpenTracing and OpenCensus projects. OpenTelemetry is an open-source, vendor-neutral observability framework available in several languages. It is a compilation of tools, APIs, and SDKs. OTEL is designed to instrument, create, gather, and export event data to analyze the software. It has a - [Observability Signals](https://cloudyuga.guru/lesson/observability-signals/) - Signals are the outputs from the system that can give some insights. These signals vary from system to system. They can be something one wants to measure at a particular time, like CPU usage or user request event that goes to several distributed system components that are likely to be traced down. It can also - [Taints and Tolerations](https://cloudyuga.guru/lesson/taints-and-tolerations/) - Prerequisite A single node cluster created using kubeadm kubectl get nodes For now, add a taint to that single node via kubectl as we will be learning about it in this section. kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule Introduction to Taints Schedule a nginx Pod kubectl run nginx --image=nginx Get the status of nginx Pod kubectl get pods We can see here that nginx pod is in a Pending - [What is Observability?](https://cloudyuga.guru/lesson/what-is-observability-2/) - Observability is understanding and measuring the system's current state based on the telemetry data it generates. These telemetry data are logs, metrics, and traces. For a software application to have observability, one needs to do the following: Understand the application's working. Understand the state of the system, both predicted and unanticipated. Understand the internal working and - [What is Serverless?](https://cloudyuga.guru/lesson/what-is-serverless/) - Serverless is a cloud-computing application development and execution model that helps developers build and run applications without worrying about the need to provision and manage servers or backend infrastructure. They allow customers to charge on the basis of computations and do not reserve and pay for a fixed amount for the servers. As the name is serverless, - [Static Pod](https://cloudyuga.guru/lesson/static-pod/) - Perform the following lab only on a K8s cluster created using kubeadm tool described in chapter INSTALLATION-CONFIGURATION-VALIDATION >> KUBERNETES-INSTALLATION-KUBEADM >> SINGLE-CONTROL-PLANE Check the cluster is up and running kubectl cluster-info List the Nodes kubectl get nodes Take a look at the kubelet service configuration Login to node cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf Create a Pod in the /etc/kubernetes/manifests - [Limitations of Horizontal Pod Autoscaler](https://cloudyuga.guru/lesson/limitations-of-horizontal-pod-autoscaler/) - The limitations of HPA are : No external metric support: When working with distributed and complex applications, different components (event sources) are used with it such as Prometheus, Apache Kafka, cloud providers, and other events. As one would want to scale applications based on external metrics available through these events and not only through CPU and - [What is Autoscaling?](https://cloudyuga.guru/lesson/what-is-autoscaling/) - Autoscaling is one of the important features in a Kubernetes cluster, which helps increase or decrease the number of pods or nodes according to the demand for service responses. This helps improve the cluster's overall resource utilization by automatically adjusting the application resources and pods according to the load at a time, thus avoiding many manual - [Pod-Affinity and Anti-Affinity](https://cloudyuga.guru/lesson/pod-affinity-and-anti-affinity/) - Label a node List the node. kubectl get nodes Label the node master kubectl label node master name=cloudyuga Get the labels of the nodes kubectl get nodes --show-labels Create a pod with Node Affinity apiVersion: v1 kind: Pod metadata: name: nginx-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/os operator: In values: - - [Istio Service Mesh](https://cloudyuga.guru/lesson/istio-service-mesh/) - Istio is an open-source service mesh. A dedicated infrastructure layer adds transparently to the application without changing its code. This layer helps manage traffic between microservices, securing them and balancing them evenly. It provides the following features: Secure service-to-service communication with TLS encryption and identity-based authentication and authorization. Path to load balancing for various protocols. Control - [Service Mesh](https://cloudyuga.guru/lesson/service-mesh/) - Service mesh is a solution that helps in handling service-to-service communication. It enables you to secure communication, monitors all application traffic, and collects traces of it. It is done via the help of a network proxy called Envoy. Each microservice has its dedicated proxy service, which helps decouple network operations from your application. All the requests to and - [Network Policies – Egress Policies](https://cloudyuga.guru/lesson/network-policies-egress-policies-3/) - Deny egress traffic from an application Create an Nginx application kubectl run nginx --image=nginx --port 80 --expose --labels app=web Try to access the application from another pod with label set to app=client kubectl run --rm --image=alpine -it -l app=client test -- sh wget -qO- --timeout=2 http://nginx Create the NetworkPolicy, which denies egress connection from Pods which have label set to app=client - [Network Policies – Ingress Policies](https://cloudyuga.guru/lesson/network-policies-ingress-policies-3/) - Deny All traffic to the pods Create the nginx application as below: kubectl run nginx --image=nginx --labels app=nginx --expose --port 80 Run Busybox Pod and try to access the nginx application from it kubectl run --rm -i -t --image=alpine demo -- sh wget -qO- --timeout=2 http://nginx Create a Network Policy so it can restrict the - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/lesson/configure-virtual-host-based-ingress-routing-3/) - Create a Vhost based ingress object Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: virtual annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: blue.cy.guru http: paths: - pathType: Exact path: "/blue" backend: service: name: blue port: number: 80 - host: green.cy.guru http: paths: - pathType: Exact path: "/green" backend: service: - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/lesson/configure-path-based-fan-out-ingress-routing-3/) - Create a Path based Ingress Object Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /blue pathType: Prefix backend: service: name: blue port: number: 80 - path: /green pathType: Prefix backend: service: name: green port: number: 80 kubectl apply - [Introduction to Ingress](https://cloudyuga.guru/lesson/introduction-to-ingress-3/) - There are many Ingress Controllers available and can be configured in many different ways. You can checkout respective documentation to configure. For the chapter, we would using ingress-nginx controller, which is already pre-configured on this setup. kubectl get pods -n ingress-nginx The controller's pod shares the same network namespace with the host the system and serving on port 80. So it we hit - [Field Selectors](https://cloudyuga.guru/lesson/field-selectors-5/) - kubectl run nginx --image=nginx:alpine Get the list of all the running pods in the default namespace kubectl get pods --field-selector status.phase=Running Get the list of all the running Pods in all the namespaces kubectl get pods --all-namespaces --field-selector status.phase=Running Get all running Pods in the cluster with restartPolicy as Always kubectl get pods --field-selector=status.phase=Running,spec.restartPolicy=Always Create - [Lab Instructions on Windows](https://cloudyuga.guru/lesson/lab-instructions-on-windows-2/) - To perform lab operations of this Shell Scripting course on Windows OS, we recommend using: WSL in your Windows system and install Ubuntu on it. Below are the resources to help you set up WSL on your Windows with Ubuntu on it. Set up a WSL development environment Install Ubuntu on WSL2 on Windows 10 - [Lab Instructions on Linux and MacOS](https://cloudyuga.guru/lesson/lab-instructions-on-linux-and-macos/) - If you are using Linux or MacOS as your operating system, then you can do all the lab operations of the Shell Scripting course easily. But if you are a Windows user then please refer to the next lesson. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Instructions on Windows](https://cloudyuga.guru/lesson/lab-instructions-on-windows/) - The lab operations of this course are according to the Ubuntu distribution of Linux. To perform lab operations of this Linux course on Windows OS, we recommend two ways: Use Oracle VirtualBox and install Ubuntu VM in it. You can refer to the Installation and Upgrade module, where we have a demo of installing an - [Lab Instructions on MacOS](https://cloudyuga.guru/lesson/lab-instructions-on-macos/) - The lab operations of this course are according to the Ubuntu distribution of Linux. All the commands will run on the MacOS, but if you want, you can use Oracle VirtualBox and install Ubuntu VM in it. You can refer to the Installation and Upgrade module, where we have a demo of installing an Ubuntu - [Lab Introduction](https://cloudyuga.guru/lesson/lab-introduction-3/) - Doing hands-on is very important to follow and learn the course content as it helps students understand the concepts easily. In this Shell Scripting course, we recommend you do hands-on as you proceed. In the next few lessons, we have mentioned how you can perform lab operations of this course on your local system, regardless - [Lab Introduction](https://cloudyuga.guru/lesson/lab-introduction/) - Doing hands-on is very important to follow and learn the course content as it helps students understand the concepts easily. In this Linux course, we recommend you do hands-on as you proceed. In the next few lessons, we have mentioned how you can perform lab operations of this course on your local system, regardless of - [Lab Instructions on Linux OS](https://cloudyuga.guru/lesson/lab-instructions-on-linux-os/) - The lab operations of this course are according to the Ubuntu distribution of Linux. So if you have Ubuntu distribution on your local system, then all the commands of this course will be performed fine. However, the outputs of the command may differ. But if you have any other Linux distribution installed, we recommend using - [Deployment Strategy - Rolling Update](https://cloudyuga.guru/lesson/deployment-strategy-rolling-update/) - Updating the image version for our container kubectl set image deployment/nginx-deploy nginx=nginx:stable Checkout the RollOut status kubectl rollout status deployment nginx-deploy We can now describe any Pod to see if the image version is change or not. Let's update it one more time and watch the ReplicaSet changes. kubectl set image deployment/nginx-deploy nginx=nginx:latest Run the following command on the - [Scaling the Deployments](https://cloudyuga.guru/lesson/scaling-the-deployments-5/) - Scaling down the Deployment to 1 Replica kubectl scale deployment nginx-deploy --replicas=1 kubectl get deploy kubectl get pods Scaling up the Deployment to 2 Replicas kubectl scale deployment nginx-deploy --replicas=2 kubectl get pods Take Quiz Complete Lesson Next Lesson Reset Lesson - [Namespaces](https://cloudyuga.guru/lesson/namespaces-5/) - List the current Namespaces kubectl get namespaces Create a new Namespace kubectl create namespace test Create a Pod in the newly created Namespace kubectl create -f pod.yaml -n test kubectl get pods -n test List all the pods from all the namespaces in the cluster kubectl get pods -A Delete the test Namespace kubectl delete namespace test - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/lesson/kubernetes-api-primitves-and-object-model-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl api-versions kubectl api-resources - [Accessing Kubernetes](https://cloudyuga.guru/lesson/accessing-kubernetes-2/) - To know about the kubectl version kubectl version To know about the Kubernetes cluster nodes information kubectl get nodes To connect securely to Kubernetes Apiserver, run the following command. kubectl proxy Open another terminal and run the curl command. curl 127.0.0.1:8001 Take Quiz Complete Lesson Next Lesson Reset Lesson Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: - [Cloud and Cloud Native](https://cloudyuga.guru/lesson/cloud-and-cloud-native/) - [Container Orchestration](https://cloudyuga.guru/lesson/container-orchestration-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-15/) - Question 1 Q1. Create a Namespace test-quota such that - Put memory limits of 256Mi on the namespace. - Limit pods to use 2 persistent volumes in this namespace. - Run a pod with the name test-pod in the test-quota namespace with resource request and limit which satisfy the resource quota. You can use an image - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction-4/) - [Lab Setup with Kind](https://cloudyuga.guru/lesson/lab-setup-with-kind-2/) - kind (Kubernetes In Docker) provides one of the easiest ways to set or run Kubernetes clusters locally. It makes cluster nodes run as docker containers. It can be used for local development, quality assurance (QA), or CI/CD. kind provides many advanced functionalities, which gives it an edge over other tools. They are as follows: Multi-node clusters - [Lab Setup with Kind](https://cloudyuga.guru/lesson/lab-setup-with-kind/) - kind(Kubernetes In Docker) provides one of the easiest ways to set or run Kubernetes clusters locally. It makes cluster nodes run as docker containers. It can be used for local development, quality assurance (QA), or CI/CD. kind provides many advanced functionalities, which gives it an edge over other tools. They are as follows: Multi-node clusters Control-plane - [Lab Setup with Docker Desktop](https://cloudyuga.guru/lesson/lab-setup-with-docker-desktop/) - Docker Desktop includes a standalone Kubernetes server and client and Docker CLI integration that runs on your machine. The Kubernetes server runs locally within your Docker instance and is a single-node cluster. It runs within multiple Docker containers on your local system and is only for local testing. Create and set up a single node Kubernetes - [Core Concepts (quiz)](https://cloudyuga.guru/lesson/core-concepts-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/lesson/application-lifecycle-management-quiz-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup with Docker Desktop](https://cloudyuga.guru/lesson/lab-setup-with-docker-desktop-2/) - Docker Desktop includes a standalone Kubernetes server and client and Docker CLI integration that runs on your machine. The Kubernetes server runs locally within your Docker instance and is a single-node cluster. It runs within multiple Docker containers on your local system and is only for local testing. Create and set up a single node Kubernetes - [Introduction to Lab Setup](https://cloudyuga.guru/lesson/introduction-to-lab-setup-2/) - To be proficient in Kubernetes, one has to know its concepts thoroughly. This can be done by learning theory and doing hands-on. There are multiple ways to set up a Kubernetes cluster locally, which are: Setup via Docker Desktop Setup with Minikube Setup with Kind Take Quiz Complete Lesson Next Lesson Reset Lesson Other than - [Services and Networking (quiz)](https://cloudyuga.guru/lesson/services-and-networking-quiz-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-22/) - Question 1 Q1. Create a Deployment with the name deploy-app and create a service svc-app for that deployment. Deploy Ingress controller and create Ingress resource app-ing such that app.example.com resolve to service svc-app.– name of Deployment: deploy-app– image: nginx:alpine– labels: app=nginx-deploy– replicas: 3– name of Service: svc-app– name of ingress object: app-ing Question 2 Q2. Create a Deployment with the name nginx-deploy using a configuration file. - [LoadBalancer Service Type](https://cloudyuga.guru/lesson/loadbalancer-service-type-4/) - Create a Loadbalancer service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_lb.yaml Create a LoadBalancer - [NodePort Service Type](https://cloudyuga.guru/lesson/nodeport-service-type-4/) - Create a Nodeport Service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_np.yaml Create a Nodeport - [Kubernetes Services](https://cloudyuga.guru/lesson/kubernetes-services-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-21/) - Question 1 Q1. Create a simple job that will write “Hello world” 50 times with 5 parallelisms. Question 2 Q2. Create a Deployment using a configuration file – image : nginx:alpine – name : nginx-deploy – label : app=web – replicas : 3 Question 3 Q3. Scale the Deployment nginx-deploy created in the above question to 5 replicas. Question 4 Q4. - [Field Selectors](https://cloudyuga.guru/lesson/field-selectors-4/) - Examples for Field Selectors Create a Pod kubectl run nginx --image=nginx:alpine Get the list of all the running pods in the default namespace kubectl get pods --field-selector status.phase=Running Get the list of all the running Pods in all the namespaces kubectl get pods --all-namespaces --field-selector status.phase=Running Get all running Pods in the cluster with restartPolicy - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/lesson/labels-and-annotations-for-deployment-object-4/) - Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment.yaml At-least one of the selector defined in the ReplicaSet section should match one of - [Annotations](https://cloudyuga.guru/lesson/annotations-4/) - Exploring Annotations Create a Pod with Annotations apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx annotations: build: demo builder: cloudyuga spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the Pod, describe it and check for annotations kubectl apply -f annotate-pod.yaml kubectl describe pod nginx - [Labels and Selectors](https://cloudyuga.guru/lesson/labels-and-selectors-4/) - Deploy the Pods Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: spec: containers: - name: myc image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: prod-pod labels: tier: frontend release: prod spec: containers: - name: prod-c image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- - [Deployment Strategy – Recreate](https://cloudyuga.guru/lesson/deployment-strategy-recreate/) - Updating the application with Recreate Deployment Strategy Create a Deployment with Recreate as deployment strategy Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 kubectl - [Deployment Strategy - Recreate](https://cloudyuga.guru/lesson/deployment-startegy-recreate/) - Updating the application with Recreate Deployment Strategy Create a Deployment with Recreate as deployment strategy Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 kubectl - [Deployment Startegy – Rolling Update](https://cloudyuga.guru/lesson/deployment-startegy-rolling-update-4/) - RollingOut the app with new version Updating the image version for our container kubectl set image deployment/nginx-deploy nginx=nginx:stable Checkout the RollOut status kubectl rollout status deployment nginx-deploy We can now describe any Pod to see if the image version is change or not. Let's update it one more time and watch the ReplicaSet changes. kubectl set image deployment/nginx-deploy nginx=nginx:latest - [Deployment Strategy - Rolling Update](https://cloudyuga.guru/lesson/deployment-startegy-rolling-update-3/) - RollingOut the app with new version Updating the image version for our container kubectl set image deployment/nginx-deploy nginx=nginx:stable Checkout the RollOut status kubectl rollout status deployment nginx-deploy We can now describe any Pod to see if the image version is change or not. Let's update it one more time and watch the ReplicaSet changes. kubectl set image deployment/nginx-deploy nginx=nginx:latest - [Scaling the Deployments](https://cloudyuga.guru/lesson/scaling-the-deployments-4/) - Scaling the Deployments Scaling down the Deployment to 1 Replica kubectl scale deployment nginx-deploy --replicas=1 kubectl get deploy kubectl get pods Scaling up the Deployment to 2 Replicas kubectl scale deployment nginx-deploy --replicas=2 kubectl get pods Take Quiz Complete Lesson Next Lesson Reset Lesson - [Deployment](https://cloudyuga.guru/lesson/deployment-4/) - Deploy the App using Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Create the Deployment kubectl apply -f deployment.yaml List the Deployments kubectl get - [Replicaset](https://cloudyuga.guru/lesson/replicaset-4/) - Create and Manage ReplicaSets apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-app image: teamcloudyuga/nginx:alpine Take Quiz Complete Lesson Next Lesson Reset Lesson Create the ReplicaSet kubectl apply -f replicaset.yaml List the ReplicaSets kubectl get replicaset List the Pods kubectl - [Core Concepts (quiz)](https://cloudyuga.guru/lesson/core-conectps-quiz-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-20/) - Question 1 Q1. Create a Multi-container Pod with the name multi-c-pod, which has containers from the following images:– image1 : nginx:alpine– image2 : redis– image3 : memcached You can have container names, as per your choice. Question 2 Q2. Create a Namespace with name mynamespace using a YAML configuration file. Create a Pod in this namespace with the - [Lab Setup with Kubeadm-Terraform-Ansible on AWS EC2 Instances](https://cloudyuga.guru/lesson/lab-setup-with-kubeadm-terraform-ansible-on-aws-ec2-instances-2/) - Besides the previously mentioned ways to set up a Kubernetes cluster locally, one can use the Kubeadm-based Kubernetes cluster to try the hands-on. This Kubeadm-based Kubernetes cluster is set up on AWS EC2 instances with the help of Terraform and Ansible. Take Quiz Complete Lesson Next Lesson Reset Lesson Follow the steps mentioned in this - [Namespaces](https://cloudyuga.guru/lesson/namespaces-4/) - List the current the Namespaces kubectl get namespaces Create a new Namespace kubectl create namespace test Create a Pod in the newly created Namespace kubectl create -f pod.yaml -n test kubectl get pods -n test Delete the Namespace kubectl delete namespace test kubectl get ns Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup with Minikube](https://cloudyuga.guru/lesson/lab-setup-with-minikube-2/) - Minikube is a tool that sets up a Kubernetes environment on a local PC or laptop. Minikube works by setting up a Kubernetes cluster on a local machine. By default, it creates a one-node cluster, but as we explain below, you can create a multi-node cluster with a Minikube environment if desired. Minikube supports a - [Multi-Container Pods](https://cloudyuga.guru/lesson/multi-container-pods-4/) - Create and List a Multi-Container Pod Create and list the multi-container Pod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: multicontainer spec: containers: - name: con1 image: teamcloudyuga/nginx:alpine - name: con2 image: redis - name: con3 image: memcached kubectl apply -f multi-c-pod.yaml List the Pods kubectl get pods Delete - [Lab Setup with Kubeadm-Terraform-Ansible on AWS EC2 Instances](https://cloudyuga.guru/lesson/lab-setup-with-kubeadm-terraform-ansible-on-aws-ec2-instances/) - Besides the previously mentioned ways to set up a Kubernetes cluster locally, one can use the Kubeadm-based Kubernetes cluster to try the hands-on. This Kubeadm-based Kubernetes cluster is set up on AWS EC2 instances with the help of Terraform and Ansible. Take Quiz Complete Lesson Next Lesson Reset Lesson Follow the steps mentioned in this - [Pods](https://cloudyuga.guru/lesson/pods-4/) - Create and List the Pods Create a YAML file (pod.yaml) for Pod and name the Pod as mypod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Create the Pod kubectl create -f pod.yaml List the - [Kubernetes API Primitives & Object Model](https://cloudyuga.guru/lesson/kubernetes-api-primitives-object-model/) - kubectl api-versions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup with Minikube](https://cloudyuga.guru/lesson/lab-setup-with-minikube/) - Minikube is a tool that sets up a Kubernetes environment on a local PC or laptop. Minikube works by setting up a Kubernetes cluster on a local machine. By default, it creates a one-node cluster, but as we explain below, you can create a multi-node cluster with a Minikube environment if desired. Minikube supports a - [Kubernetes Networking Overview](https://cloudyuga.guru/lesson/kubernetes-networking-overview-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Accessing Kubernetes](https://cloudyuga.guru/lesson/accessing-kubernetes/) - kubectl version kubectl get nodes kubectl proxy Take Quiz Complete Lesson Next Lesson Reset Lesson Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTaVZtQVRvVkpmVGxMWEdaaldDM0NhVEk1M3lYWkVHQkRPeHVMUUJrbU4KaXc5a0ErdFhicnRBSEJYUXRYRjhFdUs5Nlp2TDZqOUJmL3pNaEY0R3Z4NmFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVpqSTdsKzZyeGc4anFQay9sQVFGCmdCZi83Mmd3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWGZ2THN6UzhtTDR2ZzU5UFhjODlyMEgrTHQ3a0xHeEwKWi84ZkFiU0JiOWdDSUJvL1BibWNnTEs4bjZ6UXJmcXB6WkhiYkh6RCt0aVVtSkpCR1U4YTJoTlUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.197.191:6443 name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZVFLOVBtVzVVMGt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOakE1TWpBd016ZzBNQjRYRFRJd01USXlPVEF3TURZeU5Gb1hEVEl4TVRJeQpPVEF3TURZeU5Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJLOGJxa2lSaVhIbXlPS3oKeGRCcVNvVW51aG5MQ1d6amdHVjRrMzBIZnRGbzUrdHYzMmRXTlNlZzFaQW5JM0ZZb2hDeTk1N3ZpeFlkbTJoSgpiWTNmOXoyalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVHBGSXBCNlZFY3pEZjI4ODA5eXZ3Y1o4eVRRekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQXhWUWpESDBGZXdGYWprRkY3ZzdmM0tSYXduTThjaWdYUjIxMExQZzdVT1FDSUNHcWdZMG55UWFPN2pIRQpDdUc4U05LS3BnTUFGQ0xqaUNha29vai92bXY1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUbG9MUnFoUCtaWElLdm9VcysvSUR3ZXVSZzdTS3YwSmV4cXpYVUUvUnUKUlBudGwxY3NDWHFlUzd6cVFNZ1VaWE0rWkI1TGt4UDdQeUlyRGpWS01ZR0dvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTZSU0tRZWxSSE13Mzl2UE5QY3I4CkhHZk1rME13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYzhxalBsVEVVTWt2VS8vVlpGMmxKR2liTUZ2YWowRG8KcGNmWlVERVhBWmdDSUV4U24wNjArbm8vUitPckJiaFNVQ0h2L05WOXI1RE1UdlhmRThJanFDaWQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVnZmE0aU9QNDdSKzdUVmdPMC9NMUo4R0lMRm51VEtOKzEyQmp3eFVYMTJvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFcnh1cVNKR0pjZWJJNHJQRjBHcEtoU2U2R2NzSmJPT0FaWGlUZlFkKzBXam42Mi9mWjFZMQpKNkRWa0NjamNWaWlFTEwzbnUrTEZoMmJhRWx0amQvM1BRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= location. - [Introduction to Lab Setup](https://cloudyuga.guru/lesson/introduction-to-lab-setup/) - To be proficient in Kubernetes, one has to know its concepts thoroughly. This can be done by learning theory and doing hands-on. There are multiple ways to set up a Kubernetes cluster locally, which are: Setup via Docker Desktop Setup with Minikube Setup with Kind Take Quiz Complete Lesson Next Lesson Reset Lesson We recommend - [Kubernetes Architecture](https://cloudyuga.guru/lesson/kubernetes-architecture-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Introduction](https://cloudyuga.guru/lesson/kubernetes-introduction-4/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Download the supporting files](https://cloudyuga.guru/lesson/download-the-supporting-files-4/) - Install git on your system. Clone the below GitHub repository to access the course content required files, follow the below steps. Take Quiz Complete Lesson Next Lesson Reset Lesson # clone the repository git clone https://github.com/cloudyuga/k8s-courses.git # list the branches git branch # switch to the k8s101 course branch git checkout k8s101 GitHub Repository URL - [Create your own Kubeadm Kubernetes Cluster](https://cloudyuga.guru/lesson/create-your-own-kubeadm-kubernetes-cluster-2/) - terraform destroy Take Quiz Complete Lesson Next Lesson Reset Lesson terraform destroy Install the Ansible tool for configuration management. terraform destroy Install the Terraform tool for creating Ubuntu machines on AWS, which we will be used as Kubernetes cluster nodes. terraform destroy Create a free tier AWS account and generate your user Access keys and - [Lab Setup Details](https://cloudyuga.guru/lesson/lab-setup-details-4/) - Following are the ways to create a Kubernetes cluster locally. Kubernetes Cluster with Docker Desktop Docker Desktop includes a standalone Kubernetes server and client and Docker CLI integration that runs on your machine. The Kubernetes server runs locally within your Docker instance, is not configurable, and is a single-node cluster. It runs within a Docker - [Author’s Introduction](https://cloudyuga.guru/lesson/authors-introduction-4/) - If you would like to know more Title: Neependra_intro.pdfOpen in a new tab Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/lesson/application-lifecycle-management-quiz-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Services and Networking (quiz)](https://cloudyuga.guru/lesson/services-and-networking-quiz-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [YAML Tips and Tricks](https://cloudyuga.guru/lesson/yaml-tips-and-tricks/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [LoadBalancer Service Type](https://cloudyuga.guru/lesson/loadbalancer-service-type/) - Create a Loadbalancer service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_lb.yaml Create a LoadBalancer - [NodePort Service Type](https://cloudyuga.guru/lesson/nodeport-service-type/) - Create a Nodeport Service Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_np.yaml Create a Nodeport - [ClusterIP Service Type](https://cloudyuga.guru/lesson/clusterip-service-type/) - Create a clusterIP service Deploy the application apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image:teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deploy_CI.yaml Create a clusterIP service - [Kubernetes Services](https://cloudyuga.guru/lesson/kubernetes-services/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Field Selectors](https://cloudyuga.guru/lesson/field-selectors/) - Examples for Field Selectors Create a Pod kubectl run nginx --image=nginx:alpine Get the list of all the running pods in the default namespace kubectl get pods --field-selector status.phase=Running Get the list of all the running Pods in all the namespaces kubectl get pods --all-namespaces --field-selector status.phase=Running Get all running Pods in the cluster with restartPolicy - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/lesson/labels-and-annotations-for-deployment-object/) - Create a deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson kubectl apply -f deployment.yaml At-least one of the selector defined in the ReplicaSet section should match one of - [Annotations](https://cloudyuga.guru/lesson/annotations/) - Exploring Annotations Create a Pod with Annotations apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx annotations: build: demo builder: cloudyuga spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Deploy the Pod, describe it and check for annotations kubectl apply -f annotate-pod.yaml kubectl describe pod nginx - [Labels and Selectors](https://cloudyuga.guru/lesson/labels-and-selectors/) - Deploy the Pods Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: spec: containers: - name: myc image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Pod metadata: name: prod-pod labels: tier: frontend release: prod spec: containers: - name: prod-c image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 --- - [Scaling the Deployments](https://cloudyuga.guru/lesson/scaling-the-deployments-3/) - Scaling the Deployments Scaling down the Deployment to 1 Replica kubectl scale deployment nginx-deploy --replicas=1 kubectl get deploy kubectl get pods Scaling up the Deployment to 2 Replicas kubectl scale deployment nginx-deploy --replicas=2 kubectl get pods Take Quiz Complete Lesson Next Lesson Reset Lesson - [Deployment](https://cloudyuga.guru/lesson/deployment-3/) - Deploy the App using Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Take Quiz Complete Lesson Next Lesson Reset Lesson Create the Deployment kubectl apply -f deployment.yaml List the Deployments kubectl get - [Replicaset](https://cloudyuga.guru/lesson/replicaset-3/) - Create and Manage ReplicaSets apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-app image: teamcloudyuga/nginx:alpine Take Quiz Complete Lesson Next Lesson Reset Lesson Create the ReplicaSet kubectl apply -f replicaset.yaml List the ReplicaSets kubectl get replicaset List the Pods kubectl - [Namespaces](https://cloudyuga.guru/lesson/namespaces-3/) - List the current the Namespaces kubectl get namespaces Create a new Namespace kubectl create namespace test Create a Pod in the newly created Namespace kubectl create -f pod.yaml -n test kubectl get pods -n test Delete the Namespace kubectl delete namespace test kubectl get ns Take Quiz Complete Lesson Next Lesson Reset Lesson - [Multi-Container Pods](https://cloudyuga.guru/lesson/multi-container-pods-3/) - Create and List a Multi-Container Pod Create and list the multi-container Pod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: multicontainer spec: containers: - name: con1 image: teamcloudyuga/nginx:alpine - name: con2 image: redis - name: con3 image: memcached kubectl apply -f multi-c-pod.yaml List the Pods kubectl get pods Delete - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/lesson/kubernetes-api-primitves-and-object-model-3/) - kubectl api-versions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Networking Overview](https://cloudyuga.guru/lesson/kubernetes-networking-overview-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Accesssing Kubernetes](https://cloudyuga.guru/lesson/accesssing-kubernetes-3/) - kubectl version kubectl get nodes kubectl proxy Take Quiz Complete Lesson Next Lesson Reset Lesson Explore the ~/.kube/config file apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTaVZtQVRvVkpmVGxMWEdaaldDM0NhVEk1M3lYWkVHQkRPeHVMUUJrbU4KaXc5a0ErdFhicnRBSEJYUXRYRjhFdUs5Nlp2TDZqOUJmL3pNaEY0R3Z4NmFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVpqSTdsKzZyeGc4anFQay9sQVFGCmdCZi83Mmd3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWGZ2THN6UzhtTDR2ZzU5UFhjODlyMEgrTHQ3a0xHeEwKWi84ZkFiU0JiOWdDSUJvL1BibWNnTEs4bjZ6UXJmcXB6WkhiYkh6RCt0aVVtSkpCR1U4YTJoTlUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.197.191:6443 name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJZVFLOVBtVzVVMGt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOakE1TWpBd016ZzBNQjRYRFRJd01USXlPVEF3TURZeU5Gb1hEVEl4TVRJeQpPVEF3TURZeU5Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJLOGJxa2lSaVhIbXlPS3oKeGRCcVNvVW51aG5MQ1d6amdHVjRrMzBIZnRGbzUrdHYzMmRXTlNlZzFaQW5JM0ZZb2hDeTk1N3ZpeFlkbTJoSgpiWTNmOXoyalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVHBGSXBCNlZFY3pEZjI4ODA5eXZ3Y1o4eVRRekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQXhWUWpESDBGZXdGYWprRkY3ZzdmM0tSYXduTThjaWdYUjIxMExQZzdVT1FDSUNHcWdZMG55UWFPN2pIRQpDdUc4U05LS3BnTUFGQ0xqaUNha29vai92bXY1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUyTURreU1EQXpPRFF3SGhjTk1qQXhNakk1TURBd05qSTBXaGNOTXpBeE1qSTNNREF3TmpJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUyTURreU1EQXpPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUbG9MUnFoUCtaWElLdm9VcysvSUR3ZXVSZzdTS3YwSmV4cXpYVUUvUnUKUlBudGwxY3NDWHFlUzd6cVFNZ1VaWE0rWkI1TGt4UDdQeUlyRGpWS01ZR0dvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTZSU0tRZWxSSE13Mzl2UE5QY3I4CkhHZk1rME13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYzhxalBsVEVVTWt2VS8vVlpGMmxKR2liTUZ2YWowRG8KcGNmWlVERVhBWmdDSUV4U24wNjArbm8vUitPckJiaFNVQ0h2L05WOXI1RE1UdlhmRThJanFDaWQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVnZmE0aU9QNDdSKzdUVmdPMC9NMUo4R0lMRm51VEtOKzEyQmp3eFVYMTJvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFcnh1cVNKR0pjZWJJNHJQRjBHcEtoU2U2R2NzSmJPT0FaWGlUZlFkKzBXam42Mi9mWjFZMQpKNkRWa0NjamNWaWlFTEwzbnUrTEZoMmJhRWx0amQvM1BRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= location. - [Kubernetes Architecture](https://cloudyuga.guru/lesson/kubernetes-architecture-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Kubernetes Introduction](https://cloudyuga.guru/lesson/kubernetes-introduction-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Pods](https://cloudyuga.guru/lesson/pods-3/) - Create and List the Pods Create a YAML file (pod.yaml) for Pod and name the Pod as mypod Take Quiz Complete Lesson Next Lesson Reset Lesson apiVersion: v1 kind: Pod metadata: name: mypod labels: app: nginx spec: containers: - name: nginx-demo image: teamcloudyuga/nginx:alpine ports: - containerPort: 80 Create the Pod kubectl create -f pod.yaml List the - [Create your own Kubeadm Kubernetes Cluster](https://cloudyuga.guru/lesson/create-your-own-kubeadm-kubernetes-cluster/) - To create your own Kubeadm-based Kubernetes cluster, follow the instructions below. The instructions mentioned here are with respect to Ubuntu distribution, and it will be using AWS as its cloud provider. Take Quiz Complete Lesson Next Lesson Reset Lesson Prerequisites Install the Ansible tool for configuration management. # Update the system binaries sudo apt update - [lab intro](https://cloudyuga.guru/lesson/lab-intro/) - intro Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz](https://cloudyuga.guru/lesson/quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Container Building Blocks](https://cloudyuga.guru/lesson/container-building-blocks/) - In Operating Systems like Linux and Windows, we have features like Cgroups and Namespaces; which enable containerization. Cgroups Control Groups (cgroups) provide a mechanism to organize processes hierarchically and impose limits on how much resources they can use. Cgroups are used for resource allocation like the container is going to have 1 CPU and 2 GB of RAM. - [Docker Volumes](https://cloudyuga.guru/lesson/docker-volumes/) - How to create a volume? To manage volumes for a container, we can use -voption with docker container run command. Like in the following we are using -v /data option with docker container run command, which would create a directory on the host system and mount it under /data of the container. sudo docker container run -i -t -v /data --name cvol alpine - [The History of Containers](https://cloudyuga.guru/lesson/the-history-of-containers/) - 1. What is Chroot (Change Root) ? From Wikipedia Chroot is an operation that changes the apparent root directory for the current running process and their children. A program that is run in such a modified environment cannot access files and commands outside that environmental directory tree. This modified environment is called a chroot jail. Perform the - [Resource allocation for Containers](https://cloudyuga.guru/lesson/resource-allocation-for-containers/) - Resource Allocation for Containers How to set the ulimit to a container? With the --ulimit option added to the run sub-command, we can set the ulimit for the container. Run the following command directly on the console sudo docker container run -it --ulimit nproc=10 --rm alpine sh In the above case, we have set the number of processes, this - [Lab Setup Details](https://cloudyuga.guru/lesson/lab-setup-details/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Following are the ways to create a Kubernetes cluster locally. Kubernetes Cluster with Docker Desktop Docker Desktop includes a standalone Kubernetes server and client and Docker CLI integration that runs on your machine. The Kubernetes server runs locally within your Docker instance, is not configurable, and is a - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction-3/) - [Author's Introduction](https://cloudyuga.guru/lesson/authors-introduction-2/) - If you would like to know more Title: Neependra_intro.pdfOpen in a new tab Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-9/) - Question 1 Q1. Create a Multi-container Pod with the name multi-c-pod, which has containers from the following images:- image1 : nginx:alpine- image2 : redis- image3 : memcached You can have container names, as per your choice. Question 2 Q2. Create a Namespace with name mynamespace using a YAML configuration file. Create a Pod in this namespace with the - [Exercises](https://cloudyuga.guru/lesson/exercises-10/) - Question 1 Q1. Create a simple job that will write “Hello world” 50 times with 5 parallelisms. Question 2 Q2. Create a Deployment using a configuration file - image : nginx:alpine - name : nginx-deploy - label : app=web - replicas : 3 Question 3 Q3. Scale the Deployment nginx-deploy created in the above question to 5 replicas. Question 4 Q4. - [Exercises](https://cloudyuga.guru/lesson/exercises-11/) - Question 1 Q1. Create a Deployment with the name deploy-app and create a service svc-app for that deployment. Deploy Ingress controller and create Ingress resource app-ing such that app.example.com resolve to service svc-app.- name of Deployment: deploy-app- image: nginx:alpine- labels: app=nginx-deploy- replicas: 3- name of Service: svc-app- name of ingress object: app-ing Question 2 Q2. Create a Deployment with the name nginx-deploy using a configuration file. - [Download the supporting files](https://cloudyuga.guru/lesson/download-the-supporting-files-3/) - Install git on your system. Clone the below GitHub repository to access the course content required files, follow the below steps. Take Quiz Complete Lesson Next Lesson Reset Lesson # clone the repository git clone https://github.com/cloudyuga/k8s-courses.git # list the branches git branch # switch to the cka course branch git checkout cka GitHub Repository URL: CloudYuga Kubernetes Course - [Exercises](https://cloudyuga.guru/lesson/exercises-7/) - Deploy this application kubectl apply -f rsvp.yaml Check MongoDB ReplicaSet High Availability Get the list of Pods kubectl get pod Delete one of the pods kubectl delete po mongo-0 Get the list of Pods kubectl get pods Cleanup Delete RSVP application kubectl delete -f rsvp.yaml Delete MongoDB statefulSet kubectl delete -f mongo-stateful.yaml Take Quiz Complete - [Exercises](https://cloudyuga.guru/lesson/exercises-8/) - Question 1 Q1. Create a Secret with the name mysecret using a configuration file, which consists of the following data.- USERNAME: cloudyuga- PASSWORD: CloudyugaCKA Question 2 Q2. Create a Pod with the name mysecretpod which will be consuming the secret mysecret as an environment variable. Environment variables TOPSECRETUSERNAME & TOPSECRETPASSWORD will have the values of USERNAME and PASSWORD respectively. You can use any - [Health Checks - Startup Probes](https://cloudyuga.guru/lesson/health-checks-startup-probes-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Troubleshooting](https://cloudyuga.guru/lesson/application-troubleshooting/) - Application troubleshooting helps developers to debug applications that are deployed into Kubernetes and not behaving correctly. Application Troubleshooting can be carried in the following ways. Debugging Pods. Debugging Replication Controller. Debugging Services Debugging Pods Check the current state of the Pod and recent events with the following command: kubectl describe pods ${POD_NAME} The pod is - [Core Conectps (quiz)](https://cloudyuga.guru/lesson/core-conectps-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/lesson/application-lifecycle-management-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Services and Networking (quiz)](https://cloudyuga.guru/lesson/services-and-networking-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Storage (quiz)](https://cloudyuga.guru/lesson/storage-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-6/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Question 1 Q1. Create a Pod init-demo with an init container init-ctr which will write a file and another container with name app-ctr which will check whether that file exists or not. Use an image of your own choice to create the init container and container. Question 2 Q2. Create a Namespace test-quota such that - [Create a Helm Chart from Scratch](https://cloudyuga.guru/lesson/create-a-helm-chart-from-scratch/) - Create a sample chart demo helm create demo cat demo/Chart.yaml Templates directory will contain manifest files in yaml format, this can be non parameterized or parameterized. If parameterized it will get corresponding values from value.yaml the file ls demo/templates Create a manifest file for deployment cat demo/templates/deployment.yaml Explore the values.yaml file cat demo/values.yaml Installing the package Here we are going to - [Helm Chart Repositories](https://cloudyuga.guru/lesson/helm-chart-repositories/) - Introduction A chart repository consists of packaged charts and a special file called index.yaml which contains an index of all of the charts in the repository. The preferred way to share a chart is by uploading them to chart repository Storing Chart in a Repository Packaging the chart In order to share a chart, the first step - [Installation](https://cloudyuga.guru/lesson/installation/) - Install Helm curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh Check the version using the following command helm version Take Quiz Complete Lesson Next Lesson Reset Lesson - [Helm Charts](https://cloudyuga.guru/lesson/helm-charts/) - Searching the Charts Go to https://artifacthub.io/ and search for package you are interested in. Searching in a repo Add repo to your helm helm repo add jenkins https://charts.jenkins.io Update repo helm repo update Search for jenkins You can find details about this chart here helm search repo jenkins Installing a new release using a chart To install a new - [Cluster Troubleshooting](https://cloudyuga.guru/lesson/cluster-troubleshooting/) - Listing your cluster The first thing to debug in your cluster is if your nodes are all registered correctly. kubectl get nodes And verify that all of the nodes you expect to see are present and that they are all in the Ready state. Get the component status kubectl get cs verify that all your - [Introduction](https://cloudyuga.guru/lesson/introduction/) - Helm helps you manage Kubernetes applications. Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application. Charts are easy to create, version, share, and publish. The latest version of Helm is maintained by the CNCF in collaboration with Microsoft, Google, Bitnami, and the Helm contributor community. The major role of the - [Cluster Maintenance](https://cloudyuga.guru/lesson/cluster-maintenance/) - Draining a Node If you need to reboot a node (such as for a kernel upgrade, libc upgrade, hardware repair, etc.), and the downtime is brief, then when the Kubelet restarts, it will attempt to restart the pods scheduled to it. If the reboot takes longer than the default --pod-eviction-timeout, then the node controller will terminate - [Kubernetes Cluster Upgrade](https://cloudyuga.guru/lesson/kubernetes-cluster-upgrade/) - A Kubernetes Release look like 1.24.7, where 1 is the major release 24 is the minor release 7 is the patch The release cycle for a minor release is every 4 months. We should regularly update our cluster to get recent fixes and be supported. Only last minor versions are officially supported. For this lab, - [Logging-Monitoring Cluster : Control Plane](https://cloudyuga.guru/lesson/logging-monitoring-cluster-control-plane/) - Cluster Debugging Display addresses of the master and services. kubectl cluster-info Dump current cluster state to stdout. kubectl cluster-info dump Dump current cluster state to /path/to/cluster-state. kubectl cluster-info dump --output-directory=/path/to/cluster-state ls /path/to/cluster-state API object List API services running. kubectl get apiservices List type of API running in the cluster. kubectl api-versions Exploring All namespaced API resources - [ConfigMaps and Secrets (quiz)](https://cloudyuga.guru/lesson/configmaps-and-secrets-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Troubleshooting (quiz)](https://cloudyuga.guru/lesson/troubleshooting-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-3/) - Question 1 Q1.Debug why the node is in a NotReady state. - This question is an example to show how the question may be asked from this section; There may be many reasons for example check if kubelet service is stopped on that node Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exrecises](https://cloudyuga.guru/lesson/exrecises/) - Question 1 Q1. Mark a node unschedulable and then make it schedulable again. Question 2 Q2. Take the back up of ETCD at /opt/baks/etcd0001/. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Cluster Maintenance (quiz)](https://cloudyuga.guru/lesson/cluster-maintenance-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Logging and Monitoring (quiz)](https://cloudyuga.guru/lesson/logging-and-monitoring-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-4/) - Question 1 Q1. Create a Pod with the name log-pod such that it continuously echoes the current time after 2 seconds. You can use any image of your choice to create the pod. Question 2 Q2. Get the logs of the pod log-pod and write it down in the file called ~/logs.txt Take Quiz Complete Lesson Next Lesson Reset Lesson - [Installation Configuration Validation (quiz)](https://cloudyuga.guru/lesson/installation-configuration-validation-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-5/) - Question 1 Q1. Create a namespace demo-sa and a Service Account demo in the new namespace. Create a Pod demo-pod using a configuration file with the following details.- name: demo-pod- namespace: demo-ns- serviceaccount: demo- image: nginx:alpine- lable: app=demo-app Take Quiz Complete Lesson Next Lesson Reset Lesson - [Scheduling (quiz)](https://cloudyuga.guru/lesson/scheduling-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Authentication and Authorization (quiz)](https://cloudyuga.guru/lesson/authentication-and-authorization-quiz/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-30/) - In this module, we learned: The Linux networking concepts About the various networking protocols About the hardware used to make the networking possible About the various different types of networks About private networks and DNS To check network status using basic networking commands Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-14/) - 1. Find and list out the ports listening currently in this lab environment. 2. What are the possible commands to check the default route and routing table? Execute them one by one. 3. Capture the network IP packets for specific port no 22 on any available network interface. 4. Check the network connectivity of this lab environment and - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-32/) - By the end of this module, you will be able to: Understand the security features of Linux systems Use AppArmor to restrict programs to a limited set of resources Utilize the Umask utility to set permissions for files/directories Manipulate Ubuntu firewall to enable/disable network traffic Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-42/) - In this module, we learned: About the security features of Linux systems To use AppArmor to confine programs to limited resources To utilize Umask to set permissions for newly created files/directories To manipulate the firewall to control the network traffic Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-26/) - 1. Create ten new files using touch command in a new directory and do the following tasks: Five files should be created using the default settings (file permissions). The other five files should be created after setting the umask value in the bashrc file such that the owner has all the permissions while the group and others have write-only permission. List all the files with details at - [Installation Demo on VM using VirtualBox](https://cloudyuga.guru/lesson/installation-demo-on-vm-using-virtualbox/) - Prepare for Installation Download the VirtualBox box from its official website as per your operating system. Install the VirtualBox software in your machine. After installation, open the VirtualBox dashboard. NOTE: VirtualBox is a software that helps us to install and run multiple operating systems (OS) inside our host operating system through the use of Virtual Machines. Disk - [Summary](https://cloudyuga.guru/lesson/summary-28/) - In this module, we learned: About the various ways to install a Linux distribution on a system To Install Ubuntu on a virtual machine To upgrade the current Linux system (Ubuntu) to the latest version Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-12/) - 1. Set up VirtualBox on your system and create two different virtual machines. You can create it with any Linux distribution. Create a manual partition on one of the VM and an automatic partition on the other. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-30/) - By the end of this module, you will be able to: Extract system and process information from the /proc filesystem Understand the various types of processes in a Linux system Create and terminate processes Distinguish between a process and a thread Monitor processes Understand the use of cgroups and namespaces in Linux Take Quiz Complete - [Installation Methods](https://cloudyuga.guru/lesson/installation-methods/) - In the chapter “Various Distributions of Linux”, we learned about many different types of Linux Distributions (or distros). In this, we will learn about various ways to install Linux. Although the installation steps of all distributions are generally the same. However, for our learning purpose, we will be installing one of the popular desktop Linux - [Upgrading Linux](https://cloudyuga.guru/lesson/upgrading-linux/) - One is able to easily upgrade their Linux installation from one version to another as it is one of the core features of every Linux distro. It gives users the benefit of getting the latest software, new security fixes, and upgraded technology. For this process, users need not reinstall and reconfigure their system. When to Upgrade? - [Summary](https://cloudyuga.guru/lesson/summary-29/) - In this module, we learned: To ustilze the /proc filesystem To create and terminate processes The differences between a process and a thread To monitor processes Why cgroups and namespaces are used Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-13/) - Create a Python script with a name process_ids.py having the following content: import os, time os.fork() os.fork() time.sleep(100) Now, run this program and find the process ID of all the processes created by this program. 2. Install the MySQL server and check its service status through systemctl.Identify its PID and terminate it. 3. Download the given gist file with a nice value set to -5. - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-31/) - By the end of this module, you will be able to: Understand the important networking concepts in Linux Understand the various networking protocols supported by Linux Run-through some of the important networking hardware Explore the different types of networks Understand private networks and the Domain Name Server Check network status using basic commands Take Quiz - [TCP/IP Model](https://cloudyuga.guru/lesson/tcp-ip-model/) - TCP/IP model stands for Transmission Control Protocol/Internet Protocol model. It is a concise model as compared to the OSI model. It is based on standard protocols and has four layers in it. The layers are Application Layer Transport Layer Internet Layer Network Access/Link Layer Application layer This layer performs the function of the upper layers of the OSI - [TCP and UDP](https://cloudyuga.guru/lesson/tcp-and-udp/) - TCP TCP stands for Transmission Control Protocol and is the most commonly used protocol. It is mostly used when the sender’s data should be received intact at the receiver’s end. It is a connection-oriented protocol which means it first establishes a connection between sender and receiver and maintains it while transmitting data. Thus, it is more - [FTP](https://cloudyuga.guru/lesson/ftp/) - FTP is File Transfer Protocol that helps in transferring files from one computer to another. It transfers data more reliably and efficiently. It works on port number 21. FTP client has three components: User Interface, Control Process, and Data Transfer process, while the server has control process and data transfer process. Control connection in client and - [SMTP](https://cloudyuga.guru/lesson/smtp/) - SMTP is a Simple Mail Transfer Protocol that is used to send emails. POP (Post Office Protocol) or IMAP (Internet Message Access Protocol) are used to retrieve those emails at the receiver’s side. It works on port number 25. Take Quiz Complete Lesson Next Lesson Reset Lesson - [BGP](https://cloudyuga.guru/lesson/bgp/) - BGP is Border Gateway Protocol, also known as the gateway protocol. It enables to exchange routing information between networks to interact with each other. This is possible through peering. Without this network would not be able to communicate with each other. Take Quiz Complete Lesson Next Lesson Reset Lesson - [DHCP](https://cloudyuga.guru/lesson/dhcp/) - DHCP is Dynamic Host Configuration Protocol. It assigns IP addresses to machines dynamically within a network when requested. It is a network management protocol where DHCP client requests for IP address which is then made to DHCP server. The DHCP server assigns an IP address along with other parameters such as Default gateway, subnet mask, and - [Summary](https://cloudyuga.guru/lesson/summary-15/) - In this module, we learned: About the various components involved during the Linux boot process About the different stages in which a Linux system boots up Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-17/) - By the end of this module, you will be able to: Understand how systemd handles services in Linux Manipulate service states using systemctl command Create a custom service using systemctl command Check service logs using journalctl command Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-24/) - Take Quiz Complete Lesson Next Lesson Reset Lesson In this module, we learned: About systemd and how it handles services in Linux To manipulate service states using the systemctl command To create custom services using the systemctl command To check the service logs using the journalctl command - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-8/) - 1. Create one python program and start it as a systemd service with the systemctl utility. Also, ensure that the service is in an active state. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-26/) - By the end of this module, you will be able to: Learn about the different package managers for the various distributions of Linux Manage software packages in Ubuntu Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-25/) - In this module, we learned: About the different package managers for the various distributions of Linux To manage packages in an Ubuntu system Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-9/) - 1. Update and upgrade all currently installed applications. Install the pip package for python and note down the version of the package installed. Remove the application after completing the previous step. 2. Use the dpkg tool to create a custom .deb (Debian) package and install it on the system. Hint: Use this as a reference. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-27/) - By the end of this module, you will be able to: Understand the Linux filesystem Understand the Virtual File System and various physical filesystems Linux Supports Partition and format disk Check the current status of the disk Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-26/) - In this module, we learned: About the Linux filesystem About Linux support for the various physical filesystems and VFS To partition and format the disk To check the current status of the disk Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-10/) - 1. List and mount the unused partition in the system and then make an entry in the fstab file. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-28/) - By the end of this module, you will be able to: Manage user accounts Create a new user account Create and manage a new group Give a user super user permissions Change file ownership and permissions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-27/) - In this module, we learned: To create and manage new user accounts To manage groups To give super user access to a new account Changing file ownership and permissions Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-11/) - 1. Create a new user. Give the user account a new password. Add the user to the sudoers file and install the git package using the user account. 2. Create a user tester, a group frontend, and add a tester user to the frontend group. Also, verify it. 3. Create two users, user1 and user2. Create a file with name setup.sh in the root’s home directory containing the line echo - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-29/) - By the end of this module, you will be able to: Understand the various ways to install a Linux distribution on a system Install a Linux distribution (Ubuntu) on a virtual machine (VirtualBox) Upgrade the current system (Ubuntu) to the latest version Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-12/) - In this module, we learned: About Linux and its features About the different Linux distributions we can use About shell and bash in Linux About Kernel, Kernel and User Space, and the FileSystem Hierarchy Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment/) - 1. Create a simple python program with the following code snippet # Python3 program to add two numbers num1 = 5 num2 = 10 # Adding two numbers sum = num1 + num2 # printing values print("Sum of {0} and {1} is {2}" .format(num1, num2, sum)) Trace and count the number of system calls with strace that - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-14/) - By the end of this module, you will be able to: Use the Vim editor in different modes to edit and view text files Utilize Tmux application for multitasking Take Quiz Complete Lesson Next Lesson Reset Lesson - [Summary](https://cloudyuga.guru/lesson/summary-13/) - In this module, we learned: To view and edit files using the Vim editor To multitask using the Tmux application Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-15/) - By the end of this module, you will be able to: Manipulate with files and directories Set and use environment variables Check system memory status Manipulate text in various streams Take Quiz Complete Lesson Next Lesson Reset Lesson - [Linux Operating System](https://cloudyuga.guru/lesson/linux-operating-system/) - What is Linux? Linux is an Open Sourced Operating System (OS) based on the Linux Kernel, first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution. Read More. It is one of the most popular Operating Systems (OS) on the planet. Android is powered by the Linux OS. Debian, Fedora Linux, CentOS, and - [Summary](https://cloudyuga.guru/lesson/summary-14/) - In this module, we learned: To manipulate files and directories To utilize and set environment variables How to check system memory status To manipulate text in various streams Take Quiz Complete Lesson Next Lesson Reset Lesson - [Module Assignment](https://cloudyuga.guru/lesson/module-assignment-2/) - 1. Create six empty files with the touch command with name 1.txt , 2.txt , 3.txt and so on. In any three files, add the line crazy brown fox jumped over a lazy rock with vim and do the following tasks: Use grep command to look for the crazy brown fox pattern within the text files in the current directory. Use awk command to process the output of the grep command and extract the - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-16/) - By the end of this module, you will be able to: Learn about the different components involved in Linux boot process Understand the different phases involved in the Linux boot process Take Quiz Complete Lesson Next Lesson Reset Lesson - [Course Introduction](https://cloudyuga.guru/lesson/course-introduction/) - This course is designed for the absolute beginner in Linux. In this course, we'll start by covering the basics of operating systems and then dig deep into the world of Linux. We'll cover User and Kernel space interaction, Boot process, installation, upgrade, package management, file systems, networking, etc. After this course, you will have a good understanding - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-12/) - By the end of this module, you will be able to: Distinguish between the different operating systems in the market Understand the various ways we can access and use an operating system Understand the differences between an OS on a bare metal machine, containers, or a virtual machine Take Quiz Complete Lesson Next Lesson Reset - [Mac Operating System](https://cloudyuga.guru/lesson/mac-operating-system/) - What is macOS? The Macintosh Operating System (macOS) is an operating system designed and developed by Apple Inc. specifically for the Apple Macintosh series of computers. It is a proprietary graphical operating system. The best feature of the macOS is that it is designed specifically for the hardware it runs on and comes with an entire suite of - [Windows Operating System](https://cloudyuga.guru/lesson/windows-operating-system/) - What is Windows OS? Microsoft Windows is a graphical operating system designed and developed by Microsoft. It is one of the most popular Operating Systems among general users due to its ease of use. It provides a simple interface to store files, photos, audio, and videos and gives an easy way to install and run applications. It was first - [Summary](https://cloudyuga.guru/lesson/summary-11/) - In this module, we learned: About the different types of operating systems on offer in the market The different ways to access and use an operating system About the differences between a bare metal, a containerized, and a virtual machine Take Quiz Complete Lesson Next Lesson Reset Lesson - [Learning Objectives](https://cloudyuga.guru/lesson/learning-objectives-13/) - By the end of this module, you will be able to: Tell why Linux is so widely used in the industry Distinguish between the different distributions of Linux Understand shell and bash in Linux Understand the Kernel, Kernel and User Space and the FileSystem Hierarchy Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-13/) - Question 1 Q1. Create a Secret with the name mysecret using a configuration file, which consists of the following data.- USERNAME: cloudyuga- PASSWORD: CloudyugaCKA Question 2 Q2. Create a Pod with the name mysecretpod which will be consuming the secret mysecret as an environment variable. Environment variables TOPSECRETUSERNAME & TOPSECRETPASSWORD will have the values of USERNAME and PASSWORD respectively. You can use any - [Exercises](https://cloudyuga.guru/lesson/exercises-12/) - Question 1 Q1. Create a Pod init-demo with an init container init-ctr which will write a file and another container with name app-ctr which will check whether that file exists or not. Use an image of your own choice to create the init container and container. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exercises](https://cloudyuga.guru/lesson/exercises-14/) - Deploy this application kubectl apply -f rsvp.yaml Check MongoDB ReplicaSet High Availability Get the list of Pods kubectl get pod Delete one of the pods kubectl delete po mongo-0 Get the list of Pods kubectl get pods Cleanup Delete RSVP application kubectl delete -f rsvp.yaml Delete MongoDB statefulSet kubectl delete -f mongo-stateful.yaml Take Quiz Complete - [Exercises](https://cloudyuga.guru/lesson/exercises-16/) - Question 1 Q1. Create a Deployment with the name deploy-app and create a service svc-app for that deployment. Deploy Ingress controller and create Ingress resource app-ing such that app.example.com resolve to service svc-app.- name of Deployment: deploy-app- image: nginx:alpine- labels: app=nginx-deploy- replicas: 3- name of Service: svc-app- name of ingress object: app-ing Question 2 Q2. Create a Deployment with the name nginx-deploy using a configuration file. - [Exercises](https://cloudyuga.guru/lesson/exercises-18/) - Question 1 Q1. Create a Multi-container Pod with the name multi-c-pod, which has containers from the following images:- image1 : nginx:alpine- image2 : redis- image3 : memcached You can have container names, as per your choice. Question 2 Q2. Create a Namespace with name mynamespace using a YAML configuration file. Create a Pod in this namespace with the - [Exercises](https://cloudyuga.guru/lesson/exercises-17/) - Question 1 Q1. Create a simple job that will write “Hello world” 50 times with 5 parallelisms. Question 2 Q2. Create a Deployment using a configuration file - image : nginx:alpine - name : nginx-deploy - label : app=web - replicas : 3 Question 3 Q3. Scale the Deployment nginx-deploy created in the above question to 5 replicas. Question 4 Q4. - [Author's Introduction](https://cloudyuga.guru/lesson/authors-introduction-3/) - If you would like to know more Title: Neependra_intro.pdfOpen in a new tab Take Quiz Complete Lesson Next Lesson Reset Lesson - [Download the supporting files](https://cloudyuga.guru/lesson/download-the-supporting-files-2/) - Install git on your system. Clone the below GitHub repository to access the course content required files, follow the below steps. Take Quiz Complete Lesson Next Lesson Reset Lesson # clone the repository git clone https://github.com/cloudyuga/k8s-courses.git # list the branches git branch # switch to the ckad course branch git checkout ckad GitHub Repository URL : CloudYuga Kubernetes - [Health Checks - Startup Probes](https://cloudyuga.guru/lesson/health-checks-startup-probes-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Lab Setup Details](https://cloudyuga.guru/lesson/lab-setup-details-2/) - Following are the ways to create a Kubernetes cluster locally. Kubernetes Cluster with Docker Desktop Docker Desktop includes a standalone Kubernetes server and client and Docker CLI integration that runs on your machine. The Kubernetes server runs locally within your Docker instance, is not configurable, and is a single-node cluster. It runs within a Docker container - [YAML Tips and Tricks](https://cloudyuga.guru/lesson/yaml-tips-and-tricks-3/) - [Storage (quiz)](https://cloudyuga.guru/lesson/storage-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [ConfigMaps and Secrets (quiz)](https://cloudyuga.guru/lesson/configmaps-and-secrets-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/lesson/application-lifecycle-management-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Services and Networking (quiz)](https://cloudyuga.guru/lesson/services-and-networking-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Core Conectps (quiz)](https://cloudyuga.guru/lesson/core-conectps-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Application Troubleshooting](https://cloudyuga.guru/lesson/application-troubleshooting-2/) - Application troubleshooting helps developers to debug applications that are deployed into Kubernetes and not behaving correctly. Application Troubleshooting can be carried in the following ways. Debugging Pods. Debugging Replication Controller. Debugging Services Debugging Pods Check the current state of the Pod and recent events with the following command: kubectl describe pods ${POD_NAME} The pod is - [Logging and Monitoring (quiz)](https://cloudyuga.guru/lesson/logging-and-monitoring-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Troubleshooting (quiz)](https://cloudyuga.guru/lesson/troubleshooting-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Authentication and Authorization (quiz)](https://cloudyuga.guru/lesson/authentication-and-authorization-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Scheduling (quiz)](https://cloudyuga.guru/lesson/scheduling-quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz](https://cloudyuga.guru/lesson/quiz-2/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [Quiz](https://cloudyuga.guru/lesson/quiz-3/) - Take Quiz Complete Lesson Next Lesson Reset Lesson - [What are containers?](https://cloudyuga.guru/lesson/what-are-containers/) - Video progress: 0% What is CNCF? Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Why Containers?](https://cloudyuga.guru/lesson/why-containers/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Containers Workflow In Real World](https://cloudyuga.guru/lesson/containers-workflow-in-real-world/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! - [Building Images Using Dockerfiles](https://cloudyuga.guru/lesson/building-images-using-dockerfiles/) - Let us create a Dockerfile to mimic the steps we have done in the earlier section vim Dockerfile FROM python:3.8.2-alpine RUN date > file1 RUN date > file2 Let us now build the image from the docker image build -t myimage:dockerfile . To create the container from the image we built, run the following command - [Final Exam](https://cloudyuga.guru/lesson/final-exam/) - Thank you for finishing the course. To earn the Certificate of Completion, pleasecomplete this quiz. You need to score 85% or above to pass the exam. Take Quiz Complete Lesson Next Lesson Reset Lesson - [Exposing Containers For Public Access](https://cloudyuga.guru/lesson/exposing-containers-for-public-access/) - Run the following command to export the nginx container on port 9000 of the host system docker container run -d --name web1 -p 9000:80 nginx:alpine We can also map the containers to the port 80 of the host system docker container run -d --name web2 -p 80:80 nginx:alpine docker container ls If you click on app-port-80 URL which is in the Lab - [Docker Networking Basics](https://cloudyuga.guru/lesson/docker-networking-basics/) - Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! - [Pushing Images To DockerHub](https://cloudyuga.guru/lesson/pushing-images-to-dockerhub/) - To push the image to the DockerHub, we need to first log in to DockerHub docker login Please provide your respective username and password of DockerHub. If you don't have an account then create one by going to https://hub.docker.com Once logged in let us try to push the image to the DockerHub docker image push myimage:cmd - [Creating An Image From A Container](https://cloudyuga.guru/lesson/creating-an-image-from-a-container/) - Let us run a container from the same alpine image which we used earlier as well docker container run -it --name myalpine alpine sh To create an image from a running container run the following command docker container commit myalpine myimage docker image ls Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Take - [Docker Desktop](https://cloudyuga.guru/lesson/docker-desktop/) - Chapter Quiz Please rewatch the video and Try Again!!! Please rewatch the video and Try Again!!! Take Quiz Complete Lesson Next Lesson Reset Lesson - [Image Inspection](https://cloudyuga.guru/lesson/image-inspection/) - To find out more info about the image, we can inspect it docker image inspect nginx:latest Take Quiz Complete Lesson Next Lesson Reset Lesson Chapter Quiz Please rewatch the video and Try Again!!! ## Quizzes - [Knowledge Check](https://cloudyuga.guru/quiz/knowledge-check-5/) - [Knowledge Check](https://cloudyuga.guru/quiz/knowledge-check-4/) - [Knowledge Check](https://cloudyuga.guru/quiz/knowledge-check-3/) - [Knowledge Check](https://cloudyuga.guru/quiz/knowledge-check-2/) - [Knowledge Check](https://cloudyuga.guru/quiz/knowledge-check/) - [Docker image analysis tools](https://cloudyuga.guru/quiz/docker-image-analysis-tools-quiz/) - [Docker APIs(Quiz)](https://cloudyuga.guru/quiz/docker-apisquiz/) - [Deploy Different Applications with Docker(Quiz)](https://cloudyuga.guru/quiz/deploy-different-applications-with-dockerquiz/) - [Docker Best Practices(Quiz)](https://cloudyuga.guru/quiz/docker-best-practicesquiz/) - [Git Common Commands (quiz)](https://cloudyuga.guru/quiz/git-common-commands-quiz/) - [Installation and Setting Up (quiz)](https://cloudyuga.guru/quiz/installation-and-setting-up-quiz/) - [Introduction to Git and GitHub (quiz)](https://cloudyuga.guru/quiz/introduction-to-git-and-github-quiz/) - [Git Lifecycle (quiz)](https://cloudyuga.guru/quiz/git-lifecycle-quiz/) - [Introduction to Version Control Systems (VCS) (quiz)](https://cloudyuga.guru/quiz/introduction-to-version-control-systems-vcs-quiz/) - [Working with Git Branches (quiz)](https://cloudyuga.guru/quiz/working-with-git-branches-quiz/) - [Working with Remote Repositories (quiz)](https://cloudyuga.guru/quiz/working-with-remote-repositories-quiz/) - [Git and GitHub Advanced Concepts (quiz)](https://cloudyuga.guru/quiz/git-and-github-advanced-concepts-quiz/) - [System Security Quiz](https://cloudyuga.guru/quiz/system-security-quiz/) - [Networking Quiz](https://cloudyuga.guru/quiz/networking-quiz/) - [Linux Processes Quiz](https://cloudyuga.guru/quiz/processes-quiz/) - [Installation and Upgrade Quiz](https://cloudyuga.guru/quiz/installation-and-upgrade-quiz/) - [Users, Groups and Permission Management Quiz](https://cloudyuga.guru/quiz/user-permissions-and-management-quiz-quiz/) - [Linux Filesystem Quiz](https://cloudyuga.guru/quiz/linux-filesystem-quiz-quiz/) - [Package Management Quiz](https://cloudyuga.guru/quiz/package-management-quiz-quiz/) - [Managing Linux Service Quiz](https://cloudyuga.guru/quiz/managing-linux-service-quiz-quiz/) - [Linux System Startup Quiz](https://cloudyuga.guru/quiz/linux-system-startup-quiz-quiz/) - [Linux Commands Quiz](https://cloudyuga.guru/quiz/linux-commands-quiz-quiz/) - [Text Editors and Tmux Quiz](https://cloudyuga.guru/quiz/text-editors-and-tmux-quiz-quiz/) - [Introduction to Linux Quiz](https://cloudyuga.guru/quiz/introduction-to-linux-quiz-quiz/) - [Operating System Overview Quiz](https://cloudyuga.guru/quiz/operating-system-overview-quiz-quiz/) - [Resource Consumption Monitoring](https://cloudyuga.guru/quiz/resource-consumption-monitoring-2/) - [Logging-Monitoring Applications : MultiContainer Logs](https://cloudyuga.guru/quiz/logging-monitoring-applications-multicontainer-logs/) - [Logging-Monitoring Applications : Single Container Logs](https://cloudyuga.guru/quiz/logging-monitoring-applications-single-container-logs/) - [Authorization (RBAC)](https://cloudyuga.guru/quiz/authorization-rbac-3/) - [Creating Roles and RoleBinding using RBAC](https://cloudyuga.guru/quiz/creating-roles-and-rolebinding-using-rbac-4/) - [Service Accounts](https://cloudyuga.guru/quiz/service-accounts-5/) - [User Authentication using x-509 certificate (Public/Private Key Encryption)](https://cloudyuga.guru/quiz/user-authentication-using-x-509-certificate-public-private-key-encryption-3/) - [Authentication](https://cloudyuga.guru/quiz/authentication-4/) - [ImagePullSecret](https://cloudyuga.guru/quiz/imagepullsecret-3/) - [Using Secrets as Volumes](https://cloudyuga.guru/quiz/using-secrets-as-volumes-3/) - [Using Secrets as Environment Variables](https://cloudyuga.guru/quiz/using-secrets-as-environment-variables-3/) - [Secrets](https://cloudyuga.guru/quiz/secrets-3/) - [ConfigMaps as Volumes](https://cloudyuga.guru/quiz/configmaps-as-volumes-3/) - [ConfigMaps as Environment Variables](https://cloudyuga.guru/quiz/configmaps-as-environment-variables-3/) - [ConfigMaps](https://cloudyuga.guru/quiz/configmaps-3/) - [StatefulSets](https://cloudyuga.guru/quiz/statefulsets-4/) - [Dynamic Volume Provisioning](https://cloudyuga.guru/quiz/dynamic-volume-provisioning-4/) - [Static Volume Management](https://cloudyuga.guru/quiz/static-volume-management-4/) - [Introduction](https://cloudyuga.guru/quiz/introduction-3/) - [Nodeselector](https://cloudyuga.guru/quiz/nodeselector-4/) - [DaemonSets](https://cloudyuga.guru/quiz/daemonsets-4/) - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/quiz/setting-up-resource-quota-for-a-namespace-4/) - [Setting up defaults using LimitRange](https://cloudyuga.guru/quiz/setting-up-defaults-using-limitrange-4/) - [Requests and Limits](https://cloudyuga.guru/quiz/requests-and-limits-4/) - [Managing Resources in Kubernetes](https://cloudyuga.guru/quiz/managing-resources-in-kubernetes-4/) - [Network Policies - Ingress Policies](https://cloudyuga.guru/quiz/network-policies-ingress-policies-4/) - [Network Policies - Egress Policies](https://cloudyuga.guru/quiz/network-policies-egress-policies-4/) - [Network Policies](https://cloudyuga.guru/quiz/network-policies-3/) - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/quiz/configure-virtual-host-based-ingress-routing-4/) - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/quiz/configure-path-based-fan-out-ingress-routing-4/) - [Ingress - Deploy Applications](https://cloudyuga.guru/quiz/ingress-deploy-applications-4/) - [Introduction to Ingress](https://cloudyuga.guru/quiz/introduction-to-ingress-4/) - [External Name Service Type](https://cloudyuga.guru/quiz/external-name-service-type-4/) - [Headless Services](https://cloudyuga.guru/quiz/headless-services-4/) - [NodePort Service Type](https://cloudyuga.guru/quiz/nodeport-service-type-2-2/) - [Services without Selectors](https://cloudyuga.guru/quiz/services-without-selectors-4/) - [LoadBalancer Service Type](https://cloudyuga.guru/quiz/loadbalancer-service-type-2-2/) - [Kubernetes Services](https://cloudyuga.guru/quiz/kubernetes-services-2-2/) - [ClusterIP Service Type](https://cloudyuga.guru/quiz/clusterip-service-type-2-2/) - [Parallel Jobs](https://cloudyuga.guru/quiz/parallel-jobs-2-2/) - [Cron Jobs](https://cloudyuga.guru/quiz/cron-jobs-2-2/) - [Batch Operations with Job](https://cloudyuga.guru/quiz/batch-operations-with-job-2-2/) - [Health Checks - Liveness Probes](https://cloudyuga.guru/quiz/health-checks-liveness-probes-2-2/) - [Field Selectors](https://cloudyuga.guru/quiz/field-selectors-2-2/) - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/quiz/labels-and-annotations-for-deployment-object-2-2/) - [Annotations](https://cloudyuga.guru/quiz/annotations-2-2/) - [Labels and Selectors](https://cloudyuga.guru/quiz/labels-and-selectors-2-2/) - [Deployment Strategy - Recreate](https://cloudyuga.guru/quiz/deployment-startegy-recreate-2-2/) - [Deployment Strategy - Rolling Update](https://cloudyuga.guru/quiz/deployment-startegy-rolling-update-5/) - [Scaling the Deployments](https://cloudyuga.guru/quiz/scaling-the-deployments-6/) - [Deployment](https://cloudyuga.guru/quiz/deployment-6/) - [Replicaset](https://cloudyuga.guru/quiz/replicaset/) - [Namespaces](https://cloudyuga.guru/quiz/namespaces-6/) - [Pods](https://cloudyuga.guru/quiz/pods-2/) - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/quiz/kubernetes-api-primitves-and-object-model-5/) - [Kubernetes Networking Overview](https://cloudyuga.guru/quiz/kubernetes-networking-overview-5/) - [Kubernetes Architecture](https://cloudyuga.guru/quiz/kubernetes-architecture-5/) - [Kubernetes Introduction](https://cloudyuga.guru/quiz/kubernetes-introduction-5/) - [Multi-Container Pods](https://cloudyuga.guru/quiz/multi-container-pods-6/) - [Accesssing Kubernetes](https://cloudyuga.guru/quiz/accesssing-kubernetes-4/) - [Health Checks - Readiness Probes](https://cloudyuga.guru/quiz/health-checks-readiness-probes-2-2/) - [Docker Compose (Quiz)](https://cloudyuga.guru/quiz/docker-compose-quiz/) - [Docker Logging (Quiz)](https://cloudyuga.guru/quiz/docker-logging-quiz/) - [Storage Management with Docker (Quiz)](https://cloudyuga.guru/quiz/storage-management-with-docker-quiz/) - [Network Management with Docker (Quiz)](https://cloudyuga.guru/quiz/network-management-with-docker-quiz/) - [Working with Container Images using Docker (Quiz)](https://cloudyuga.guru/quiz/working-with-container-images-using-docker-quiz/) - [Getting Started with Docker (Quiz)](https://cloudyuga.guru/quiz/getting-started-with-docker-quiz/) - [Working with Containers using Docker (Quiz)](https://cloudyuga.guru/quiz/working-with-containers-using-docker-quiz/) - [Introduction to Containers (Quiz)](https://cloudyuga.guru/quiz/introduction-to-containersquiz/) - [YAML Tips and Tricks](https://cloudyuga.guru/quiz/yaml-tips-and-tricks-2/) - [Core Concepts (quiz)](https://cloudyuga.guru/quiz/core-concepts-quiz/) - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/quiz/application-lifecycle-management-quiz-4-2/) - [Services and Networking (quiz)](https://cloudyuga.guru/quiz/services-and-networking-quiz-4-2/) - [Deployment Strategy - Recreate](https://cloudyuga.guru/quiz/deployment-startegy-recreate-2/) - [Deployment Strategy - Rolling Update](https://cloudyuga.guru/quiz/deployment-startegy-rolling-update-3-2/) - [Core Concepts (quiz)](https://cloudyuga.guru/quiz/core-conectps-quiz-3-2/) - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/quiz/application-lifecycle-management-quiz-3-2/) - [Services and Networking (quiz)](https://cloudyuga.guru/quiz/services-and-networking-quiz-3-2/) - [LoadBalancer Service Type](https://cloudyuga.guru/quiz/loadbalancer-service-type-2/) - [NodePort Service Type](https://cloudyuga.guru/quiz/nodeport-service-type-2/) - [ClusterIP Service Type](https://cloudyuga.guru/quiz/clusterip-service-type-2/) - [Kubernetes Services](https://cloudyuga.guru/quiz/kubernetes-services/) - [Field Selectors](https://cloudyuga.guru/quiz/field-selectors-2/) - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/quiz/labels-and-annotations-for-deployment-object-2/) - [Annotations](https://cloudyuga.guru/quiz/annotations-2/) - [Labels and Selectors](https://cloudyuga.guru/quiz/labels-and-selectors-2/) - [Scaling the Deployments](https://cloudyuga.guru/quiz/scaling-the-deployments-3-2/) - [Deployment](https://cloudyuga.guru/quiz/deployment-3-2/) - [Replicaset](https://cloudyuga.guru/quiz/replicaset-3-2/) - [Namespaces](https://cloudyuga.guru/quiz/namespaces-3-2/) - [Multi-Container Pods](https://cloudyuga.guru/quiz/multi-container-pods-3-2/) - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/quiz/kubernetes-api-primitves-and-object-model-3-2/) - [Kubernetes Networking Overview](https://cloudyuga.guru/quiz/kubernetes-networking-overview-3-2/) - [Accesssing Kubernetes](https://cloudyuga.guru/quiz/accesssing-kubernetes-3-2/) - [Kubernetes Architecture](https://cloudyuga.guru/quiz/kubernetes-architecture-3-2/) - [Kubernetes Introduction](https://cloudyuga.guru/quiz/kubernetes-introduction-3-2/) - [Pods](https://cloudyuga.guru/quiz/pods-3-2/) - [Quiz](https://cloudyuga.guru/quiz/quiz/) - [Docker Volumes](https://cloudyuga.guru/quiz/docker-volumes/) - [Course Introduction](https://cloudyuga.guru/quiz/course-introduction-4/) - [Author's Introduction](https://cloudyuga.guru/quiz/authors-introduction-4/) - [Exercises](https://cloudyuga.guru/quiz/exercises-16/) - [Exercises](https://cloudyuga.guru/quiz/exercises-17/) - [Exercises](https://cloudyuga.guru/quiz/exercises-18/) - [Lab Setup Details](https://cloudyuga.guru/quiz/lab-setup-details-4/) - [Exercises](https://cloudyuga.guru/quiz/exercises-20/) - [Exercises](https://cloudyuga.guru/quiz/exercises-21/) - [Health Checks - Startup Probes](https://cloudyuga.guru/quiz/health-checks-startup-probes-4/) - [Application Troubleshooting](https://cloudyuga.guru/quiz/application-troubleshooting-2/) - [Core Conectps (quiz)](https://cloudyuga.guru/quiz/core-conectps-quiz-4/) - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/quiz/application-lifecycle-management-quiz-4/) - [Services and Networking (quiz)](https://cloudyuga.guru/quiz/services-and-networking-quiz-4/) - [Storage (quiz)](https://cloudyuga.guru/quiz/storage-quiz-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-19/) - [ConfigMaps and Secrets (quiz)](https://cloudyuga.guru/quiz/configmaps-and-secrets-quiz-2/) - [Scheduling (quiz)](https://cloudyuga.guru/quiz/scheduling-quiz-4/) - [Authentication and Authorization (quiz)](https://cloudyuga.guru/quiz/authentication-and-authorization-quiz-2/) - [Logging and Monitoring (quiz)](https://cloudyuga.guru/quiz/logging-and-monitoring-quiz-2/) - [Troubleshooting (quiz)](https://cloudyuga.guru/quiz/troubleshooting-quiz-2/) - [Docker 101 Final Assessment(Quiz)](https://cloudyuga.guru/quiz/docker-101-final-assessmentquiz/) - [Lab Setup Details](https://cloudyuga.guru/quiz/lab-setup-details-3-2/) - [Course Introduction](https://cloudyuga.guru/quiz/course-introduction-2/) - [Author's Introduction](https://cloudyuga.guru/quiz/authors-introduction-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-6/) - [Batch Operations with Job](https://cloudyuga.guru/quiz/batch-operations-with-job/) - [Parallel Jobs](https://cloudyuga.guru/quiz/parallel-jobs-2/) - [Cron Jobs](https://cloudyuga.guru/quiz/cron-jobs-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-7/) - [Health Checks - Liveness Probes](https://cloudyuga.guru/quiz/health-checks-liveness-probes-2/) - [Health Checks - Readiness Probes](https://cloudyuga.guru/quiz/health-checks-readiness-probes-2/) - [Health Checks - Startup Probes](https://cloudyuga.guru/quiz/health-checks-startup-probes-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-8/) - [Adapter](https://cloudyuga.guru/quiz/adapter-2/) - [Init Containers](https://cloudyuga.guru/quiz/init-containers-2/) - [Sidecar](https://cloudyuga.guru/quiz/sidecar-2/) - [Ambassador](https://cloudyuga.guru/quiz/ambassador-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-22/) - [Service Accounts](https://cloudyuga.guru/quiz/service-accounts/) - [Init Containers](https://cloudyuga.guru/quiz/init-containers/) - [Sidecar](https://cloudyuga.guru/quiz/sidecar/) - [Ambassador](https://cloudyuga.guru/quiz/ambassador/) - [Adapter](https://cloudyuga.guru/quiz/adapter/) - [Exercises](https://cloudyuga.guru/quiz/exercises-15/) - [Single Container Logs](https://cloudyuga.guru/quiz/single-container-logs/) - [MultiContainer Logs](https://cloudyuga.guru/quiz/multicontainer-logs/) - [Logging and Monitoring (quiz)](https://cloudyuga.guru/quiz/logging-and-monitoring-quiz/) - [Resource Consumption Monitoring](https://cloudyuga.guru/quiz/resource-consumption-monitoring/) - [Troubleshooting (quiz)](https://cloudyuga.guru/quiz/troubleshooting-quiz/) - [YAML Tips and Tricks](https://cloudyuga.guru/quiz/yaml-tips-and-tricks/) - [Application Troubleshooting](https://cloudyuga.guru/quiz/application-troubleshooting/) - [ConfigMaps and Secrets (quiz)](https://cloudyuga.guru/quiz/configmaps-and-secrets-quiz/) - [ConfigMaps](https://cloudyuga.guru/quiz/configmaps/) - [ConfigMaps as Environment Variables](https://cloudyuga.guru/quiz/configmaps-as-environment-variables/) - [ConfigMaps as Volumes](https://cloudyuga.guru/quiz/configmaps-as-volumes/) - [Secrets](https://cloudyuga.guru/quiz/secrets/) - [Using Secrets as Environment Variables](https://cloudyuga.guru/quiz/using-secrets-as-environment-variables/) - [Using Secrets as Volumes](https://cloudyuga.guru/quiz/using-secrets-as-volumes/) - [ImagePullSecret](https://cloudyuga.guru/quiz/imagepullsecret/) - [Exercises](https://cloudyuga.guru/quiz/exercises-14/) - [Authentication and Authorization (quiz)](https://cloudyuga.guru/quiz/authentication-and-authorization-quiz/) - [Authentication](https://cloudyuga.guru/quiz/authentication/) - [User Authentication using x-509 certificate (Public/Private Key Encryption)](https://cloudyuga.guru/quiz/user-authentication-using-x-509-certificate-public-private-key-encryption/) - [Authorization (RBAC)](https://cloudyuga.guru/quiz/authorization-rbac/) - [Creating Roles and RoleBinding using RBAC](https://cloudyuga.guru/quiz/creating-roles-and-rolebinding-using-rbac/) - [Network Policies - Egress Policies](https://cloudyuga.guru/quiz/network-policies-egress-policies-3/) - [Managing Resources in Kubernetes](https://cloudyuga.guru/quiz/managing-resources-in-kubernetes-3/) - [Requests and Limits](https://cloudyuga.guru/quiz/requests-and-limits-3/) - [Setting up defaults using LimitRange](https://cloudyuga.guru/quiz/setting-up-defaults-using-limitrange-3/) - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/quiz/setting-up-resource-quota-for-a-namespace-3/) - [DaemonSets](https://cloudyuga.guru/quiz/daemonsets-3/) - [Nodeselector](https://cloudyuga.guru/quiz/nodeselector-3/) - [Storage (quiz)](https://cloudyuga.guru/quiz/storage-quiz/) - [Exercises](https://cloudyuga.guru/quiz/exercises-12/) - [Introduction](https://cloudyuga.guru/quiz/introduction/) - [Static Volume Management](https://cloudyuga.guru/quiz/static-volume-management/) - [Dynamic Volume Provisioning](https://cloudyuga.guru/quiz/dynamic-volume-provisioning/) - [StatefulSets](https://cloudyuga.guru/quiz/statefulsets/) - [Exercises](https://cloudyuga.guru/quiz/exercises-13/) - [Health Checks - Readiness Probes](https://cloudyuga.guru/quiz/health-checks-readiness-probes-3/) - [Health Checks - Startup Probes](https://cloudyuga.guru/quiz/health-checks-startup-probes-3/) - [Batch Operations with Job](https://cloudyuga.guru/quiz/batch-operations-with-job-2/) - [Parallel Jobs](https://cloudyuga.guru/quiz/parallel-jobs-3/) - [Cron Jobs](https://cloudyuga.guru/quiz/cron-jobs-3/) - [Exercises](https://cloudyuga.guru/quiz/exercises-10/) - [ClusterIP Service Type](https://cloudyuga.guru/quiz/clusterip-service-type-3/) - [Kubernetes Services](https://cloudyuga.guru/quiz/kubernetes-services-2/) - [NodePort Service Type](https://cloudyuga.guru/quiz/nodeport-service-type-3/) - [LoadBalancer Service Type](https://cloudyuga.guru/quiz/loadbalancer-service-type-3/) - [Exercises](https://cloudyuga.guru/quiz/exercises-11/) - [Services without Selectors](https://cloudyuga.guru/quiz/services-without-selectors-3/) - [Headless Services](https://cloudyuga.guru/quiz/headless-services-3/) - [External Name Service Type](https://cloudyuga.guru/quiz/external-name-service-type-3/) - [Ingress - Deploy Applications](https://cloudyuga.guru/quiz/ingress-deploy-applications-3/) - [Introduction to Ingress](https://cloudyuga.guru/quiz/introduction-to-ingress/) - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/quiz/configure-path-based-fan-out-ingress-routing-3/) - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/quiz/configure-virtual-host-based-ingress-routing-3/) - [Network Policies](https://cloudyuga.guru/quiz/network-policies/) - [Network Policies - Ingress Policies](https://cloudyuga.guru/quiz/network-policies-ingress-policies-3/) - [Kubernetes Introduction](https://cloudyuga.guru/quiz/kubernetes-introduction-3/) - [Kubernetes Architecture](https://cloudyuga.guru/quiz/kubernetes-architecture-3/) - [Accesssing Kubernetes](https://cloudyuga.guru/quiz/accesssing-kubernetes-3/) - [Kubernetes Networking Overview](https://cloudyuga.guru/quiz/kubernetes-networking-overview-3/) - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/quiz/kubernetes-api-primitves-and-object-model-3/) - [Pods](https://cloudyuga.guru/quiz/pods-3/) - [Multi-Container Pods](https://cloudyuga.guru/quiz/multi-container-pods-3/) - [Namespaces](https://cloudyuga.guru/quiz/namespaces-3/) - [Exercises](https://cloudyuga.guru/quiz/exercises-9/) - [Replicaset](https://cloudyuga.guru/quiz/replicaset-2/) - [Deployment](https://cloudyuga.guru/quiz/deployment-3/) - [Scaling the Deployments](https://cloudyuga.guru/quiz/scaling-the-deployments-3/) - [Deployment Startegy - Rolling Update](https://cloudyuga.guru/quiz/deployment-startegy-rolling-update-3/) - [Deployment Startegy - Recreate](https://cloudyuga.guru/quiz/deployment-startegy-recreate-3/) - [Labels and Selectors](https://cloudyuga.guru/quiz/labels-and-selectors-3/) - [Annotations](https://cloudyuga.guru/quiz/annotations-3/) - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/quiz/labels-and-annotations-for-deployment-object-3/) - [Field Selectors](https://cloudyuga.guru/quiz/field-selectors-3/) - [Health Checks - Liveness Probes](https://cloudyuga.guru/quiz/health-checks-liveness-probes-3/) - [Lab Setup Details](https://cloudyuga.guru/quiz/lab-setup-details-3/) - [Core Conectps (quiz)](https://cloudyuga.guru/quiz/core-conectps-quiz-3/) - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/quiz/application-lifecycle-management-quiz-3/) - [Services and Networking (quiz)](https://cloudyuga.guru/quiz/services-and-networking-quiz-3/) - [Scheduling (quiz)](https://cloudyuga.guru/quiz/scheduling-quiz-3/) - [Course Introduction](https://cloudyuga.guru/quiz/course-introduction-3/) - [Author's Introduction](https://cloudyuga.guru/quiz/authors-introduction-3/) - [Nodeselector](https://cloudyuga.guru/quiz/nodeselector-2/) - [Exercises](https://cloudyuga.guru/quiz/exercises-5/) - [Scheduling (quiz)](https://cloudyuga.guru/quiz/scheduling-quiz-2/) - [Services without Selectors](https://cloudyuga.guru/quiz/services-without-selectors-2/) - [Headless Services](https://cloudyuga.guru/quiz/headless-services-2/) - [External Name Service Type](https://cloudyuga.guru/quiz/external-name-service-type-2/) - [Ingress - Deploy Applications](https://cloudyuga.guru/quiz/ingress-deploy-applications-2/) - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/quiz/configure-path-based-fan-out-ingress-routing-2/) - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/quiz/configure-virtual-host-based-ingress-routing-2/) - [Network Policies - Ingress Policies](https://cloudyuga.guru/quiz/network-policies-ingress-policies-2/) - [Network Policies - Egress Policies](https://cloudyuga.guru/quiz/network-policies-egress-policies-2/) - [Managing Resources in Kubernetes](https://cloudyuga.guru/quiz/managing-resources-in-kubernetes-2/) - [Requests and Limits](https://cloudyuga.guru/quiz/requests-and-limits-2/) - [Setting up defaults using LimitRange](https://cloudyuga.guru/quiz/setting-up-defaults-using-limitrange-2/) - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/quiz/setting-up-resource-quota-for-a-namespace-2/) - [DaemonSets](https://cloudyuga.guru/quiz/daemonsets-2/) - [Setting up Resource Quota for a Namespace](https://cloudyuga.guru/quiz/setting-up-resource-quota-for-a-namespace/) - [DaemonSets](https://cloudyuga.guru/quiz/daemonsets/) - [Nodeselector](https://cloudyuga.guru/quiz/nodeselector/) - [Exercises](https://cloudyuga.guru/quiz/exercises-4/) - [Scheduling (quiz)](https://cloudyuga.guru/quiz/scheduling-quiz/) - [Health Checks - Liveness Probes](https://cloudyuga.guru/quiz/health-checks-liveness-probes/) - [Health Checks - Readiness Probes](https://cloudyuga.guru/quiz/health-checks-readiness-probes/) - [Health Checks - Startup Probes](https://cloudyuga.guru/quiz/health-checks-startup-probes/) - [Parallel Jobs](https://cloudyuga.guru/quiz/parallel-jobs/) - [Cron Jobs](https://cloudyuga.guru/quiz/cron-jobs/) - [Exercises](https://cloudyuga.guru/quiz/exercises-2/) - [Application Lifecycle Management (quiz)](https://cloudyuga.guru/quiz/application-lifecycle-management-quiz/) - [ClusterIP Service Type](https://cloudyuga.guru/quiz/clusterip-service-type/) - [NodePort Service Type](https://cloudyuga.guru/quiz/nodeport-service-type/) - [LoadBalancer Service Type](https://cloudyuga.guru/quiz/loadbalancer-service-type/) - [Services without Selectors](https://cloudyuga.guru/quiz/services-without-selectors/) - [Headless Services](https://cloudyuga.guru/quiz/headless-services/) - [External Name Service Type](https://cloudyuga.guru/quiz/external-name-service-type/) - [Ingress - Deploy Applications](https://cloudyuga.guru/quiz/ingress-deploy-applications/) - [Configure Path Based (Fan Out) Ingress Routing](https://cloudyuga.guru/quiz/configure-path-based-fan-out-ingress-routing/) - [Configure Virtual Host Based Ingress Routing](https://cloudyuga.guru/quiz/configure-virtual-host-based-ingress-routing/) - [Network Policies - Ingress Policies](https://cloudyuga.guru/quiz/network-policies-ingress-policies/) - [Network Policies - Egress Policies](https://cloudyuga.guru/quiz/network-policies-egress-policies/) - [Exercises](https://cloudyuga.guru/quiz/exercises-3/) - [Services and Networking (quiz)](https://cloudyuga.guru/quiz/services-and-networking-quiz/) - [Managing Resources in Kubernetes](https://cloudyuga.guru/quiz/managing-resources-in-kubernetes/) - [Requests and Limits](https://cloudyuga.guru/quiz/requests-and-limits/) - [Setting up defaults using LimitRange](https://cloudyuga.guru/quiz/setting-up-defaults-using-limitrange/) - [Course Introduction](https://cloudyuga.guru/quiz/course-introduction/) - [Author's Introduction](https://cloudyuga.guru/quiz/authors-introduction/) - [Lab Setup Details](https://cloudyuga.guru/quiz/lab-setup-details/) - [Kubernetes Introduction](https://cloudyuga.guru/quiz/kubernetes-introduction/) - [Kubernetes Architecture](https://cloudyuga.guru/quiz/kubernetes-architecture/) - [Accesssing Kubernetes](https://cloudyuga.guru/quiz/accesssing-kubernetes/) - [Kubernetes Networking Overview](https://cloudyuga.guru/quiz/kubernetes-networking-overview/) - [Kubernetes API Primitves and Object Model](https://cloudyuga.guru/quiz/kubernetes-api-primitves-and-object-model/) - [Pods](https://cloudyuga.guru/quiz/pods/) - [Multi-Container Pods](https://cloudyuga.guru/quiz/multi-container-pods/) - [Namespaces](https://cloudyuga.guru/quiz/namespaces/) - [Exercises](https://cloudyuga.guru/quiz/exercises/) - [Core Conectps (quiz)](https://cloudyuga.guru/quiz/core-conectps-quiz/) - [Lesson 3](https://cloudyuga.guru/quiz/lesson-3-2/) - [Deployment](https://cloudyuga.guru/quiz/deployment/) - [Scaling the Deployments](https://cloudyuga.guru/quiz/scaling-the-deployments/) - [Deployment Startegy - Rolling Update](https://cloudyuga.guru/quiz/deployment-startegy-rolling-update/) - [Deployment Startegy - Recreate](https://cloudyuga.guru/quiz/deployment-startegy-recreate/) - [Labels and Selectors](https://cloudyuga.guru/quiz/labels-and-selectors/) - [Annotations](https://cloudyuga.guru/quiz/annotations/) - [Labels and Annotations for Deployment Object](https://cloudyuga.guru/quiz/labels-and-annotations-for-deployment-object/) - [Field Selectors](https://cloudyuga.guru/quiz/field-selectors/) ## Categories - [Blog](https://cloudyuga.guru/blogs/category/blog/) - Your blog category - [Container](https://cloudyuga.guru/blogs/category/container/) - [docker](https://cloudyuga.guru/blogs/category/docker/) - [cloud](https://cloudyuga.guru/blogs/category/cloud/) - [ebook](https://cloudyuga.guru/blogs/category/ebook/) - [career](https://cloudyuga.guru/blogs/category/career/) - [machine learning](https://cloudyuga.guru/blogs/category/machine-learning/) - [Kubernetes](https://cloudyuga.guru/blogs/category/kubernetes/) ## Tags - [Container](https://cloudyuga.guru/blogs/tag/container/) - [docker](https://cloudyuga.guru/blogs/tag/docker/) - [non-root](https://cloudyuga.guru/blogs/tag/non-root/) - [Storage](https://cloudyuga.guru/blogs/tag/storage/) - [volume](https://cloudyuga.guru/blogs/tag/volume/) - [kubernetes](https://cloudyuga.guru/blogs/tag/kubernetes/) - [tcpdump](https://cloudyuga.guru/blogs/tag/tcpdump/) - [Security](https://cloudyuga.guru/blogs/tag/security/) - [troubleshooting](https://cloudyuga.guru/blogs/tag/troubleshooting/) - [Cicd](https://cloudyuga.guru/blogs/tag/cicd/) - [Argo](https://cloudyuga.guru/blogs/tag/argo/) - [Jenkins](https://cloudyuga.guru/blogs/tag/jenkins/) - [Argocd](https://cloudyuga.guru/blogs/tag/argocd/) - [Advance](https://cloudyuga.guru/blogs/tag/advance/) - [Administartor](https://cloudyuga.guru/blogs/tag/administartor/) - [linux](https://cloudyuga.guru/blogs/tag/linux/) - [Cluster](https://cloudyuga.guru/blogs/tag/cluster/) - [k8s](https://cloudyuga.guru/blogs/tag/k8s/) - [kubeconfig](https://cloudyuga.guru/blogs/tag/kubeconfig/) - [Kubectl](https://cloudyuga.guru/blogs/tag/kubectl/) - [observability](https://cloudyuga.guru/blogs/tag/observability/) - [parseable](https://cloudyuga.guru/blogs/tag/parseable/) - [grafana](https://cloudyuga.guru/blogs/tag/grafana/) - [kubernetes pods logs](https://cloudyuga.guru/blogs/tag/kubernetes-pods-logs/) - [vector components](https://cloudyuga.guru/blogs/tag/vector-components/) - [log agent](https://cloudyuga.guru/blogs/tag/log-agent/) - [vector](https://cloudyuga.guru/blogs/tag/vector/) - [cloud-native](https://cloudyuga.guru/blogs/tag/cloud-native/) - [Kubeadm](https://cloudyuga.guru/blogs/tag/kubeadm/) - [cloud native](https://cloudyuga.guru/blogs/tag/cloud-native-2/) - [cri-o](https://cloudyuga.guru/blogs/tag/cri-o/) - [container runtime](https://cloudyuga.guru/blogs/tag/container-runtime/) - [hpa](https://cloudyuga.guru/blogs/tag/hpa/) - [keda](https://cloudyuga.guru/blogs/tag/keda/) - [prometheus](https://cloudyuga.guru/blogs/tag/prometheus/) - [scaling](https://cloudyuga.guru/blogs/tag/scaling/) - [metrics](https://cloudyuga.guru/blogs/tag/metrics/) - [locust](https://cloudyuga.guru/blogs/tag/locust/) - [autoscaling](https://cloudyuga.guru/blogs/tag/autoscaling/) - [applications](https://cloudyuga.guru/blogs/tag/applications/) - [Multi-Architecture Docker Builds](https://cloudyuga.guru/blogs/tag/multi-architecture-docker-builds/) - [Buildx for Docker](https://cloudyuga.guru/blogs/tag/buildx-for-docker/) - [Cross-Platform Docker Images](https://cloudyuga.guru/blogs/tag/cross-platform-docker-images/) - [Docker Build Efficiency](https://cloudyuga.guru/blogs/tag/docker-build-efficiency/) - [Containerization with Buildx](https://cloudyuga.guru/blogs/tag/containerization-with-buildx/) - [Hands-On Lab for Docker](https://cloudyuga.guru/blogs/tag/hands-on-lab-for-docker/) - [Multi-Architecture Development](https://cloudyuga.guru/blogs/tag/multi-architecture-development/) - [Docker Image Compatibility](https://cloudyuga.guru/blogs/tag/docker-image-compatibility/) - [Buildx Tutorial](https://cloudyuga.guru/blogs/tag/buildx-tutorial/) - [Cross-Compilation in Docker](https://cloudyuga.guru/blogs/tag/cross-compilation-in-docker/) - [SIGKILL](https://cloudyuga.guru/blogs/tag/sigkill/) - [SIGTERM](https://cloudyuga.guru/blogs/tag/sigterm/) - [grace-period](https://cloudyuga.guru/blogs/tag/grace-period/) - [Cncf](https://cloudyuga.guru/blogs/tag/cncf/) - [Containers](https://cloudyuga.guru/blogs/tag/containers/) - [ambassador](https://cloudyuga.guru/blogs/tag/ambassador/) - [adapter](https://cloudyuga.guru/blogs/tag/adapter/) - [legacy](https://cloudyuga.guru/blogs/tag/legacy/) - [multi-container](https://cloudyuga.guru/blogs/tag/multi-container/) - [sidecar](https://cloudyuga.guru/blogs/tag/sidecar/) - [Cloudnative](https://cloudyuga.guru/blogs/tag/cloudnative/) - [containerd](https://cloudyuga.guru/blogs/tag/containerd/) - [ctr](https://cloudyuga.guru/blogs/tag/ctr/) - [runtime](https://cloudyuga.guru/blogs/tag/runtime/) - [image](https://cloudyuga.guru/blogs/tag/image/) - [best-practices](https://cloudyuga.guru/blogs/tag/best-practices/) - [multi-stage](https://cloudyuga.guru/blogs/tag/multi-stage/) - [cache](https://cloudyuga.guru/blogs/tag/cache/) - [base image selection](https://cloudyuga.guru/blogs/tag/base-image-selection/) - [docker image size reduction](https://cloudyuga.guru/blogs/tag/docker-image-size-reduction/) - [kata](https://cloudyuga.guru/blogs/tag/kata/) - [Debugging](https://cloudyuga.guru/blogs/tag/debugging/) - [logging](https://cloudyuga.guru/blogs/tag/logging/) - [grafana-loki](https://cloudyuga.guru/blogs/tag/grafana-loki/) - [efk](https://cloudyuga.guru/blogs/tag/efk/) - [elk](https://cloudyuga.guru/blogs/tag/elk/) - [agents](https://cloudyuga.guru/blogs/tag/agents/) - [forwarders](https://cloudyuga.guru/blogs/tag/forwarders/) - [Audit Logs](https://cloudyuga.guru/blogs/tag/audit-logs/) - [log monitoring](https://cloudyuga.guru/blogs/tag/log-monitoring/) - [log visualization](https://cloudyuga.guru/blogs/tag/log-visualization/) - [kind](https://cloudyuga.guru/blogs/tag/kind/) - [buildkit](https://cloudyuga.guru/blogs/tag/buildkit/) - [docker dive](https://cloudyuga.guru/blogs/tag/docker-dive/) - [docker slim](https://cloudyuga.guru/blogs/tag/docker-slim/) - [docker squash](https://cloudyuga.guru/blogs/tag/docker-squash/) - [optimize image size](https://cloudyuga.guru/blogs/tag/optimize-image-size/) - [open-source docker tools](https://cloudyuga.guru/blogs/tag/open-source-docker-tools/) - [DinD](https://cloudyuga.guru/blogs/tag/dind/) - [etcd](https://cloudyuga.guru/blogs/tag/etcd/) - [key-value](https://cloudyuga.guru/blogs/tag/key-value/) - [database](https://cloudyuga.guru/blogs/tag/database/) - [runc](https://cloudyuga.guru/blogs/tag/runc/) - [namespaces](https://cloudyuga.guru/blogs/tag/namespaces/) - [cgroups](https://cloudyuga.guru/blogs/tag/cgroups/) - [operating-system](https://cloudyuga.guru/blogs/tag/operating-system/) - [pods](https://cloudyuga.guru/blogs/tag/pods/) - [job](https://cloudyuga.guru/blogs/tag/job/) - [init containers](https://cloudyuga.guru/blogs/tag/init-containers/) - [native sidecar container](https://cloudyuga.guru/blogs/tag/native-sidecar-container/) - [ebpf](https://cloudyuga.guru/blogs/tag/ebpf/) - [Tetragon](https://cloudyuga.guru/blogs/tag/tetragon/) - [Tetragon logs](https://cloudyuga.guru/blogs/tag/tetragon-logs/) - [parseable alerts](https://cloudyuga.guru/blogs/tag/parseable-alerts/) - [kubernetes security](https://cloudyuga.guru/blogs/tag/kubernetes-security/) - [cilium](https://cloudyuga.guru/blogs/tag/cilium/) - [events](https://cloudyuga.guru/blogs/tag/events/) - [linux kernel](https://cloudyuga.guru/blogs/tag/linux-kernel/) - [runtime enforcement](https://cloudyuga.guru/blogs/tag/runtime-enforcement/) - [policy](https://cloudyuga.guru/blogs/tag/policy/) - [admission controllers](https://cloudyuga.guru/blogs/tag/admission-controllers/) - [kyverno](https://cloudyuga.guru/blogs/tag/kyverno/) - [auditing](https://cloudyuga.guru/blogs/tag/auditing/) - [audit policy](https://cloudyuga.guru/blogs/tag/audit-policy/) - [audit events](https://cloudyuga.guru/blogs/tag/audit-events/) - [alerts](https://cloudyuga.guru/blogs/tag/alerts/) - [kubernetes serviceaccounts](https://cloudyuga.guru/blogs/tag/kubernetes-serviceaccounts/) - [Kubernetes audit log best practices](https://cloudyuga.guru/blogs/tag/kubernetes-audit-log-best-practices/) - [kubernetes rbac](https://cloudyuga.guru/blogs/tag/kubernetes-rbac/) - [kubernetes pod](https://cloudyuga.guru/blogs/tag/kubernetes-pod/) - [kubernetes service](https://cloudyuga.guru/blogs/tag/kubernetes-service/) - [kubernetes secrets](https://cloudyuga.guru/blogs/tag/kubernetes-secrets/) - [kubernetes monitoring](https://cloudyuga.guru/blogs/tag/kubernetes-monitoring/) - [images](https://cloudyuga.guru/blogs/tag/images/) - [sbom](https://cloudyuga.guru/blogs/tag/sbom/) - [docker sbom](https://cloudyuga.guru/blogs/tag/docker-sbom/) - [container images](https://cloudyuga.guru/blogs/tag/container-images/) - [rust](https://cloudyuga.guru/blogs/tag/rust/) - [logging in kubernetes](https://cloudyuga.guru/blogs/tag/logging-in-kubernetes/) - [sql](https://cloudyuga.guru/blogs/tag/sql/) - [kubebuilder](https://cloudyuga.guru/blogs/tag/kubebuilder/) - [operator](https://cloudyuga.guru/blogs/tag/operator/) - [custom resources](https://cloudyuga.guru/blogs/tag/custom-resources/) - [controller](https://cloudyuga.guru/blogs/tag/controller/) - [custom controllers](https://cloudyuga.guru/blogs/tag/custom-controllers/) - [Confidential Containers](https://cloudyuga.guru/blogs/tag/confidential-containers/) - [CoCo](https://cloudyuga.guru/blogs/tag/coco/) - [coredump](https://cloudyuga.guru/blogs/tag/coredump/) - [katacontainers](https://cloudyuga.guru/blogs/tag/katacontainers/) - [container image](https://cloudyuga.guru/blogs/tag/container-image/) - [image build](https://cloudyuga.guru/blogs/tag/image-build/) - [isolation](https://cloudyuga.guru/blogs/tag/isolation/) - [debug](https://cloudyuga.guru/blogs/tag/debug/) - [exec](https://cloudyuga.guru/blogs/tag/exec/) - [ephemeral containers](https://cloudyuga.guru/blogs/tag/ephemeral-containers/) - [sidecar containers](https://cloudyuga.guru/blogs/tag/sidecar-containers/) - [deployment](https://cloudyuga.guru/blogs/tag/deployment/) - [service](https://cloudyuga.guru/blogs/tag/service/) - [contianer images](https://cloudyuga.guru/blogs/tag/contianer-images/) - [sealedsecret](https://cloudyuga.guru/blogs/tag/sealedsecret/) - [kubectl plugins](https://cloudyuga.guru/blogs/tag/kubectl-plugins/) - [krew](https://cloudyuga.guru/blogs/tag/krew/) - [RBAC](https://cloudyuga.guru/blogs/tag/rbac/) - [services](https://cloudyuga.guru/blogs/tag/services/) - [deployments](https://cloudyuga.guru/blogs/tag/deployments/) - [metrics server](https://cloudyuga.guru/blogs/tag/metrics-server/) - [horizontal pod autoscaler](https://cloudyuga.guru/blogs/tag/horizontal-pod-autoscaler/) - [vertical pod autoscaler](https://cloudyuga.guru/blogs/tag/vertical-pod-autoscaler/) - [cluster autoscaler](https://cloudyuga.guru/blogs/tag/cluster-autoscaler/) - [devtron](https://cloudyuga.guru/blogs/tag/devtron/) - [secrets](https://cloudyuga.guru/blogs/tag/secrets/) - [encoding](https://cloudyuga.guru/blogs/tag/encoding/) - [base64](https://cloudyuga.guru/blogs/tag/base64/) - [kernel](https://cloudyuga.guru/blogs/tag/kernel/) - [argo-rollouts](https://cloudyuga.guru/blogs/tag/argo-rollouts/) - [progressive-delivery](https://cloudyuga.guru/blogs/tag/progressive-delivery/) - [downwardapi](https://cloudyuga.guru/blogs/tag/downwardapi/) - [logs](https://cloudyuga.guru/blogs/tag/logs/) - [kubernetes auditing](https://cloudyuga.guru/blogs/tag/kubernetes-auditing/) - [API](https://cloudyuga.guru/blogs/tag/api/) - [REST](https://cloudyuga.guru/blogs/tag/rest/) - [security observability](https://cloudyuga.guru/blogs/tag/security-observability/) - [event filtering](https://cloudyuga.guru/blogs/tag/event-filtering/) - [dynamic kernel insights](https://cloudyuga.guru/blogs/tag/dynamic-kernel-insights/) - [nodejs](https://cloudyuga.guru/blogs/tag/nodejs/) - [reactjs](https://cloudyuga.guru/blogs/tag/reactjs/) - [blue-green deployment](https://cloudyuga.guru/blogs/tag/blue-green-deployment/) - [argo rollouts](https://cloudyuga.guru/blogs/tag/argo-rollouts-2/) - [progressive delivery](https://cloudyuga.guru/blogs/tag/progressive-delivery-2/) - [canary deployment](https://cloudyuga.guru/blogs/tag/canary-deployment/) - [werf](https://cloudyuga.guru/blogs/tag/werf/) - [Devops](https://cloudyuga.guru/blogs/tag/devops/) - [analysis](https://cloudyuga.guru/blogs/tag/analysis/) - [traffic](https://cloudyuga.guru/blogs/tag/traffic/) - [fluxcd](https://cloudyuga.guru/blogs/tag/fluxcd/) - [docker-in-docker](https://cloudyuga.guru/blogs/tag/docker-in-docker-2/) - [docker-in-docker container](https://cloudyuga.guru/blogs/tag/docker-in-docker-container-2/) - [vault](https://cloudyuga.guru/blogs/tag/vault/) - [secret](https://cloudyuga.guru/blogs/tag/secret/) - [hashicorp vault](https://cloudyuga.guru/blogs/tag/hashicorp-vault/) - [secret management](https://cloudyuga.guru/blogs/tag/secret-management/) - [dynamic secrets](https://cloudyuga.guru/blogs/tag/dynamic-secrets/) - [encryption](https://cloudyuga.guru/blogs/tag/encryption/) - [labels](https://cloudyuga.guru/blogs/tag/labels/) - [selectors](https://cloudyuga.guru/blogs/tag/selectors/) - [replicasets](https://cloudyuga.guru/blogs/tag/replicasets/) - [annotations](https://cloudyuga.guru/blogs/tag/annotations/) - [kubernetes metadata](https://cloudyuga.guru/blogs/tag/kubernetes-metadata/) - [orchestration](https://cloudyuga.guru/blogs/tag/orchestration/) - [docker swarm](https://cloudyuga.guru/blogs/tag/docker-swarm/) - [git](https://cloudyuga.guru/blogs/tag/git/) - [github](https://cloudyuga.guru/blogs/tag/github/) - [cloud](https://cloudyuga.guru/blogs/tag/cloud/) - [cheatsheet](https://cloudyuga.guru/blogs/tag/cheatsheet/) - [git github cheatsheet](https://cloudyuga.guru/blogs/tag/git-github-cheatsheet/) - [docker compose](https://cloudyuga.guru/blogs/tag/docker-compose/) - [yaml](https://cloudyuga.guru/blogs/tag/yaml/) - [multi-container deployment](https://cloudyuga.guru/blogs/tag/multi-container-deployment/) - [docker images](https://cloudyuga.guru/blogs/tag/docker-images/) - [docker contianers](https://cloudyuga.guru/blogs/tag/docker-contianers/) - [linux basic commands](https://cloudyuga.guru/blogs/tag/linux-basic-commands/) - [linux top basic commands](https://cloudyuga.guru/blogs/tag/linux-top-basic-commands/) - [linux commands](https://cloudyuga.guru/blogs/tag/linux-commands/) - [most used linux commands](https://cloudyuga.guru/blogs/tag/most-used-linux-commands/) - [lists](https://cloudyuga.guru/blogs/tag/lists/) - [indentation](https://cloudyuga.guru/blogs/tag/indentation/) - [expressjs](https://cloudyuga.guru/blogs/tag/expressjs/) - [mongodb](https://cloudyuga.guru/blogs/tag/mongodb/) - [docker-compose](https://cloudyuga.guru/blogs/tag/docker-compose-2/) - [docker containers](https://cloudyuga.guru/blogs/tag/docker-containers/) - [networkpolicy](https://cloudyuga.guru/blogs/tag/networkpolicy/) - [segmentation](https://cloudyuga.guru/blogs/tag/segmentation/) - [kubernetes network policy](https://cloudyuga.guru/blogs/tag/kubernetes-network-policy/) - [OOMKill](https://cloudyuga.guru/blogs/tag/oomkill/) - [QoS](https://cloudyuga.guru/blogs/tag/qos/) - [OOM score](https://cloudyuga.guru/blogs/tag/oom-score/) - [sysctl](https://cloudyuga.guru/blogs/tag/sysctl/) - [kernel pod](https://cloudyuga.guru/blogs/tag/kernel-pod/) - [kata containers](https://cloudyuga.guru/blogs/tag/kata-containers/) - [netowrking](https://cloudyuga.guru/blogs/tag/netowrking/) - [kubernetes networking](https://cloudyuga.guru/blogs/tag/kubernetes-networking/) - [sidecar injection](https://cloudyuga.guru/blogs/tag/sidecar-injection/) - [k0s](https://cloudyuga.guru/blogs/tag/k0s/) - [edge](https://cloudyuga.guru/blogs/tag/edge/) - [patch](https://cloudyuga.guru/blogs/tag/patch/) - [kubectl patch](https://cloudyuga.guru/blogs/tag/kubectl-patch/) - [openshift](https://cloudyuga.guru/blogs/tag/openshift/) - [S2I](https://cloudyuga.guru/blogs/tag/s2i/) - [microk8s](https://cloudyuga.guru/blogs/tag/microk8s/) - [hugo](https://cloudyuga.guru/blogs/tag/hugo/) - [pvc](https://cloudyuga.guru/blogs/tag/pvc/) - [pv](https://cloudyuga.guru/blogs/tag/pv/) - [monitoring](https://cloudyuga.guru/blogs/tag/monitoring/) - [statefulsets](https://cloudyuga.guru/blogs/tag/statefulsets/) - [daemonsets](https://cloudyuga.guru/blogs/tag/daemonsets/) - [event](https://cloudyuga.guru/blogs/tag/event/) - [website](https://cloudyuga.guru/blogs/tag/website/) - [cloudyuga](https://cloudyuga.guru/blogs/tag/cloudyuga/) - [Uncategorized](https://cloudyuga.guru/blogs/tag/uncategorized/) - [training](https://cloudyuga.guru/blogs/tag/training/) - [Pune](https://cloudyuga.guru/blogs/tag/pune/) - [Trainings](https://cloudyuga.guru/blogs/tag/trainings/) - [docker tutorial for beginners](https://cloudyuga.guru/blogs/tag/docker-tutorial-for-beginners/) - [FAQs](https://cloudyuga.guru/blogs/tag/faqs/) - [Dockerfile](https://cloudyuga.guru/blogs/tag/dockerfile/) - [Kubecon](https://cloudyuga.guru/blogs/tag/kubecon/) - [Software-defined networking](https://cloudyuga.guru/blogs/tag/software-defined-networking/) - [Object storage](https://cloudyuga.guru/blogs/tag/object-storage/) - [Infrastructure as code](https://cloudyuga.guru/blogs/tag/infrastructure-as-code/) - [Learning](https://cloudyuga.guru/blogs/tag/learning/) - [Teaching](https://cloudyuga.guru/blogs/tag/teaching/) - [bootcamp](https://cloudyuga.guru/blogs/tag/bootcamp/) - [Bengaluru](https://cloudyuga.guru/blogs/tag/bengaluru/) - [Production](https://cloudyuga.guru/blogs/tag/production/) - [cost](https://cloudyuga.guru/blogs/tag/cost/) - [Grafana Visualization](https://cloudyuga.guru/blogs/tag/grafana-visualization/) - [ebook](https://cloudyuga.guru/blogs/tag/ebook/) - [career](https://cloudyuga.guru/blogs/tag/career/) - [college](https://cloudyuga.guru/blogs/tag/college/) - [ai](https://cloudyuga.guru/blogs/tag/ai/) - [machine learning](https://cloudyuga.guru/blogs/tag/machine-learning/) - [python](https://cloudyuga.guru/blogs/tag/python/) - [cnai](https://cloudyuga.guru/blogs/tag/cnai/) - [gpu](https://cloudyuga.guru/blogs/tag/gpu/) - [run:ai](https://cloudyuga.guru/blogs/tag/runai/) - [nvidia](https://cloudyuga.guru/blogs/tag/nvidia/) - [scheduling](https://cloudyuga.guru/blogs/tag/scheduling/) - [Generative AI](https://cloudyuga.guru/blogs/tag/generative-ai/) - [GenAI](https://cloudyuga.guru/blogs/tag/genai/) - [GenAI Application Lifecycle](https://cloudyuga.guru/blogs/tag/genai-application-lifecycle/) - [GenAI Use-Cases](https://cloudyuga.guru/blogs/tag/genai-use-cases/) - [Responsible AI](https://cloudyuga.guru/blogs/tag/responsible-ai/) - [GenAI Challenges](https://cloudyuga.guru/blogs/tag/genai-challenges/) - [GenAI App](https://cloudyuga.guru/blogs/tag/genai-app/) - [GenerativeAI](https://cloudyuga.guru/blogs/tag/generativeai/) - [Text-to-image Generation](https://cloudyuga.guru/blogs/tag/text-to-image-generation/) - [OpenAI](https://cloudyuga.guru/blogs/tag/openai/) - [Open Source Model](https://cloudyuga.guru/blogs/tag/open-source-model/) - [Huggingface](https://cloudyuga.guru/blogs/tag/huggingface/) - [Streamlit](https://cloudyuga.guru/blogs/tag/streamlit/) - [transformers](https://cloudyuga.guru/blogs/tag/transformers/) - [diffusers](https://cloudyuga.guru/blogs/tag/diffusers/) - [LLM](https://cloudyuga.guru/blogs/tag/llm/) - [AWS Kinesis](https://cloudyuga.guru/blogs/tag/aws-kinesis/) - [AWS-DynamoDB](https://cloudyuga.guru/blogs/tag/aws-dynamodb/) - [AWS-Lambda](https://cloudyuga.guru/blogs/tag/aws-lambda/) - [CloudWatch](https://cloudyuga.guru/blogs/tag/cloudwatch/) - [CloudShell](https://cloudyuga.guru/blogs/tag/cloudshell/) - [data-analytics](https://cloudyuga.guru/blogs/tag/data-analytics/) - [LlamaGuard](https://cloudyuga.guru/blogs/tag/llamaguard/) - [Finance App](https://cloudyuga.guru/blogs/tag/finance-app/) - [Guardrail](https://cloudyuga.guru/blogs/tag/guardrail/) ## FAQ Categories - [Uncategorized FAQ](https://cloudyuga.guru/helpie_faq_category/uncategorized-faq/) - [All course FAQs](https://cloudyuga.guru/helpie_faq_category/all-course-faqs/) - [shell scripts](https://cloudyuga.guru/helpie_faq_category/shell-scripts/) ## FAQ Groups - [Getting Started](https://cloudyuga.guru/helpie_faq_group/getting-started/) - [All Courses FAQs Group](https://cloudyuga.guru/helpie_faq_group/all-courses-faqs-group/) - [Shell Script Course](https://cloudyuga.guru/helpie_faq_group/shell-script-course/) ## Product categories - [Uncategorized](https://cloudyuga.guru/product-category/uncategorized/) - [self-paced](https://cloudyuga.guru/product-category/self-paced/) - [bootcamp](https://cloudyuga.guru/product-category/bootcamp/) - [free](https://cloudyuga.guru/product-category/free/) ## Product tags - [kubernetes](https://cloudyuga.guru/product-tag/kubernetes/) - [docker](https://cloudyuga.guru/product-tag/docker/) ## Course Categories - [Cloud Native Courses](https://cloudyuga.guru/blogs/course-category/cloud-native-courses/) - [Linux](https://cloudyuga.guru/blogs/course-category/linux/) ## Modules - [Working With Containers](https://cloudyuga.guru/blogs/modules/working-with-containers/) - This module introduce container operations and explains how to do hands-on with Docker commands. - [Working With Images](https://cloudyuga.guru/blogs/modules/working-with-images/) - The module covers fundamental aspects of Docker, encompassing Basic Image Operations, Image Inspection, Dockerfile-based Image Creation, Pushing Images to DockerHub, and Creating Images from Containers for Docker container management. - [Docker Networking](https://cloudyuga.guru/blogs/modules/docker-networking/) - Explore Docker Networking Basics and learn how to expose containers for public access and enhance your understanding of containerized applications and their connectivity. - [Course Introduction](https://cloudyuga.guru/blogs/modules/course-introduction/) - Start your Linux journey with an introduction module, offering a comprehensive overview to build a strong foundation in operating system fundamentals. - [Introduction To Containers](https://cloudyuga.guru/blogs/modules/introduction-to-containers/) - This module clarifies containers, articulating their advantages over VMs and providing insights into the role of container runtimes in efficient application deployment. - [What Is Docker ?](https://cloudyuga.guru/blogs/modules/what-is-docker/) - This module provides a comprehensive understanding of the Docker platform and its alternatives. It covers the Docker architecture, explores the utilization of different container runtimes by Docker, Docker Engine installation process, and introduces Docker Desktop for seamless container development and management. - [Containers Workflow In Real World](https://cloudyuga.guru/blogs/modules/containers-workflow-in-real-world/) - Explore a comprehensive module on Containers Workflow in Real World scenarios, covering practical aspects and industry applications for effective deployment and management. - [Course Feedback](https://cloudyuga.guru/blogs/modules/course-feedback/) - Give us valuable feedback to improve our basic course. - [Introduction and Setup](https://cloudyuga.guru/blogs/modules/10-introduction-and-setup/) - Introduction and Setup - [Core Concepts](https://cloudyuga.guru/blogs/modules/10-core-concepts/) - Core Concepts - [Application-Lifecycle-Management](https://cloudyuga.guru/blogs/modules/application-lifecycle-management-pt/) - Application-Lifecycle-Management - [Services and Networking](https://cloudyuga.guru/blogs/modules/10-services-and-networking/) - [Additional Content](https://cloudyuga.guru/blogs/modules/10-additional-content/) - Additional Content - [Introduction to Cloud Computing](https://cloudyuga.guru/blogs/modules/10-introduction-to-cloud-computing/) - Introduction to Cloud Computing - [Cloud Deployment and Service Models](https://cloudyuga.guru/blogs/modules/10-cloud-deployment-and-service-models/) - Cloud Deployment and Service Models - [Cloud Building Blocks](https://cloudyuga.guru/blogs/modules/10-cloud-building-blocks/) - Cloud Building Blocks - [Microservices](https://cloudyuga.guru/blogs/modules/10-microservices/) - Microservices - [What is DevOps?](https://cloudyuga.guru/blogs/modules/10-what-is-devops/) - What is DevOps? - [Infrastructure as Code (IaC)](https://cloudyuga.guru/blogs/modules/10-infrastructure-as-code-iac/) - Infrastructure as Code (IaC) - [CI/CD](https://cloudyuga.guru/blogs/modules/10-ci-cd/) - CI/CD - [Bash Shell](https://cloudyuga.guru/blogs/modules/bash-shell/) - Explore the fundamentals of the Bash shell, covering aspects like introduction to Bash, piping, here documents, variables, and more for effective command-line operations. - [Introduction to Bash Scripting](https://cloudyuga.guru/blogs/modules/introduction-to-bash-scripting/) - This module provides comprehensive insights into advanced Bash scripting for efficient and powerful command-line operations. - [Input , Output and Error Redirection](https://cloudyuga.guru/blogs/modules/input-output-and-error-redirection/) - Master the art of shell scripting by understanding seamless Input, Output, and Error Redirection for efficient command-line operations. - [Conditional Statements](https://cloudyuga.guru/blogs/modules/conditional-statements/) - Explore powerful decision-making in shell scripts with Conditional Statements for precise control and automation. - [Course Assignment 1](https://cloudyuga.guru/blogs/modules/course-assignment-1/) - Develop essential shell scripting skills through hands-on assignments, covering key concepts and practical applications. - [Operators](https://cloudyuga.guru/blogs/modules/operators/) - This module facilitates efficient manipulation and comparison of variables through a diverse set of operators. - [Loops](https://cloudyuga.guru/blogs/modules/loops/) - Explore this module to get insights of a fundamental skill for efficient automation and task repetition. - [Functions](https://cloudyuga.guru/blogs/modules/functions/) - Learn to create and optimize shell functions for efficient and modular script development. - [User Input and Command Line Arguments](https://cloudyuga.guru/blogs/modules/user-input-and-command-line-arguments/) - This module empowers learners to proficiently handle inputs and arguments for enhanced script functionality. - [Course Assignment 2](https://cloudyuga.guru/blogs/modules/course-assignment-2/) - This module contains advanced shell scripting exercises focusing on practical applications and problem-solving in a Linux environment. - [Exit Statuses and Return Codes](https://cloudyuga.guru/blogs/modules/exit-statuses-and-return-codes/) - Learn the art of interpreting exit statuses and return codes, essential for effective shell scripting. - [Logging](https://cloudyuga.guru/blogs/modules/logging/) - This module enables efficient tracking and recording of script execution details to improve debugging and analysis. - [Debugging](https://cloudyuga.guru/blogs/modules/debugging/) - Master the art of debugging in shell scripting to identify and resolve code issues efficiently. - [Course Assignment 3](https://cloudyuga.guru/blogs/modules/course-assignment-3/) - Explore advanced shell scripting techniques and practical applications through hands-on experience. - [Course Summary](https://cloudyuga.guru/blogs/modules/course-summary/) - Gain expertise in automation and script development with Shell Scripting Mastery course, designed to empower learners with essential skills in this field. - [Course and Lab Introduction](https://cloudyuga.guru/blogs/modules/10-course-and-lab-introduction/) - Course and Lab Introduction - [OpenTelemetry](https://cloudyuga.guru/blogs/modules/10-opentelemetry/) - OpenTelemetry - [Auto Instrumentation With OpenTelemetry](https://cloudyuga.guru/blogs/modules/10-auto-instrumentation-with-opentelemetry/) - Auto Instrumentation With OpenTelemetry - [Conclusion and References](https://cloudyuga.guru/blogs/modules/10-conclusion-and-references/) - Conclusion and References - [Final Exam](https://cloudyuga.guru/blogs/modules/final-exam/) - Get ready for Final Exam where you prove your mastery. - [Introduction and Setup](https://cloudyuga.guru/blogs/modules/introduction-and-setup/) - Start your Docker journey with an introduction to the course and the author, along with instructions to make the most out of the course. - [Core Concepts](https://cloudyuga.guru/blogs/modules/core-concepts/) - Understand the foundational principles of Kubernetes, focusing on core concepts to build a solid understanding of container orchestration - [Application Lifecycle Management](https://cloudyuga.guru/blogs/modules/application-lifecycle-management/) - Explore the module to understand how to manage applications with ReplicaSet, Deployment, Labels, Selectors, and Annotations for a holistic understanding of container orchestration - [Services and Networking](https://cloudyuga.guru/blogs/modules/services-and-networking/) - Dive into the module, empowering beginners to harness the full potential of container orchestration through Kubernetes services - [Scheduling](https://cloudyuga.guru/blogs/modules/scheduling/) - Involve yourself in the module by learning different ways of scheduling on Kubernetes - [Storage](https://cloudyuga.guru/blogs/modules/storage/) - Deep dive into the module and learn about the volume management for your Kubernetes applications - [ConfigMaps and Secrets](https://cloudyuga.guru/blogs/modules/configmaps-and-secrets/) - Learn how Kubernetes can store confidential and non-confidential data in this module - [Authentication and Authorization](https://cloudyuga.guru/blogs/modules/authentication-and-authorization/) - Explore the module to learn who can do what in Kubernetes - [Multi Container Pods](https://cloudyuga.guru/blogs/modules/multi-container-pods/) - Explore the different design patterns for deploying application in Kubernetes cluster with this module - [Logging-Monitoring](https://cloudyuga.guru/blogs/modules/logging-monitoring/) - Improve your debugging skills in Kubernetes by learning about the different logs - [Troubleshooting](https://cloudyuga.guru/blogs/modules/troubleshooting/) - Learn different ways to troubleshoot your Kuberentes applications and cluster - [Additional Content](https://cloudyuga.guru/blogs/modules/additional-content/) - Explore the basics of Kubernetes with a focus on practical YAML tips and tricks to enhance your understanding and proficiency in this beginner-friendly course module. - [Operating System Overview](https://cloudyuga.guru/blogs/modules/operating-system-overview/) - Dive into the heart of computing for a solid foundation in system architecture and functionality with this module. - [Introduction to Linux](https://cloudyuga.guru/blogs/modules/introduction-to-linux/) - This module offers a foundational understanding to kickstart your Linux learning journey. - [Text Editors and Tmux](https://cloudyuga.guru/blogs/modules/text-editors-and-tmux/) - Explore the world of text editors and Tmux in this module to gain essential skills for efficient coding and terminal management. - [Linux Commands](https://cloudyuga.guru/blogs/modules/linux-commands/) - Explore the power of Linux with hands-on learning of essential commands in this comprehensive course module for efficient system management. - [Linux system startup](https://cloudyuga.guru/blogs/modules/linux-system-startup/) - Explore the basics of Linux system startup in this course module and gain essential insights into the initialization process and optimizing system performance. - [Managing Linux Services](https://cloudyuga.guru/blogs/modules/managing-linux-services/) - Explore the backbone of Linux systems to find essential services that power efficient and robust computing environments. - [Package Management](https://cloudyuga.guru/blogs/modules/package-management/) - Focus on Package Management to acquire essential skills to efficiently handle software installation and system maintenance in this comprehensive course module. - [Linux Filesystem](https://cloudyuga.guru/blogs/modules/linux-filesystem/) - Explore the insights of the Linux filesystem in this module to gain a key skill for effective file management and system navigation. - [Users, Groups and Permission Management](https://cloudyuga.guru/blogs/modules/users-groups-and-permission-management/) - Dive into the complexities of Linux Users, Groups, and Permission Management in this comprehensive course module. - [Installation and Upgrade](https://cloudyuga.guru/blogs/modules/installation-and-upgrade/) - Navigate the Linux landscape seamlessly with a focused module covering Installation and Upgrade strategies for a robust and efficient learning experience. - [Linux Processes](https://cloudyuga.guru/blogs/modules/linux-processes/) - Dive into the heart of Linux systems with a focus on understanding and managing processes in this course module. - [Networking Overview & Commands](https://cloudyuga.guru/blogs/modules/networking-overview-commands/) - This module covers networking and essential commands for mastering robust system administration skills. - [System Security](https://cloudyuga.guru/blogs/modules/system-security/) - Explore the basics of Linux system security in this module to protect your systems against potential threats. - [Introduction to Version Control Systems (VCS)](https://cloudyuga.guru/blogs/modules/introduction-to-version-control-systems-vcs/) - This module covers essential insights into efficient code management and collaboration. - [Introduction to Git and GitHub](https://cloudyuga.guru/blogs/modules/introduction-to-git-and-github/) - This module is designed to explain the essential tools and practices for effective collaboration in software development. - [Installation and Setting Up](https://cloudyuga.guru/blogs/modules/installation-and-setting-up/) - Effortlessly kickstart your Git journey with this module, guiding you through seamless installation and configuration processes. - [Git Lifecycle](https://cloudyuga.guru/blogs/modules/git-lifecycle/) - Explore the complete Git lifecycle in this dedicated module to understand the workflows for efficient version control in software development. - [Git Common Commands](https://cloudyuga.guru/blogs/modules/git-common-commands/) - Use essential Git commands efficiently with this module, streamlining your version control workflow. - [Working with Git Branches](https://cloudyuga.guru/blogs/modules/working-with-git-branches/) - Explore the dynamic world of version control in this module, mastering the art of parallel development and efficient collaboration. - [Working with Remote Repositories](https://cloudyuga.guru/blogs/modules/working-with-remote-repositories/) - Explore seamless collaboration and efficient version control with this module, mastering the insights of Git for distributed and team-based development. - [Git and GitHub Advanced Concepts](https://cloudyuga.guru/blogs/modules/git-and-github-advanced-concepts/) - Explore Git and GitHub concepts, including advanced branching strategies, collaborative workflows, and optimization techniques in this module. - [Installation Configuration Validation](https://cloudyuga.guru/blogs/modules/installation-configuration-validation/) - Expand your Kubernetes knowledge by deep-diving on how a Kubeadm-based Kubernetes cluster is set from scratch - [Cluster Maintenance](https://cloudyuga.guru/blogs/modules/cluster-maintenance/) - Explore how you can maintain and upgrade your Kubeadm-based Kubernetes cluster - [Helm](https://cloudyuga.guru/blogs/modules/helm/) - Ease your work by learning about the Package manager of Kubernetes in this module - [Getting Started with Docker](https://cloudyuga.guru/blogs/modules/getting-started-with-docker/) - This module covers the Docker architecture, explores the utilization of different container runtimes by Docker, guides through the Docker Engine installation process, and introduces Docker Desktop for seamless container development and management. - [Working with Containers using Docker](https://cloudyuga.guru/blogs/modules/working-with-containers-using-docker/) - Explore the power of containerization and streamline application deployment and management in this module. - [Working with Container Images using Docker](https://cloudyuga.guru/blogs/modules/working-with-container-images-using-docker/) - Explore this course module to gain expertise in efficiently managing and manipulating container images for seamless deployment. - [Network Management with Docker](https://cloudyuga.guru/blogs/modules/network-management-with-docker/) - Explore network management in Docker, mastering connectivity and communication between containers, in this focused course module. - [Storage Management with Docker](https://cloudyuga.guru/blogs/modules/storage-management-with-docker/) - Explore efficient storage management and learn essential techniques to optimize resource utilization and enhance containerized applications in this course module. - [Docker Logging](https://cloudyuga.guru/blogs/modules/docker-logging/) - Explore Docker logging, gaining vital insights into containerized application monitoring and troubleshooting in this dedicated course module. - [Using Docker Compose to Deploy Multi Container Application](https://cloudyuga.guru/blogs/modules/using-docker-compose-to-deploy-multi-container-application/) - Explore the power of container orchestration with Docker Compose in this course module, streamlining the deployment and management of multi-container Docker applications. - [Docker Image Analysis Tools](https://cloudyuga.guru/blogs/modules/docker-image-analysis-tools/) - Explore Docker image fundamentals and enhance your skills with the Docker Image Analysis Tool in this focused course module. - [Docker Best Practices](https://cloudyuga.guru/blogs/modules/docker-best-practices/) - Explore Docker best practices and elevate your containerization skills in this focused course module. - [Deploy Different Applications with Docker](https://cloudyuga.guru/blogs/modules/deploy-different-applications-with-docker/) - Streamline the deployment of applications written in various languages with Docker in this module, simplifying the containerization process for smooth and efficient deployment. - [Docker APIs](https://cloudyuga.guru/blogs/modules/docker-apis/) - Unlock the power of Docker with this module, providing a streamlined and in-depth exploration of Docker’s application programming interface for seamless integration and optimization. - [Setting Up Kubernetes Lab](https://cloudyuga.guru/blogs/modules/setting-up-kubernetes-lab/) - Learn how to set up your own Kubernetes cluster and do hands-on labs on it - [Introduction to Containers and Kubernetes](https://cloudyuga.guru/blogs/modules/10-introduction-to-containers-and-kubernetes/) - [Introduction to CNCF and Cloud Native](https://cloudyuga.guru/blogs/modules/10-introduction-to-cncf-and-cloud-native/) - [Kubernetes Fundamentals](https://cloudyuga.guru/blogs/modules/10-kubernetes-fundamentals/) - [Application-Lifecycle-Management](https://cloudyuga.guru/blogs/modules/10-application-lifecycle-management/) - [Managing Storage in Kubernetes](https://cloudyuga.guru/blogs/modules/10-managing-storage-in-kubernetes/) - [Scaling Applications in Kubernetes](https://cloudyuga.guru/blogs/modules/10-scaling-applications-in-kubernetes/) - [Deploying Serverless Applications in Kubernetes](https://cloudyuga.guru/blogs/modules/10-deploying-serverless-applications-in-kubernetes/) - [Cloud Native Observability](https://cloudyuga.guru/blogs/modules/10-cloud-native-observability/) - [Security](https://cloudyuga.guru/blogs/modules/10-security/) - [Helm](https://cloudyuga.guru/blogs/modules/10-helm/) - [Cloud Native Application Delivery](https://cloudyuga.guru/blogs/modules/10-cloud-native-application-delivery/) - [Lab Setup](https://cloudyuga.guru/blogs/modules/lab-setup/) - This module covers how to set up your lab environment in different operating systems to earn hands-on experience. - [Introduction](https://cloudyuga.guru/blogs/modules/10-introduction/) - [Overview of Docker and Kubernetes Commands](https://cloudyuga.guru/blogs/modules/10-overview-of-docker-and-kubernetes-commands/) - [Kubernetes Attack surfaces](https://cloudyuga.guru/blogs/modules/10-kubernetes-attack-surfaces/) - [Building Secure Cluster](https://cloudyuga.guru/blogs/modules/10-building-secure-cluster/) - [Accessing the Cluster Securely](https://cloudyuga.guru/blogs/modules/10-accessing-the-cluster-securely/) - [General OS Security](https://cloudyuga.guru/blogs/modules/10-general-os-security/) - [Deploying the applications Securely](https://cloudyuga.guru/blogs/modules/10-deploying-the-applications-securely/) - [Images and Container Security](https://cloudyuga.guru/blogs/modules/10-images-and-container-security/) - [Secure CI/CD Practices](https://cloudyuga.guru/blogs/modules/10-secure-ci-cd-practices/) - [Runtime Security and Auditing](https://cloudyuga.guru/blogs/modules/10-runtime-security-and-auditing/) - [Custom Resource Definition](https://cloudyuga.guru/blogs/modules/10-custom-resource-definition/) - [Monitoring with Prometheus](https://cloudyuga.guru/blogs/modules/10-monitoring-with-prometheus/) - [Istio Service Mesh and Envoy](https://cloudyuga.guru/blogs/modules/10-istio-service-mesh-and-envoy/) - [CI/CD With Kubernetes](https://cloudyuga.guru/blogs/modules/10-ci-cd-with-kubernetes/) - [OpentTelemetry - Tracing](https://cloudyuga.guru/blogs/modules/10-openttelemetry-tracing/) - [Logging and Monitoring using Elastic](https://cloudyuga.guru/blogs/modules/10-logging-and-monitoring-using-elastic/) - [Course Introduction and Lab Setup](https://cloudyuga.guru/blogs/modules/course-introduction-and-lab-setup/) - This module covers how to set up your lab environment in different operating systems to earn hands-on experience. - [Introduction to AI](https://cloudyuga.guru/blogs/modules/introduction-to-ai/) - Lay the groundwork by exploring the fundamentals of Artificial Intelligence. - [Foundational Models and GenAI](https://cloudyuga.guru/blogs/modules/foundational-models-and-genai/) - [Large Language Models (LLMs)](https://cloudyuga.guru/blogs/modules/large-language-models-llms/) - [RAG and VectorDB](https://cloudyuga.guru/blogs/modules/rag-and-vectordb/) - [Prompt Engineering](https://cloudyuga.guru/blogs/modules/prompt-engineering/) - [Langchain](https://cloudyuga.guru/blogs/modules/langchain/) - Langchain - [Introduction to Huggingface](https://cloudyuga.guru/blogs/modules/introduction-to-huggingface/) - Huggingface - [Agentic Workflow](https://cloudyuga.guru/blogs/modules/agentic-workflow/) - [Guardrailing the GenAI Applications](https://cloudyuga.guru/blogs/modules/guardrailing-the-genai-applications/) - [Securing LLM Applications](https://cloudyuga.guru/blogs/modules/securing-llm-applications/) - [Recording: Agents, Gauradrails and Securing Apps](https://cloudyuga.guru/blogs/modules/recording-agents-gauradrails-and-securing-apps/) - Recording - [Introduction and Course Overview](https://cloudyuga.guru/blogs/modules/introduction-and-course-overview/) - By the end of this module, students will understand the course outline, know the instructor, grasp cloud computing basics, its importance, who should learn it, and its evolution in the tech world. - [Traditional v/s Cloud Computing](https://cloudyuga.guru/blogs/modules/traditional-v-s-cloud-computing/) - By the end of this module, students will understand traditional computing, grasp cloud computing basics, and identify key differences between traditional and cloud models, highlighting cloud’s benefits. - [Cloud Deployment Models](https://cloudyuga.guru/blogs/modules/cloud-deployment-models/) - By the end of this module, students will understand various cloud deployment models (public, private, multi, hybrid, multi-hybrid) and identify key cloud providers, helping them choose the right cloud deployment model. - [Cloud Service Model](https://cloudyuga.guru/blogs/modules/cloud-service-model/) - By the end of this module, students will understand IaaS, PaaS, and SaaS models, their key features, and be able to compare them, helping to choose the right service model for different cloud needs. - [Building Blocks of Cloud](https://cloudyuga.guru/blogs/modules/building-blocks-of-cloud/) - By the end of this module, students will understand key cloud technologies like virtualization, containerization, SDS, SDN, object storage, serverless computing, and infrastructure as code, and their benefits in modern cloud environments. - [Cloud Native Computing Foundation](https://cloudyuga.guru/blogs/modules/cloud-native-computing-foundation/) - By the end of this module, students will understand what the Cloud Native Computing Foundation (CNCF) is and explore the CNCF landscape, gaining insight into various cloud-native tools and projects. - [Other Important Aspects ..](https://cloudyuga.guru/blogs/modules/other-important-aspects/) - By the end of this module, students will grasp cloud security essentials, learn cloud migration strategies, understand cost management, and explore how to build a private cloud for tailored control. - [What's Next ?](https://cloudyuga.guru/blogs/modules/whats-next/) - By the end of this module, students should know the next steps to take: selecting a cloud platform to specialize in, exploring the role of AI in cloud, beginning their Kubernetes journey, and using the resources effectively to enhance their cloud expertise. - [Conclusion](https://cloudyuga.guru/blogs/modules/conclusion/) - By the end of this module, students should review key concepts learned throughout the course and understand the next steps to reinforce their knowledge, while also receiving a final thank you.