Files
awesome-kubernetes/docs/kubernetes.md
Inaki Fernandez ff81d1e919 sept
2024-01-18 15:38:49 +01:00

284 KiB
Raw Blame History

Kubernetes

{=="Kubernetes is not for application development but for platform development. Its magic is in enterprise standardization, not app portability" (Kelsey Hightower)==}

  1. Must know Kubernetes concepts
  2. Introduction
    1. Kubernetes Jobs Market
    2. Certified Kubernetes Offerings
    3. The State of Cloud-Native Development
    4. Kubernetes Failure Stories
    5. Kubernetes Maturity Model
    6. Cloud Native Learn by doing platforms
    7. Kubernetes Scalability Thresholds
    8. Kubernetes Installation Methods
    9. Kubernetes Knowledge Hubs
      1. Kubernetes Podcasts
      2. Kubernetes Blogs
      3. Spanish Kubernetes Blogs
  3. Kubernetes Open Source Container Orchestation
    1. KubeCon
    2. kubeconfig
    3. Kubernetes Manifests
    4. Kubernetes Quality of Service QOS
    5. Docker and Kubernetes
      1. Kubernetes vs Docker
      2. Kubernetes vs Docker Swarm
    6. Kubernetes Admission Controllers
    7. Kubernetes Mutating Webhooks
    8. Kubernetes Cloud Controller Manager
    9. Kubernetes Resources
      1. Kubernetes Pods
      2. Kubernetes ConfigMaps
      3. Kubernetes Secrets
      4. Kubernetes Volumes
      5. Kubernetes Namespaces and Multi Tenancy. Self Service Namespaces
        1. Kiosk Multi-Tenancy Extension for Kubernetes
        2. Creating Users
      6. Kubernetes Labels and Selectors
      7. Kubernetes Taints and Tolerations
      8. Kubernetes Deployment, ReplicaSet, Rollling Updates and Rollbacks
      9. Kubernetes StatefulSet
      10. Kubernetes DaemonSets
      11. Kubernetes Jobs and Cron Jobs
      12. Kubernetes Services
    10. Kubernetes Deployment Strategies
    11. Kubernetes API
      1. Multi-Cluster Services API
    12. Kubernetes Health Checks/Probes. Startup, Liveness, Readiness
    13. Reserved CPU and memory in Kubernetes nodes
    14. Kubernetes Capacity and Resource Management. Resource Quotas per namespace, LimitRanges per namespace, Limits and Requests per POD
    15. Kubernetes Scheduler. Kube Scheduler
      1. Pod rebalancing and allocations
    16. Kubernetes etcd
    17. Kubernetes Sidecars
    18. Kubernetes Annotations
    19. Kubernetes Best Practices and Tips
    20. Disruptions
    21. Cost Estimation Strategies
      1. kubecost
    22. Kubernetes Resource and Capacity Management. Capacity Planning
    23. Architecting Kubernetes clusters. Node Size. Multi Clusters and Hybrid Cloud
      1. Wide Cluster instead of Multi-Cluster
  4. Client Libraries for Kubernetes
  5. Helm Kubernetes Tool
  6. Templating YAML in Kubernetes with real code. YQ YAML processor
  7. Extending Kubernetes
    1. Adding Custom Resources. Extending Kubernetes API with Kubernetes Resource Definitions. CRD vs Aggregated API
    2. Krew, a plugin manager for kubectl plugins
    3. OpenKruise/Kruise
    4. Crossplane, a Universal Control Plane API for Cloud Computing. Crossplane Workloads Definitions
  8. Kubernetes Community
    1. Community Forums
    2. Kubernetes Special Interest Groups (SIGs)
      1. Kubernetes SIG's Repos
      2. Kubectl Plugins
  9. Enforcing Policies and governance for kubernetes workloads with Conftest
  10. Kubernetes Patterns and Antipatterns. Service Discovery
  11. Kubernetes Scheduling and Scheduling Profiles
    1. Assigning Pods to Nodes. NodeSelector, Pod Affinity and Anti-Affinity
    2. Pod Topology Spread Constraints and PodTopologySpread Scheduling Plugin
  12. Cloud Development Kit (CDK) for Kubernetes
    1. AWS Cloud Development Kit (AWS CDK)
  13. Serverless with OpenFaas and Knative
  14. Virtual Kubernetes Clusters
  15. Multi-Cluster Federation. Hybrid Cloud Setup Tools
    1. KubeFed
    2. KubeCarrier
    3. Red Hat Operator Lifecycle Manager (OLM)
    4. Istio Service Mesh
  16. Multi-Regional Architecture
  17. Kubernetes in Kubernetes
  18. Kubernetes Scripts
    1. Kubernetes and Ansible
  19. Spot instances in Kubernetes
  20. Kubernetes on Windows
  21. Kubernetes Incident Report Plan IRP
  22. Kubernetes Certifications. CKA, CKAD and CKS
  23. Books and eBooks
    1. Kubernetes Patterns eBooks
    2. Famous Kubernetes ebooks of 2019
  24. Famous Kubernetes resources of 2019
  25. Famous Kubernetes resources of 2020
  26. Compliant Kubernetes
  27. PCI SSC (Payment Card Industry Security Standards Council)
  28. Kubernetes Slack Channel
  29. Bunch of images
  30. Videos
  31. Spanish Videos
  32. Tweets
  33. Tweets 2
  34. Memes

