What is a Cloud-Native?

Cloud-native describes an architectural approach that emphasizes application workloads that are portable, modular and isolate, between different cloud deployment models and Cloud Service Provider (CSP)

CSPs commonly describe Could-Native as a term meaning everything built on the CSP. This is more so better described as being called “Cloud-FIrst”

Some describe cloud-native being 4 key principles:

  1. Microservices
  2. Containerization
  3. Continuous Delivery
  4. DevOps

Cloud Native technologies empower organizations to build and run scalable application in modern, dynamic, environments, such as public, private and hybrid clouds. Containers, services, meshes, microservices, immutable infrastructure, and delclarative APIs exemplify this approach.

Cloud Native vs Cloud Service Providers

A Cloud Service Provider (CSP)

  • a collection of cloud services
  • strong application integration and synergies between services
  • utilizeing metered billing
  • under a single unified API

Cloud Native

is a workload, application or system, that is designed to run on cloud services, and “takes advantage of cloud offerings”.

Linux Foundation

The linux foundation (LF) is a non-profit technology consortium founded in 2000 as a merger between Open Source Development Labs and the Free Standards Group to standardize Linux, support its growth, and rpomote its commercial adoption.

Cloud Native Computing Foundation (CNCF)

CNCF is a linux foundation project that was founded in 2015 to help advance container technology. CNCF operates as an independent organization from its parent organization.

  • CNCF has its own board members
  • CNCF has its own global tech conference: CloudNativeCon + KubeCon
  • CNCF has its own cloud native certifications
  • CNCF has its own collection of projects: Kubernetes, Prometheus, Etcd, COntainerD, etc.

Cloud Native Landscape

Cloud Native Landscape is an interactive map developed by the CNCF to showcase all available cloud-native technologies and to help identify the category to which they serve. (see landscape.cncf.io)

K8s Components Overview

  • API Server: The API Server allows users to interact with k8s components using the kubectl or by sending HTTP request
  • Kubelet: is an agent installed on all nodes. kubelet allows users to interact with node via the API server and kubectl.
  • Kubectl: a command line interface (CLI) that allows users to interact with the cluster and components via the API server
  • Cloud Controller Manager: allows you to link a cloud service provider (CSP) eg. AWS, Azure, GCP, to leverage cloud service
  • Controller Manager: A control loop that watches the state of the cluster and will change the current state back to desired state.
  • Scheduler: Determines where to place pods on nodes. Places them in a scheduling a queue.
  • Kube Proxy: An application on worker nodes that provides routing and filtering rules for ingress (incoming) traffic to pods.
  • Network Policy: acts an virtual firewall as the namespace-level or pod-level
  • ConfigMap: allows you to decouple environment-specific configuration from our container images, so that your applications are easily portable. Used to store non-confidential data in key-value pair
  • Secret: small amount of sensitive data such as a password, a token, or a key.
  • Volumes: mounting storage eg. locally on the node, or remote to cloud storage.
  • StatefulSet: provides guarantees about the ordering and uniqueness of these pods.
    • Think of databases where you have to determine read and write order or limit the mount of containers
    • StatefulSets are hard, when you can hos your db externally from k8s cluster
  • ReplicaSets: Maintain a stable set of replica pods running at a given time. Can provide a guarantee of availability
  • Deployment: is a blueprint for a pod (think Launc Template)

Manifest Files in Kubernetes

Description

  • non technical description - is a document that is commonly used for customs to list the contents of cargo, or passengers. Its an itemized list of things.

  • in the context of kubernetes - is a generalized name for any k8s configuration file that define the configuration of various k8s components.

Purposes

These are all manifest files with specific purposes:

  • Deployment
  • PodSpec
  • Network policy file

Format

  • yaml
  • json

a manifect can contain multiple k8s component definition/configurations. In yaml you can see the three hypens --- is used to defined multiple components.

kubectl apply command is generaly used to deploy manifest files. Resource Configuration file is sometimes used to describe multiple resources in a manifest.

Nodes - ControlPlande vs Worker

Control Plane Node formally known as master node

Manages processes like scheduling, restarting nodes…

Worker Node

Does the work, running your app in pods and containers

Various Proxies

What is a proxy?

a server application that acts as an intermediary between a client requesting a resource and the server providing that resource

Proxies in Kubernetes

There are many kinds of proxies you will encounter in Kubernetes:

  • Kubectl proxy – proxies from a localhost address to the kubernetes apiserver
  • Apiserver proxy – a bastion built into the apiserver, connects a user outside of the cluster to cluster IPs which otherwise might not be reachable
  • Kube proxy – runs on each node and used to reach services
  • Proxy/Load balancer in front of API servers – acts as load balancer if there are several apiserver
  • Cloud Load Balancers – for external cluster traffic to reach pods
  • Forward Proxy: A bunch of servers egressing traffic have to pass through the proxy first
  • Reverse Proxy: Ingress tra