From dfa01403f25d29df9ce5792e8d19c45c4c5bc237 Mon Sep 17 00:00:00 2001 From: Inaki Fernandez Date: Sun, 2 Oct 2022 18:38:09 +0200 Subject: [PATCH] markdown lint complaing with these indentation of 4 spaces, but they are apparently needed by Material for MKDocs --- README.md | 3 +- docs/about.md | 18 +++--- docs/kubernetes.md | 138 ++++++++++++++++++++++----------------------- react.md | 1 + 4 files changed, 80 insertions(+), 80 deletions(-) diff --git a/README.md b/README.md index 448824ed..c9bcbfb5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ # Nubenetes: Awesome Kubernetes & Cloud + A curated list of awesome references collected since 2018. - - diff --git a/docs/about.md b/docs/about.md index 1f9b3358..6c74ab43 100644 --- a/docs/about.md +++ b/docs/about.md @@ -6,17 +6,17 @@ This web started in 2018, after finishing my first relevant project on cloud computing with a well known consulting firm. It was an international project coordinated from Munich with remote work from other european countries and regular flights. The client was a major multinational car manufacturer with a big investment in OpenShift and Cloudbees/Jenkins infrastructure. Our role was to help the client with their pretty large CI/CD ecosystem while also implementing a new **self-service developer platform**, involving areas of development and operations and within a DevOps model. **Requirements and way of working included continuous improvement, standardization, boilerplates and automation with a GitOps pattern**, a highly recommended approach specially in demanding projects like this with hundreds of real microservices, a large number of IaC & CI/CD pipelines, hundreds (thousands?) of developers and millions of end users. -Since then I try to apply in my country what I learnt from the germans and other european colleagues. +Since then I try to apply in my country what I learnt from the germans and other european colleagues. I'm not a freelancer and most of the time I work as a contractor, which in Spain means to be hired as an employee by an external company. Suggesting improvements and best practices or applying quality standards and automated solutions that work well and are easy to verify shouldn't penalize a career, but it's terribly common. I am concerned about working with some colleagues or managers who consider it a threat, generating absurd conflicts, blame games and acting in bad faith or stupidly distorting the purpose of the project. -In a service driven IT sector (with calculated ambiguities and many hidden interests) the product is the hours billed by the consultant, being almost irrelevant the **content of the job and the delivered quality**. It is thus too common to find technical solutions under the policy of applying "the most difficult, non-standard, slowest and most obfuscated way possible" as a competitive element ([the hard way](https://www.fairwinds.com/blog/never-should-you-ever-in-kubernetes-1-do-k8s-the-hard-way) and doing weird things). This does not scale. Being ambiguous in JDs (not to say dishonest) without clarifying the real content of the job is easy and very well paid. +In a service driven IT sector (with calculated ambiguities and many hidden interests) the product is the hours billed by the consultant, being almost irrelevant the **content of the job and the delivered quality**. It is thus too common to find technical solutions under the policy of applying "the most difficult, non-standard, slowest and most obfuscated way possible" as a competitive element ([the hard way](https://www.fairwinds.com/blog/never-should-you-ever-in-kubernetes-1-do-k8s-the-hard-way) and doing weird things). This does not scale. Being ambiguous in JDs (not to say dishonest) without clarifying the real content of the job is easy and very well paid. **Ambiguities about DevOps term**. Development of new ad-hoc devops tools and ad-hoc monitoring solutions should not be the role of devops specialists. DevOps professionals develop IaC and CI/CD pipelines with standard tools and code, ideally with a [cattle service model](http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/), GitOps patterns & [kubernetes](https://www.nextplatform.com/2021/08/02/kubernetes-expands-from-containers-to-infrastructure-management/#:~:text=More%20and%20more%20in%20the%20middleware%20layer%2C%20not%20in%20the%20hardware.) among other responsabilities such as application monitoring. The development of devops tools for kubernetes with i.e. client-go should be clearly mentioned in a JD as "software development of devops tools for kubernetes with client-go" (suitable for a software engineer with [client-go skills](https://itnext.io/generically-working-with-kubernetes-resources-in-go-53bce678f887), a developer of devops/kubernetes/monitoring tools). In addition, a DevOps specialist should not be a fullstack developer who occasionally does QA + DevOps + Cloud Design/Ops. Moreover, avoid confusing terms to justify these different backgrounds by creating two roles like DevOps Software Developer and DevOps SysAdmin. Maybe DevOps should be renamed as OpsDev to avoid misunderstandings. -A tech stack is not relevant compared to the way technology is managed. You could have the best tool and run into trouble by taking the risk of applying an unsupported or not recommended[^1] approach. +A tech stack is not relevant compared to the way technology is managed. You could have the best tool and run into trouble by taking the risk of applying an unsupported or not recommended[^1] approach. [^1]:For example: [OpenShift deployment using the UPI method instead of IPI](https://keithtenzer.com/openshift/openshift-4-aws-ipi-installation-getting-started-guide/#:~:text=OpenShift%20offers%20two%20possible%20deployment%20methods%3A%20IPI%20(as%20mentioned)%20and%20UPI%20(User%20Provisioned%20Infrastructure).%20The%20difference%20is%20the%20degree%20of%20automation%20and%20customization.%20IPI%20will%20not%20only%20deploy%20OpenShift%20but%20also%20all%20infrastructure%20components%20and%20configurations.) because of lack of permissions as an excuse. @@ -31,19 +31,19 @@ A tech stack is not relevant compared to the way technology is managed. You coul >[The SRE Experience Is Changing with Cloud Native:](https://thenewstack.io/how-the-sre-experience-is-changing-with-cloud-native/) > ->- From Firefighting to Prevention for SREs. ->- Empower Developers with Self-Service. ->- Facilitate Developer Autonomy. +>- From Firefighting to Prevention for SREs. +>- Empower Developers with Self-Service. +>- Facilitate Developer Autonomy. >- Adopting a New Code-Ship-Run Paradigm. -| **Site Reliability Engineer (SRE) team**| **Developers** | **Operations team** | +| **Site Reliability Engineer (SRE) team**| **Developers**| **Operations team** | |:---|:---|:---| | Provide and teach effective use of platform tooling to empower developers to be self-sufficient | Treat SREs as application operation partners, not only as first responders to incidents | Provide self-service platform deployment and observability, and enable visibility into ramifications of actions | |Document clear escalation paths for developers struggling in production | Turn to ops teams for the “paved path” or centralized developer control plane | Provide opinionated “paved path” platform or developer control plane (DCP), but allow developers to swap platform components if they also want to be accountable | Avoiding standardization, automation and improvements because rivals do not invest in them is shortsighted. It is worrying because there is considerable resistance to change along with employment discrimination to prevent new proposals from succeeding. The term DevOps first appeared in 2009. -In this service driven IT sector, cloud certifications and technical assesment tests have much more weight in the selection processes that have little to do with real work. They are mostly a wall to justify the hiring of less experienced (younger and cheaper) employees. Fundamental in any profession to learn by doing while building a career and skills with decent opportunities and without too many difficulties and barriers. +In this service driven IT sector, cloud certifications and technical assesment tests have much more weight in the selection processes that have little to do with real work. They are mostly a wall to justify the hiring of less experienced (younger and cheaper) employees. Fundamental in any profession to learn by doing while building a career and skills with decent opportunities and without too many difficulties and barriers. A consequence of these technical assessment tests is the willingness to learn how to pass them while only implementing and practicing this specific knowledge at work. If assessments are about low level concepts then there's no interest in [abstractions](https://opensource.com/article/21/9/ansible-rest-apis), frameworks and enterprise standards (real work). Similar scenario when evaluating kubernetes knowledge with manual tasks (CLI) instead of gitops pipelines (real work[^2]). @@ -51,7 +51,7 @@ A consequence of these technical assessment tests is the willingness to learn ho Inbreeding is not a good strategy in IT. Hiring people with different background and skills is a better bet. Cronyism, [kiss up kick down](https://en.wikipedia.org/wiki/Kiss_up_kick_down) and blame games hurt employee retention and economic growth. This is terrible common too. If an employee doesn't trust their manager, the company suffers. Sure, ruling through fear works, but the employee will do the bare minimum amount of work needed to keep their job (manually and without automation). -**Culture of mutual trust** is key to beating competition and increasing employee retention. When something isn't right the employee should be able to bring it up without being afraid of being fired. +**Culture of mutual trust** is key to beating competition and increasing employee retention. When something isn't right the employee should be able to bring it up without being afraid of being fired. We are in business to make money, perhaps not only creating value on financial markets with jargon like margin and cost effective, common in financially driven companies. diff --git a/docs/kubernetes.md b/docs/kubernetes.md index e864d59d..aacc54de 100644 --- a/docs/kubernetes.md +++ b/docs/kubernetes.md @@ -3,96 +3,96 @@ {==_"Kubernetes is not for application development but for platform development. Its magic is in enterprise standardization, not app portability" (Kelsey Hightower)_==} - [Introduction](#introduction) - - [Kubernetes Jobs Market](#kubernetes-jobs-market) - - [Certified Kubernetes Offerings](#certified-kubernetes-offerings) - - [The State of Cloud-Native Development](#the-state-of-cloud-native-development) - - [Kubernetes Failure Stories](#kubernetes-failure-stories) - - [Kubernetes Maturity Model](#kubernetes-maturity-model) - - [Cloud Native Learn by doing platforms](#cloud-native-learn-by-doing-platforms) - - [Kubernetes Installation Methods](#kubernetes-installation-methods) - - [Kubernetes Knowledge Hubs](#kubernetes-knowledge-hubs) - - [Kubernetes Podcasts](#kubernetes-podcasts) - - [Kubernetes Blogs](#kubernetes-blogs) - - [Spanish Kubernetes Blogs](#spanish-kubernetes-blogs) + - [Kubernetes Jobs Market](#kubernetes-jobs-market) + - [Certified Kubernetes Offerings](#certified-kubernetes-offerings) + - [The State of Cloud-Native Development](#the-state-of-cloud-native-development) + - [Kubernetes Failure Stories](#kubernetes-failure-stories) + - [Kubernetes Maturity Model](#kubernetes-maturity-model) + - [Cloud Native Learn by doing platforms](#cloud-native-learn-by-doing-platforms) + - [Kubernetes Installation Methods](#kubernetes-installation-methods) + - [Kubernetes Knowledge Hubs](#kubernetes-knowledge-hubs) + - [Kubernetes Podcasts](#kubernetes-podcasts) + - [Kubernetes Blogs](#kubernetes-blogs) + - [Spanish Kubernetes Blogs](#spanish-kubernetes-blogs) - [Kubernetes Open Source Container Orchestation](#kubernetes-open-source-container-orchestation) - - [kubeconfig](#kubeconfig) - - [Kubernetes Manifests](#kubernetes-manifests) - - [Kubernetes Quality of Service QOS](#kubernetes-quality-of-service-qos) - - [Docker and Kubernetes](#docker-and-kubernetes) - - [Kubernetes vs Docker](#kubernetes-vs-docker) - - [Kubernetes vs Docker Swarm](#kubernetes-vs-docker-swarm) - - [Kubernetes Admission Controllers](#kubernetes-admission-controllers) - - [Kubernetes Mutating Webhooks](#kubernetes-mutating-webhooks) - - [Kubernetes Cloud Controller Manager](#kubernetes-cloud-controller-manager) - - [Kubernetes Resources](#kubernetes-resources) - - [Kubernetes Pods](#kubernetes-pods) - - [Kubernetes ConfigMaps](#kubernetes-configmaps) - - [Kubernetes Secrets](#kubernetes-secrets) - - [Kubernetes Volumes](#kubernetes-volumes) - - [Kubernetes Namespaces and Multi Tenancy. Self Service Namespaces](#kubernetes-namespaces-and-multi-tenancy-self-service-namespaces) - - [Kiosk Multi-Tenancy Extension for Kubernetes](#kiosk-multi-tenancy-extension-for-kubernetes) - - [Creating Users](#creating-users) - - [Kubernetes Labels and Selectors](#kubernetes-labels-and-selectors) - - [Kubernetes Taints and Tolerations](#kubernetes-taints-and-tolerations) - - [Kubernetes Deployment, Rollling Updates and Rollbacks](#kubernetes-deployment-rollling-updates-and-rollbacks) - - [Kubernetes StatefulSet](#kubernetes-statefulset) - - [Kubernetes DaemonSets](#kubernetes-daemonsets) - - [Kubernetes Jobs and Cron Jobs](#kubernetes-jobs-and-cron-jobs) - - [Kubernetes Services](#kubernetes-services) - - [Kubernetes Deployment Strategies](#kubernetes-deployment-strategies) - - [Kubernetes API](#kubernetes-api) - - [Multi-Cluster Services API](#multi-cluster-services-api) - - [Kubernetes Health Checks/Probes. Startup, Liveness, Readiness](#kubernetes-health-checksprobes-startup-liveness-readiness) - - [Kubernetes Limits and Requests](#kubernetes-limits-and-requests) - - [Kubernetes Scheduler. Kube Scheduler](#kubernetes-scheduler-kube-scheduler) - - [Kubernetes etcd](#kubernetes-etcd) - - [Kubernetes Sidecars](#kubernetes-sidecars) - - [Kubernetes Annotations](#kubernetes-annotations) - - [Kubernetes Best Practices and Tips](#kubernetes-best-practices-and-tips) - - [Disruptions](#disruptions) - - [Cost Estimation Strategies](#cost-estimation-strategies) - - [kubecost](#kubecost) - - [Kubernetes Resource and Capacity Management. Capacity Planning](#kubernetes-resource-and-capacity-management-capacity-planning) - - [Architecting Kubernetes clusters. Node Size. Multi Clusters and Hybrid Cloud](#architecting-kubernetes-clusters-node-size-multi-clusters-and-hybrid-cloud) - - [Wide Cluster instead of Multi-Cluster](#wide-cluster-instead-of-multi-cluster) + - [kubeconfig](#kubeconfig) + - [Kubernetes Manifests](#kubernetes-manifests) + - [Kubernetes Quality of Service QOS](#kubernetes-quality-of-service-qos) + - [Docker and Kubernetes](#docker-and-kubernetes) + - [Kubernetes vs Docker](#kubernetes-vs-docker) + - [Kubernetes vs Docker Swarm](#kubernetes-vs-docker-swarm) + - [Kubernetes Admission Controllers](#kubernetes-admission-controllers) + - [Kubernetes Mutating Webhooks](#kubernetes-mutating-webhooks) + - [Kubernetes Cloud Controller Manager](#kubernetes-cloud-controller-manager) + - [Kubernetes Resources](#kubernetes-resources) + - [Kubernetes Pods](#kubernetes-pods) + - [Kubernetes ConfigMaps](#kubernetes-configmaps) + - [Kubernetes Secrets](#kubernetes-secrets) + - [Kubernetes Volumes](#kubernetes-volumes) + - [Kubernetes Namespaces and Multi Tenancy. Self Service Namespaces](#kubernetes-namespaces-and-multi-tenancy-self-service-namespaces) + - [Kiosk Multi-Tenancy Extension for Kubernetes](#kiosk-multi-tenancy-extension-for-kubernetes) + - [Creating Users](#creating-users) + - [Kubernetes Labels and Selectors](#kubernetes-labels-and-selectors) + - [Kubernetes Taints and Tolerations](#kubernetes-taints-and-tolerations) + - [Kubernetes Deployment, Rollling Updates and Rollbacks](#kubernetes-deployment-rollling-updates-and-rollbacks) + - [Kubernetes StatefulSet](#kubernetes-statefulset) + - [Kubernetes DaemonSets](#kubernetes-daemonsets) + - [Kubernetes Jobs and Cron Jobs](#kubernetes-jobs-and-cron-jobs) + - [Kubernetes Services](#kubernetes-services) + - [Kubernetes Deployment Strategies](#kubernetes-deployment-strategies) + - [Kubernetes API](#kubernetes-api) + - [Multi-Cluster Services API](#multi-cluster-services-api) + - [Kubernetes Health Checks/Probes. Startup, Liveness, Readiness](#kubernetes-health-checksprobes-startup-liveness-readiness) + - [Kubernetes Limits and Requests](#kubernetes-limits-and-requests) + - [Kubernetes Scheduler. Kube Scheduler](#kubernetes-scheduler-kube-scheduler) + - [Kubernetes etcd](#kubernetes-etcd) + - [Kubernetes Sidecars](#kubernetes-sidecars) + - [Kubernetes Annotations](#kubernetes-annotations) + - [Kubernetes Best Practices and Tips](#kubernetes-best-practices-and-tips) + - [Disruptions](#disruptions) + - [Cost Estimation Strategies](#cost-estimation-strategies) + - [kubecost](#kubecost) + - [Kubernetes Resource and Capacity Management. Capacity Planning](#kubernetes-resource-and-capacity-management-capacity-planning) + - [Architecting Kubernetes clusters. Node Size. Multi Clusters and Hybrid Cloud](#architecting-kubernetes-clusters-node-size-multi-clusters-and-hybrid-cloud) + - [Wide Cluster instead of Multi-Cluster](#wide-cluster-instead-of-multi-cluster) - [Client Libraries for Kubernetes](#client-libraries-for-kubernetes) - [Helm Kubernetes Tool](#helm-kubernetes-tool) - [Templating YAML in Kubernetes with real code. YQ YAML processor](#templating-yaml-in-kubernetes-with-real-code-yq-yaml-processor) - [Extending Kubernetes](#extending-kubernetes) - - [Adding Custom Resources. Extending Kubernetes API with Kubernetes Resource Definitions. CRD vs Aggregated API](#adding-custom-resources-extending-kubernetes-api-with-kubernetes-resource-definitions-crd-vs-aggregated-api) - - [Krew, a plugin manager for kubectl plugins](#krew-a-plugin-manager-for-kubectl-plugins) - - [OpenKruise/Kruise](#openkruisekruise) - - [Crossplane, a Universal Control Plane API for Cloud Computing. Crossplane Workloads Definitions](#crossplane-a-universal-control-plane-api-for-cloud-computing-crossplane-workloads-definitions) + - [Adding Custom Resources. Extending Kubernetes API with Kubernetes Resource Definitions. CRD vs Aggregated API](#adding-custom-resources-extending-kubernetes-api-with-kubernetes-resource-definitions-crd-vs-aggregated-api) + - [Krew, a plugin manager for kubectl plugins](#krew-a-plugin-manager-for-kubectl-plugins) + - [OpenKruise/Kruise](#openkruisekruise) + - [Crossplane, a Universal Control Plane API for Cloud Computing. Crossplane Workloads Definitions](#crossplane-a-universal-control-plane-api-for-cloud-computing-crossplane-workloads-definitions) - [Kubernetes Community](#kubernetes-community) - - [Community Forums](#community-forums) - - [Kubernetes Special Interest Groups (SIGs)](#kubernetes-special-interest-groups-sigs) - - [Kubernetes SIG's Repos](#kubernetes-sigs-repos) - - [Kubectl Plugins](#kubectl-plugins) + - [Community Forums](#community-forums) + - [Kubernetes Special Interest Groups (SIGs)](#kubernetes-special-interest-groups-sigs) + - [Kubernetes SIG's Repos](#kubernetes-sigs-repos) + - [Kubectl Plugins](#kubectl-plugins) - [Enforcing Policies and governance for kubernetes workloads with Conftest](#enforcing-policies-and-governance-for-kubernetes-workloads-with-conftest) - [Kubernetes Patterns and Antipatterns. Service Discovery](#kubernetes-patterns-and-antipatterns-service-discovery) - [Kubernetes Scheduling and Scheduling Profiles](#kubernetes-scheduling-and-scheduling-profiles) - - [Assigning Pods to Nodes. Pod Affinity and Anti-Affinity](#assigning-pods-to-nodes-pod-affinity-and-anti-affinity) - - [Pod Topology Spread Constraints and PodTopologySpread Scheduling Plugin](#pod-topology-spread-constraints-and-podtopologyspread-scheduling-plugin) + - [Assigning Pods to Nodes. Pod Affinity and Anti-Affinity](#assigning-pods-to-nodes-pod-affinity-and-anti-affinity) + - [Pod Topology Spread Constraints and PodTopologySpread Scheduling Plugin](#pod-topology-spread-constraints-and-podtopologyspread-scheduling-plugin) - [Cloud Development Kit (CDK) for Kubernetes](#cloud-development-kit-cdk-for-kubernetes) - - [AWS Cloud Development Kit (AWS CDK)](#aws-cloud-development-kit-aws-cdk) + - [AWS Cloud Development Kit (AWS CDK)](#aws-cloud-development-kit-aws-cdk) - [Serverless with OpenFaas and Knative](#serverless-with-openfaas-and-knative) - [Virtual Kubernetes Clusters](#virtual-kubernetes-clusters) - [Multi-Cluster Federation. Hybrid Cloud Setup Tools](#multi-cluster-federation-hybrid-cloud-setup-tools) - - [KubeFed](#kubefed) - - [KubeCarrier](#kubecarrier) - - [Red Hat Operator Lifecycle Manager (OLM)](#red-hat-operator-lifecycle-manager-olm) - - [Istio Service Mesh](#istio-service-mesh) + - [KubeFed](#kubefed) + - [KubeCarrier](#kubecarrier) + - [Red Hat Operator Lifecycle Manager (OLM)](#red-hat-operator-lifecycle-manager-olm) + - [Istio Service Mesh](#istio-service-mesh) - [Multi-Regional Architecture](#multi-regional-architecture) - [Kubernetes in Kubernetes](#kubernetes-in-kubernetes) - [Kubernetes Scripts](#kubernetes-scripts) - - [Kubernetes and Ansible](#kubernetes-and-ansible) + - [Kubernetes and Ansible](#kubernetes-and-ansible) - [Spot instances in Kubernetes](#spot-instances-in-kubernetes) - [Kubernetes on Windows](#kubernetes-on-windows) - [Kubernetes Incident Report Plan IRP](#kubernetes-incident-report-plan-irp) - [Kubernetes Certifications. CKA, CKAD and CKS](#kubernetes-certifications-cka-ckad-and-cks) - [Books and eBooks](#books-and-ebooks) - - [Kubernetes Patterns eBooks](#kubernetes-patterns-ebooks) - - [Famous Kubernetes ebooks of 2019](#famous-kubernetes-ebooks-of-2019) + - [Kubernetes Patterns eBooks](#kubernetes-patterns-ebooks) + - [Famous Kubernetes ebooks of 2019](#famous-kubernetes-ebooks-of-2019) - [Famous Kubernetes resources of 2019](#famous-kubernetes-resources-of-2019) - [Famous Kubernetes resources of 2020](#famous-kubernetes-resources-of-2020) - [Kubernetes Slack Channel](#kubernetes-slack-channel) diff --git a/react.md b/react.md index 986e5332..621b4278 100644 --- a/react.md +++ b/react.md @@ -1,2 +1,3 @@ # React + - [freecodecamp.org: How to Get Started With React – A Beginner's Guide](https://www.freecodecamp.org/news/get-started-with-react-for-beginners/) \ No newline at end of file