Must know Kubernetes concepts

  • Workloads: Node, Cluster, Pod, Namespace
  • Pod Controllers: Deployment, ReplicaSet, DaemonSet, StatefulSet, HPA PodDisruptionBudget, Job, CronJob
  • Configuration: ConfigMaps, Secrets
  • Networking: Ingress, Service, Network Policy

Introduction

Kubernetes Jobs Market

Certified Kubernetes Offerings

The State of Cloud-Native Development

Kubernetes Failure Stories

Kubernetes Maturity Model

  • fairwinds.medium.com: Kubernetes Maturity Model
  • fairwinds.medium.com: An Introduction to the Kubernetes Maturity Model — How to Use It
    • The Fairwinds team developed the Kubernetes Maturity Model over a year ago, and they continue to update and refine it to reflect the five stages you go through in your journey to Kubernetes maturity.
    • If the Kubernetes Maturity Model is new to you, this is a helpful introduction and guide on how to use it.
    • Before you do anything, consider what a cloud-native journey means to you and your organization. Kubernetes isnt right for everyone, so make sure you understand where to start and how to prove value by embracing Kubernetes.
    • Any maturity model is a process, and youre likely to move back and forth between phases, and some will take longer than others. Even once youve reached phase five, youll always be working on ongoing optimization, removing human error and effort, and improving reliability and efficiency.

Cloud Native Learn by doing platforms

Kubernetes Scalability Thresholds

Kubernetes Installation Methods

{==

Kubernetes Knowledge Hubs

Kubernetes Podcasts

Kubernetes Blogs

Spanish Kubernetes Blogs

==}

Kubernetes Open Source Container Orchestation

KubeCon

kubeconfig

Kubernetes Manifests

Kubernetes Quality of Service QOS

Docker and Kubernetes

Kubernetes vs Docker

Kubernetes vs Docker Swarm

Kubernetes Admission Controllers

Kubernetes Mutating Webhooks

  • medium.com/@pflooky: Intro to Kubernetes Mutating Webhooks (get more out of Kubernetes)
    • In its simplest terms, a MutatingWebhookConfiguration defines a webhook application to alter a Kubernetes resource when a particular action is taken on it. For example, if I wanted to add particular labels to all the pods that are created, it could be done by a mutating webhook which watches for all CREATE POD events and adds the labels to that pod before it gets deployed.
    • Why: As the development teams put larger workloads into Kubernetes, managing all of the resources becomes quite difficult as there may be different deployment patterns and life cycles. Mutating webhooks give you the ability to target changes to any Kubernetes resource regardless of their deployment mechanisms and alter them before or after any point within the life cycle.
    • Some use cases where it could be used include:
      • Metadata management: include useful metadata about team, environment or type of workload to each Kubernetes resource
      • Attaching sidecar processes: add a log listener to particular pods
      • Secret management: apply consistent secret retrieval across all resources
      • Deployment configuration: could add environment variables or configmaps on the fly to pods

Kubernetes Cloud Controller Manager

Kubernetes Resources

Kubernetes Pods

Kubernetes ConfigMaps

Kubernetes Secrets

Kubernetes Volumes

Kubernetes Namespaces and Multi Tenancy. Self Service Namespaces

Kiosk Multi-Tenancy Extension for Kubernetes
  • ==loft-sh/kiosk== kiosk Multi-Tenancy Extension For Kubernetes - Secure Cluster Sharing & Self-Service Namespace Provisioning.
  • Kubernetes is designed as a single-tenant platform, which makes it hard for cluster admins to host multiple tenants in a single Kubernetes cluster. However, sharing a cluster has many advantages, e.g. more efficient resource utilization, less admin/configuration effort or easier sharing of cluster-internal resources among different tenants.
  • While there are hundreds of ways of setting up multi-tenant Kubernetes clusters and many Kubernetes distributions provide their own tenancy logic, there is no lightweight, pluggable and customizable solution that allows admins to easily add multi-tenancy capabilities to any standard Kubernetes cluster.
Creating Users
  • cloudhero.io Creating Users for your Kubernetes Cluster. Learn how to use x509 certificates to authenticate users in your cluster.

Kubernetes Labels and Selectors

Kubernetes Taints and Tolerations

Kubernetes Deployment, ReplicaSet, Rollling Updates and Rollbacks

Kubernetes StatefulSet

Kubernetes DaemonSets

Kubernetes Jobs and Cron Jobs

Kubernetes Services

Kubernetes Deployment Strategies

Kubernetes API

Multi-Cluster Services API

Kubernetes Health Checks/Probes. Startup, Liveness, Readiness

Reserved CPU and memory in Kubernetes nodes

Kubernetes Capacity and Resource Management. Resource Quotas per namespace, LimitRanges per namespace, Limits and Requests per POD

Kubernetes Scheduler. Kube Scheduler

Pod rebalancing and allocations

Kubernetes etcd

Kubernetes Sidecars

Kubernetes Annotations

Kubernetes Best Practices and Tips

[![k8s experts be like](images/k8sexpertsbelike.jfif){: style="width:50%"}](https://twitter.com/memenetes)

Disruptions

Cost Estimation Strategies

kubecost

Kubernetes Resource and Capacity Management. Capacity Planning

Architecting Kubernetes clusters. Node Size. Multi Clusters and Hybrid Cloud

Wide Cluster instead of Multi-Cluster

Client Libraries for Kubernetes

Helm Kubernetes Tool

Templating YAML in Kubernetes with real code. YQ YAML processor

Extending Kubernetes

Adding Custom Resources. Extending Kubernetes API with Kubernetes Resource Definitions. CRD vs Aggregated API

  • Custom Resources
  • itnext.io: CRD is just a table in Kubernetes
  • Use a custom resource (CRD or Aggregated API) if most of the following apply:
    • You want to use Kubernetes client libraries and CLIs to create and update the new resource.
    • You want top-level support from kubectl; for example, kubectl get my-object object-name.
    • You want to build new automation that watches for updates on the new object, and then CRUD other objects, or vice versa.
    • You want to write automation that handles updates to the object.
    • You want to use Kubernetes API conventions like .spec, .status, and .metadata.
    • You want the object to be an abstraction over a collection of controlled resources, or a summarization of other resources.
  • Kubernetes provides two ways to add custom resources to your cluster:
    • CRDs are simple and can be created without any programming.
    • API Aggregation requires programming, but allows more control over API behaviors like how data is stored and conversion between API versions.
  • Kubernetes provides these two options to meet the needs of different users, so that neither ease of use nor flexibility is compromised.
  • Aggregated APIs are subordinate API servers that sit behind the primary API server, which acts as a proxy. This arrangement is called API Aggregation (AA). To users, it simply appears that the Kubernetes API is extended.
  • CRDs allow users to create new types of resources without adding another API server. You do not need to understand API Aggregation to use CRDs.
  • Regardless of how they are installed, the new resources are referred to as Custom Resources to distinguish them from built-in Kubernetes resources (like pods).
  • ==github.com/datreeio/CRDs-catalog: CRDs Catalog== Over 300 popular Kubernetes CRDs (CustomResourceDefinition) in JSON schema format.
  • ==dev.to: Creating a Custom Resource Definition In Kubernetes== | Michael Levan

Krew, a plugin manager for kubectl plugins

OpenKruise/Kruise

Crossplane, a Universal Control Plane API for Cloud Computing. Crossplane Workloads Definitions

Kubernetes Community

Community Forums

Kubernetes Special Interest Groups (SIGs)

Kubernetes SIG's Repos

Kubectl Plugins

??? note "Video: Kubectl plugins. Click to expand!"

<center>
<iframe width="560" height="315" src="https://www.youtube.com/embed/_W2qZvQT6XY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</center>

Enforcing Policies and governance for kubernetes workloads with Conftest

Kubernetes Patterns and Antipatterns. Service Discovery

Top 10 Kubernetes patterns

Kubernetes Scheduling and Scheduling Profiles

Assigning Pods to Nodes. NodeSelector, Pod Affinity and Anti-Affinity

  • Affinity and anti-affinity
  • blog.kubecost.com: Kubernetes node affinity: examples & instructions Pod scheduling is one of the most important aspects of Kubernetes cluster management. How pods are distributed across nodes directly impacts performance and resource utilization. Kubernetes node affinity is an advanced scheduling feature that helps administrators optimize the distribution of pods across a cluster. This article will review scheduling basics, Kubernetes node affinity and anti-affinity, pod affinity and anti-affinity, and provide practical examples to help you get comfortable using this cluster scheduling feature.
  • medium.com/dlt-labs-publication: Kubernetes: Understanding Pod Affinity, Taint & Toleration
  • ==medium.com/@pbijjala: reCap: Elasticity in Kubernetes/GKE== 🌟🌟
    • Node affinity, nodeSelector is the simplest way to constrain Pods to nodes with specified labels.
    • Pod Affinity, ensures two pods to be co-located in a single node. Whenever higher availability is desired, anti-affinity settings can be used to place pods
    • Using taints and tolerations, Taints are the opposite — they allow a node to repel a set of pods. Tolerations are applied to pods. Tolerations allow the scheduler to schedule pods with matching taints.
    • In this article you will cover GKE and:
      • Vertical Pod Autoscaler
      • Horizontal Pod Autoscaler
      • Cluster Autoscaler
      • Node auto-provisioning
      • Metric server
      • Tips and tricks for application developers and cluster operators

Pod Topology Spread Constraints and PodTopologySpread Scheduling Plugin

Cloud Development Kit (CDK) for Kubernetes

  • cdk8s.io Define Kubernetes apps and components using familiar languages. cdk8s is an open-source software development framework for defining Kubernetes applications and reusable abstractions using familiar programming languages and rich object-oriented APIs. cdk8s apps synthesize into standard Kubernetes manifests which can be applied to any Kubernetes cluster.
  • github.com/awslabs/cdk8s

AWS Cloud Development Kit (AWS CDK)

  • AWS: Introducing CDK for Kubernetes
  • Traditionally, Kubernetes applications are defined with human-readable, static YAML data files which developers write and maintain. Building new applications requires writing a good amount of boilerplate config, copying code from other projects, and applying manual tweaks and customizations. As applications evolve and teams grow, these YAML files become harder to manage. Sharing best practices or making updates involves manual changes and complex migrations.
  • YAML is an excellent format for describing the desired state of your cluster, but it is does not have primitives for expressing logic and reusable abstractions. There are multiple tools in the Kubernetes ecosystem which attempt to address these gaps in various ways:
  • We realized this was exactly the same problem our customers had faced when defining their applications through CloudFormation templates, a problem solved by the AWS Cloud Development Kit (AWS CDK), and that we could apply the same design concepts from the AWS CDK to help all Kubernetes users.

Serverless with OpenFaas and Knative

[![Serverless](images/from-monolith-to-serverless.jpg)](https://www.xenonstack.com/blog/serverless-openfaas-java/)

Virtual Kubernetes Clusters

Multi-Cluster Federation. Hybrid Cloud Setup Tools

KubeFed

KubeCarrier

Red Hat Operator Lifecycle Manager (OLM)

  • Red Hat OLM operator-lifecycle-manager is a management framework for extending Kubernetes with Operators. OLM extends Kubernetes to provide a declarative way to install, manage, and upgrade Operators and their dependencies in a cluster.

Istio Service Mesh

Multi-Regional Architecture

Kubernetes in Kubernetes

Kubernetes Scripts

Kubernetes and Ansible

Spot instances in Kubernetes

Kubernetes on Windows

Kubernetes Incident Report Plan IRP

Kubernetes Certifications. CKA, CKAD and CKS

Books and eBooks

Kubernetes Patterns eBooks

Famous Kubernetes ebooks of 2019

[![Kubernetes: Up and Running](images/kubernetes_up_running_kelsey_hightower.gif)](http://shop.oreilly.com/product/0636920223788.do)

Famous Kubernetes resources of 2019

Famous Kubernetes resources of 2020

Compliant Kubernetes

PCI SSC (Payment Card Industry Security Standards Council)

Kubernetes Slack Channel

Bunch of images

??? note "Click to expand!"

<center>

[![Kubernetes architecture](images/kubernetes-pod-creation.png)](https://www.padok.fr/en/blog/kubernetes-architecture-clusters)

[![10 most common mistakes](images/10_common_kubernetes_mistakes.jpg){: style="width:60%"}](https://blog.pipetail.io/posts/2020-05-04-most-common-mistakes-k8s)

[![5 Open-source projects that make #Kubernetes even better](images/five-oss-projects-kubernetes.jpg){: style="width:80%"}](https://enterprisersproject.com/article/2020/5/kubernetes-5-open-source-projects-improve)

[![kubernetes arch multicloud hybrid](images/kubernetes_architecture_multicloud_hybride.jpg){: style="width:70%"}](https://www.journaldunet.com/web-tech/cloud/1492047-comment-kubernetes-perce-les-frontieres-du-cloud/)

[![Kubernetes components](images/kubernetes_components_rootsongjc.jpg)](https://github.com/rootsongjc)

[![Container flowchart](images/container_flowchart.jpg)](https://searchcloudcomputing.techtarget.com/tip/Weigh-the-pros-and-cons-of-managed-Kubernetes-services)

[![dockerswarm vs kubernetes](images/dockerswarm_vs_kubernetes.png)](https://www.imaginarycloud.com/blog/docker-vs-kubernetes/)

![simple k8s cluster meme](images/simple_k8s_cluster_meme.jfif)

[![Kubernetes not endgame](images/k8s_not_endgame.jpg)](https://thenewstack.io/kubernetes-and-the-next-generation-of-paas/)

![k8s namespaces](images/k8s_namespaces.jfif)

[![K8s arch mindmap](images/k8s_arch_mindmap.png)](https://medium.com/@raymon_dut/whats-the-relationship-between-pod-deployment-replicaset-and-service-in-kubernetes-57bf3be22abb)

[![k8s stack pionative](images/k8s_stack_pionative.webp)](https://www.pionative.com/post/6-important-things-you-need-to-run-kubernetes-in-production)
</center>

Videos

Click to expand!

Spanish Videos

??? note "Click to expand!"

<center>
<iframe width="560" height="315" src="https://www.youtube.com/embed/9p3llZAcyG8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</center>

Tweets

Click to expand!

Can you change an application without changing any code in Kubernetes?

You can when you use multiple containers in a single Pod.

Heres a visual recap of @EmanuelMEvans s article on extending apps on Kubernetes with multi-container pods https://t.co/afS3pPj4zb pic.twitter.com/LS5zOZErbE

— Daniele Polencic (@danielepolencic) March 1, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

What if you could choose the best node for your Kubernetes cluster before writing any code?

I built a calculator to choose the optimal instance sizing for your Kubernetes clusterhttps://t.co/3jlyCLrvdq

Discover:

- costs (used, wasted, kubelet)
- overcommitment
- utilisation pic.twitter.com/gdRTEWkez6

— Daniele Polencic (@danielepolencic) September 7, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD: What happens when you create a Pod in Kubernetes?

Spoiler: a surprisingly simple task reveals a complicated workflow that touches several components in the cluster. pic.twitter.com/SNEufo0lBe

— Daniele Polencic (@danielepolencic) August 6, 2020
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD: How to quarantine a Pod in Kubernetes.

This technique helps you with debugging running Pods in production.

The Pod is detached from the Service (no traffic), and you can troubleshoot it live.

Let's get started! pic.twitter.com/E7AUh2ylM7

— Daniele Polencic (@danielepolencic) June 24, 2020
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD: How to gracefully shut down Pods without dropping production traffic in Kubernetes

If you've ever noticed dropped connection after a rolling upgrade, this thread digs into the details.

Let's start: 𝘸𝘩𝘢𝘵 𝘩𝘢𝘱𝘱𝘦𝘯𝘴 𝘸𝘩𝘦𝘯 𝘢 𝘗𝘰𝘥 𝘪𝘴 𝘥𝘦𝘭𝘦𝘵𝘦𝘥? pic.twitter.com/jS5litVUlw

— Daniele Polencic (@danielepolencic) July 6, 2020
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD: How does the scheduler work in Kubernetes?

The scheduler is in charge of deciding where your pods are deployed in the cluster.

It might sound like an easy job, but it's rather complicated!

Let's dive into it. pic.twitter.com/iC1vnargc4

— Daniele Polencic (@danielepolencic) September 24, 2020
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

MEGATHREAD

Learn Kubernetes one Twitter thread at the time!

Below you can find a collection of threads about Kubernetes and Kubernetes-related tech!

I regularly add more, so you can follow me or @learnk8s for more updates! pic.twitter.com/0ingxHn9vx

— Daniele Polencic (@danielepolencic) August 26, 2020
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD

Running new apps in Kubernetes is straightforward.

But what happens when you have legacy apps that:

- Log to file instead of stdout?
- Has no support Prometheus?
- Has no support for HTTPS

Read on → pic.twitter.com/m79f69Huqw

— Daniele Polencic (@danielepolencic) February 22, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

I'm often asked why I prefer zonal Kubernetes clusters over regional clusters. @gctaylor does a great job explaining how @reddit leverages zonal clusters to limit the blast radius of config changes and reduce cross AZ network traffic. https://t.co/3pW5awTtdQ

— Kelsey Hightower (@kelseyhightower) March 18, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

THREAD

How do you scale background jobs in Kubernetes?

With Python, Celery, RabbitMQ and KEDA! pic.twitter.com/BOtwiSjIKW

— Daniele Polencic (@danielepolencic) March 29, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Architecting #Kubernetes clusters: Should you use a single cluster or many clusters for your team(s)?

There are pros and cons to both, read the thread to find out more 🧵 pic.twitter.com/1n5ACO97Ay

— appvia (@appvia_io) August 17, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Unpopular opinion: Kubernetes doesn't have a clear separation between admin and app developer APIs, and we acknowledged this as a source of complexity but maybe this is why it became successful.

— Jaana Dogan ヤナ ドガン (@rakyll) September 9, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kubernetes API is a regular HTTP REST API.

Much like any other API, it can be extended:

- By adding new endpoints
- By adding new request handlers

Adding a new endpoint is as simple as registering a Custom Resource. But how to add a new request handler? 🔽

— Ivan Velichko (@iximiuz) April 2, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Tweets 2

Click to expand!

Kubernetes saved us from a world of completely proprietary Cloud APIs and provided a trustworthy basis for an open ecosystem of infrastructure tools and APIs. https://t.co/i67orzir2O

— Ian Lewis 💉💉 (@IanMLewis) September 11, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

As more enterprises embrace #containers, theyll find they need #Kubernetes, too. With our open approach, #K8s does more. Heres how: https://t.co/y9TciK53F1 pic.twitter.com/CPWHcy5TOZ

— Nicholas Gerasimatos - Red Hat (@nicholas_redhat) September 23, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

🧵How do you keep up with Kubernetes?

If you are looking for curated Kubernetes news, we have you covered on:

- Core Kubernetes
- Security
- Architecture & development
- Job opportunities
- K3s

Here are the accounts that you should follow: pic.twitter.com/Hcw9BelCsd

— Learnk8s (@learnk8s) October 20, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

@kubernetesio @K8sArchitect K8s Architecture pic.twitter.com/Kbm11a8oMA

— Julien (@MapEngArch) October 24, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

How Kubernetes differs from Docker in the way it deals with containers 🔽

Under the hood, Kubernetes and Docker both rely on the same/similar lower-level components to run containers.

Often, both use containerd and runc. However, Kubernetes makes the container runtime pluggable pic.twitter.com/5daIalpmrt

— Ivan Velichko (@iximiuz) October 30, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Does Kubernetes rebalance your Pods?

If there's a node that has more space, does Kubernetes recompute and balance the workloads?

🤔

Let's see! pic.twitter.com/ML7JIGGtrq

— Daniele Polencic (@danielepolencic) November 9, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

As we close out the year, a few 2022 predictions. 🧵

1. 2022 will be the year where Kubernetes is finally recognized as technology for platform teams enabling product groups, rather than a technology designed for direct end-usage by developers.

— Gabe Monroy (@gabe_monroy) December 25, 2021
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Within a kubernetes cluster, what actually pulls down the image from a remote registry?

Wrong answers only please.

— Mark Manning (@antitree) January 31, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

For a long time, kubebuilder for me was just a means to scaffold controller projects. But kubebuilder's README says:

> Kubebuilder is a framework for building Kubernetes APIs.

And finally, I got it! Kubernetes APIs > HTTP APIs.
Eg: A custom controller is a form of an async API.

— Ivan Velichko (@iximiuz) February 1, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

I am no longer Kubernetes certified. My CKA and CKAD have expired.

They were some of the hardest and most valuable certs I got when getting started with Kubernetes.

Highly recommend people check them out if you're getting into cloud or SRE

— Justin Garrison (@rothgar) March 31, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kubernetes basics explained by analogy 🧵

...or "How Kubernetes Just Repeats Good Old Deployment Patterns"

1. For a long time, people had been deploying services as groups of virtual (or physical) machines.

But VMs were often slow and bulky. Hence, not very efficient. pic.twitter.com/u5c8vmSx4V

— Ivan Velichko (@iximiuz) July 24, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

When it comes to YAML manifests for Kubernetes, is it Best Practice to create individual YAML files for each object (namespace, secret, configmap, deployment, statefulset...) or do people put everything in the one YAML?

— Michael Cade (@MichaelCade1) August 11, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

It's funny: everyone thinks CPU requests are only used for scheduling (WRONG) and memory requests determine who gets OOMKilled (WRONG) but it's actually the opposite!

At runtime, memory requests do nothing, but CPU requests DO.#kubernetes is funny like that

— Natan Yellin (@aantn) August 27, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Reducing infrastructure costs boils down to turning apps off when you don't use them

That's easy to do manually, but how to turn them on automatically when you need them?

You can do so with a scale-to-zero strategy

Let me show you how to implement it in Kubernetes pic.twitter.com/YDqbAQlWUK

— Daniele Polencic (@danielepolencic) September 12, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

One of the interesting challenges with Kubernetes is deploying workloads across several regions

Let me show you how I orchestrate workloads across Europe, Asia and North America with Kubernetes, Istio and Karmada pic.twitter.com/Ukaqbj8Eek

— Daniele Polencic (@danielepolencic) September 26, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kind reminder: If you want to master Containers and Kubernetes, I've got a blog and newsletter for you! 👋

Blog: https://t.co/9J6Aj8Jn3U
Newsletter: https://t.co/DQyv14T0Nw

The focus is on:
- Clarity
- Fundamentals
- Visual explanations

Here are some recent content samples 👇 pic.twitter.com/f3B7dGhGr1

— Ivan Velichko (@iximiuz) October 1, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kubernetes has two types of resources. Compressible and non-compressible.

CPU is a compressible resource. K8s can give and take CPUs whenever it likes. Pod that need CPU and don't get it will wait.

Memory is non-compressible. K8s can't take it away without killing the pod. pic.twitter.com/OLfpvjDk17

— Natan Yellin (@aantn) November 10, 2022
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

What happens when you create a Pod in Kubernetes?

A surprisingly simple task reveals a complicated workflow that touches several components in the cluster.

Let's dive into it. pic.twitter.com/T1VGR18rRu

— Daniele Polencic — @danielepolencic@hachyderm.io (@danielepolencic) February 6, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Should you have more than one team using the same Kubernetes cluster?

Can you run untrusted workloads safely from untrusted users?

Does Kubernetes do multi-tenancy?

Let's see! pic.twitter.com/3H2BfAkuIG

— Daniele Polencic — @danielepolencic@hachyderm.io (@danielepolencic) April 10, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

In-depth understanding of Deployments in Kubernetes

When running apps on #Kubernetes, most of you must have used Deployments to manage ReplicaSet and Pods. However, its hard to say that weve used Deployments effectively.

👀https://t.co/0ou1uefMks #DevOps #CloudNative

— Ministry of Cloud 🇮🇳 (@NaveenS16) March 23, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Does Kubernetes rebalance your Pods?

If there's a node that has more space, does Kubernetes recompute and balance the workloads?

Let's have a look 👉 pic.twitter.com/VHKPUEoXd3

— Daniele Polencic — @danielepolencic@hachyderm.io (@danielepolencic) April 3, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

If you don't need Kubernetes don't use it.

What is being described here was already happening. Companies are spending too much time managing CI/CD pipelines, IaC, random bash scripts, and a whole collection of custom tooling no one wants to talk about. https://t.co/VkfMlfS1an

— Kelsey Hightower (@kelseyhightower) June 21, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kubernetes Java Tip 💡

Do you set a CPU limit for Java apps on Kubernetes? How does it impact your apps startup time? You can solve that problem with a new Kubernetes feature called "In-place Pod Vertical Scaling" in that way 👇#kubernetes #java #cpu pic.twitter.com/B3ygyozoo7

— Piotr Mińkowski (@piotr_minkowski) August 22, 2023
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Memes

??? note "Click to expand!"

<center>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Kubernetes experts be like: <a href="https://t.co/0z47Q9bdZm">pic.twitter.com/0z47Q9bdZm</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1447668514727280643?ref_src=twsrc%5Etfw">October 11, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Every kubernetes tutorial ever <a href="https://t.co/b2qNU143sZ">pic.twitter.com/b2qNU143sZ</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1488195790640140299?ref_src=twsrc%5Etfw">January 31, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Using kubernetes for single page apps <a href="https://t.co/2gW6ELi2Gi">pic.twitter.com/2gW6ELi2Gi</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1491827787455414274?ref_src=twsrc%5Etfw">February 10, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Deploying your own kubernetes cluster <a href="https://t.co/9kblyVKK1Z">pic.twitter.com/9kblyVKK1Z</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1493269070174695425?ref_src=twsrc%5Etfw">February 14, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Kubernetes path to production readiness <a href="https://t.co/OgQd5Vj8Io">pic.twitter.com/OgQd5Vj8Io</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1494355989855940612?ref_src=twsrc%5Etfw">February 17, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Deleting a stuck pod <a href="https://t.co/LxaYt0E0F6">pic.twitter.com/LxaYt0E0F6</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1495805578555310083?ref_src=twsrc%5Etfw">February 21, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">new and shiny, or old and proven? <a href="https://t.co/lPhLi651tu">pic.twitter.com/lPhLi651tu</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1500879028454105095?ref_src=twsrc%5Etfw">March 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Using kubernetes to run stateful workloads <a href="https://t.co/jHaZiCGclj">pic.twitter.com/jHaZiCGclj</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1504502948424040451?ref_src=twsrc%5Etfw">March 17, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Also how I prepare for a major cluster upgrade <a href="https://t.co/ANY2cHH0CN">pic.twitter.com/ANY2cHH0CN</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1507039723709161490?ref_src=twsrc%5Etfw">March 24, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="fr" dir="ltr">Container orchestration competition <a href="https://t.co/JPDu4BWhgZ">pic.twitter.com/JPDu4BWhgZ</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1508474276235599875?ref_src=twsrc%5Etfw">March 28, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Watching devs using Kubernetes <a href="https://t.co/uxGr2bP98c">pic.twitter.com/uxGr2bP98c</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1511011120517165064?ref_src=twsrc%5Etfw">April 4, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">When you are the only one that knows Kubernetes and are asked to help <a href="https://t.co/VIomvubkkj">pic.twitter.com/VIomvubkkj</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1569355541876559872?ref_src=twsrc%5Etfw">September 12, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Your next challenge is to write a correct kubernetes yaml file from memory <a href="https://t.co/h6FCA5iBzX">pic.twitter.com/h6FCA5iBzX</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1574428873630142467?ref_src=twsrc%5Etfw">September 26, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Everyone who gets through a successful cluster upgrade <a href="https://t.co/BDb0cVWqMh">pic.twitter.com/BDb0cVWqMh</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1585662844170915842?ref_src=twsrc%5Etfw">October 27, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Using Kubernetes + ELK stack + Prometheus to deploy a static site <a href="https://t.co/DB95WovYXU">pic.twitter.com/DB95WovYXU</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1587127455495618563?ref_src=twsrc%5Etfw">October 31, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">If you&#39;ve been there, you know. <a href="https://t.co/7CefZXfmk5">pic.twitter.com/7CefZXfmk5</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1590751237485391872?ref_src=twsrc%5Etfw">November 10, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">The average GitOps pipeline <a href="https://t.co/pexcfFMNfy">pic.twitter.com/pexcfFMNfy</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1593288371962630146?ref_src=twsrc%5Etfw">November 17, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Self inflicted pain <a href="https://t.co/V5zXOCtWj5">pic.twitter.com/V5zXOCtWj5</a></p>&mdash; Appvia (@appvia_io) <a href="https://twitter.com/appvia_io/status/1600188359422377986?ref_src=twsrc%5Etfw">December 6, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">When there&#39;s a new Kubernetes release, but you are the one upgrading all clusters <a href="https://t.co/nuII6vKfYP">pic.twitter.com/nuII6vKfYP</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1602347937459326979?ref_src=twsrc%5Etfw">December 12, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">When you say not everything has to run on Kubernetes <a href="https://t.co/QNuan5nw90">pic.twitter.com/QNuan5nw90</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1605971773878591491?ref_src=twsrc%5Etfw">December 22, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;It&#39;s Kubernetes! I know this!&quot; <a href="https://t.co/djD4Ns3iEY">pic.twitter.com/djD4Ns3iEY</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1625178301802201103?ref_src=twsrc%5Etfw">February 13, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;But think about the cost reduction&quot; <a href="https://t.co/8qWJpNgnu1">pic.twitter.com/8qWJpNgnu1</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1628802088422588417?ref_src=twsrc%5Etfw">February 23, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">everyone loves free stuff <a href="https://t.co/lcAKpc29BG">pic.twitter.com/lcAKpc29BG</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1633876132855709697?ref_src=twsrc%5Etfw">March 9, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">It&#39;s not that hard <a href="https://t.co/o6J2em6tkk">pic.twitter.com/o6J2em6tkk</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1635324886536318977?ref_src=twsrc%5Etfw">March 13, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Still cheaper than running multiple EKS clusters <a href="https://t.co/Rk1sDEzLCY">pic.twitter.com/Rk1sDEzLCY</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1636412046148354059?ref_src=twsrc%5Etfw">March 16, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">This is what happens to your SRE team when you&#39;re not considering <a href="https://twitter.com/hashtag/MultiTenancy?src=hash&amp;ref_src=twsrc%5Etfw">#MultiTenancy</a> for your <a href="https://twitter.com/hashtag/Kubernetes?src=hash&amp;ref_src=twsrc%5Etfw">#Kubernetes</a> platforms.<br><br>Adopt <a href="https://twitter.com/hashtag/MultiTenancy?src=hash&amp;ref_src=twsrc%5Etfw">#MultiTenancy</a>, save SREs&#39; life from getting paged and getting buried from the operational burden: it could be done, thanks to <a href="https://twitter.com/hashtag/Capsule?src=hash&amp;ref_src=twsrc%5Etfw">#Capsule</a> and <a href="https://twitter.com/hashtag/Kamaji?src=hash&amp;ref_src=twsrc%5Etfw">#Kamaji</a>! <a href="https://t.co/tHXWVe6mdX">pic.twitter.com/tHXWVe6mdX</a></p>&mdash; prometherion (@tranchitellad) <a href="https://twitter.com/tranchitellad/status/1642872676824776704?ref_src=twsrc%5Etfw">April 3, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Using the HPA without a metrics server <a href="https://t.co/kjCCmIDnTh">pic.twitter.com/kjCCmIDnTh</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1647993529774354432?ref_src=twsrc%5Etfw">April 17, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">In Kubernetes, you can use labels to assign key-value pairs to any resources.<br><br>Labels are ubiquitous and necessary to everyday operations such as creating services.<br><br>However, how should you name and use those labels? <a href="https://t.co/l3P1lFcTus">pic.twitter.com/l3P1lFcTus</a></p>&mdash; Daniele Polencic — @danielepolencic@hachyderm.io (@danielepolencic) <a href="https://twitter.com/danielepolencic/status/1650478895483998209?ref_src=twsrc%5Etfw">April 24, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Day in the life of a kubernetes engineer <a href="https://t.co/MgPnR8ShNd">pic.twitter.com/MgPnR8ShNd</a></p>&mdash; memenetes (@memenetes) <a href="https://twitter.com/memenetes/status/1658140291650531329?ref_src=twsrc%5Etfw">May 15, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</center>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-168051035-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-168051035-1'); </script>