All Projects → moule3053 → mck8s

moule3053 / mck8s

Licence: Apache-2.0 license
mck8s: Orchestration platform for multi-cluster k8s environments

Programming Languages

python
139335 projects - #7 most used programming language
shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to mck8s

deploy
Deploy Development Builds of Open Cluster Management (OCM) on RedHat Openshift Container Platform
Stars: ✭ 133 (+121.67%)
Mutual labels:  k8s, hybrid-cloud, multi-cloud
K8s On Raspbian
Kubernetes on Raspbian (Raspberry Pi)
Stars: ✭ 839 (+1298.33%)
Mutual labels:  kubernetes-cluster, k8s
kubernetes the easy way
Automating Kubernetes the hard way with Vagrant and scripts
Stars: ✭ 22 (-63.33%)
Mutual labels:  kubernetes-cluster, k8s
Ansible Role K3s
Ansible role for installing k3s as either a standalone server or HA cluster.
Stars: ✭ 132 (+120%)
Mutual labels:  kubernetes-cluster, k8s
Kubekey
Provides a flexible, rapid and convenient way to install Kubernetes only, both Kubernetes and KubeSphere, and related cloud-native add-ons. It is also an efficient tool to scale and upgrade your cluster.
Stars: ✭ 288 (+380%)
Mutual labels:  kubernetes-cluster, k8s
K3sup
bootstrap Kubernetes with k3s over SSH < 1 min 🚀
Stars: ✭ 4,012 (+6586.67%)
Mutual labels:  kubernetes-cluster, k8s
Owasp Workshop
owasp-workshop: Orchetraing containers with Kubernetes
Stars: ✭ 116 (+93.33%)
Mutual labels:  kubernetes-cluster, k8s
k8s-actions
Enable GitHub developers to deploy to Kubernetes service using GitHub Actions
Stars: ✭ 104 (+73.33%)
Mutual labels:  kubernetes-cluster, k8s
Kubernetes Lxd
A step-by-step guide to get kubernetes running inside an LXC container
Stars: ✭ 173 (+188.33%)
Mutual labels:  kubernetes-cluster, k8s
Katlas
A distributed graph-based platform to automatically collect, discover, explore and relate multi-cluster Kubernetes resources and metadata.
Stars: ✭ 179 (+198.33%)
Mutual labels:  kubernetes-cluster, k8s
Metalk8s
An opinionated Kubernetes distribution with a focus on long-term on-prem deployments
Stars: ✭ 217 (+261.67%)
Mutual labels:  kubernetes-cluster, k8s
Kubernetes Certified Administrator
Online resources that will help you prepare for taking the CNCF CKA 2020 "Kubernetes Certified Administrator" Certification exam. with time, This is not likely the comprehensive up to date list - please make a pull request if there something that should be added here.
Stars: ✭ 3,438 (+5630%)
Mutual labels:  kubernetes-cluster, k8s
firework8s
Firework8s is a collection of kubernetes objects (yaml files) for deploying workloads in a home lab.
Stars: ✭ 35 (-41.67%)
Mutual labels:  kubernetes-cluster, k8s
Geodesic
🚀 Geodesic is a DevOps Linux Distro. We use it as a cloud automation shell. It's the fastest way to get up and running with a rock solid Open Source toolchain. ★ this repo! https://slack.cloudposse.com/
Stars: ✭ 629 (+948.33%)
Mutual labels:  kubernetes-cluster, k8s
k8s-istio-demo
Demo showing the capabilities of Istio
Stars: ✭ 22 (-63.33%)
Mutual labels:  kubernetes-cluster, k8s
K8s Digitalocean Terraform
Deploy latest Kubernetes cluster on DigitalOcean using Terraform
Stars: ✭ 33 (-45%)
Mutual labels:  kubernetes-cluster, k8s
multi-master-kubernetes
Multi-master Kubernetes cluster on Exoscale
Stars: ✭ 65 (+8.33%)
Mutual labels:  kubernetes-cluster, k8s
ansible-role-k8s
This role render an arbitrary number of Jinja2 templates and deploys or removes them to/from Kubernetes clusters.
Stars: ✭ 26 (-56.67%)
Mutual labels:  kubernetes-cluster, k8s
K3s Ansible
Ansible playbook to deploy k3s kubernetes cluster
Stars: ✭ 153 (+155%)
Mutual labels:  kubernetes-cluster, k8s
elcarro-oracle-operator
El Carro is a new project that offers a way to run Oracle databases in Kubernetes as a portable, open source, community driven, no vendor lock-in container orchestration system. El Carro provides a powerful declarative API for comprehensive and consistent configuration and deployment as well as for real-time operations and monitoring.
Stars: ✭ 204 (+240%)
Mutual labels:  hybrid-cloud, multi-cloud

mck8s: Container orchestrator for multi-cluster Kubernetes

mck8s, short for multi-cluster Kubernetes, allows you to automate the deployment of multi-cluster applications on multiple Kubernetes clusters by offering enhanced configuration possibilities. The main aim of mck8s is maximizing resource utilization and supporting elasitcity across multiple Kubenetes clusters by providing multiple placement policies, as well as bursting, cloud resource provisioning, autoscaling and de-provisioning capabilities. mck8s builds upon other open-source software such as Kubernetes, Kubernetes Federation, kopf, serf, Cilium, Cluster API, and Prometheus.

This code is in active development and not stable, and thus not production ready.

All contributions are welcome :)

Architecture

The figure below shows the architecture of mck8s.

Quick start

Pre-requisites

  • A Kubernetes cluster to act as the mck8s management cluster (named cluster0). Since mck8s components need access to the Kubernetes control plane, managed Kubernetes offerings such as GKE are not supported at the moment.
  • Few Kubernetes clusters to be managed by the management cluster and on which workloads run. We call these workload clusters (named cluster1, cluster2, cluster3, ...). We assume that you have administrative access to all these clusters and the Kubernetes kubeconfig files of all clusters are available.
  • If traffic routing between clusters is desired, it is recommended to deploy Cilium Cluster Mesh on the workload clusters with distinct Pod CIDRs.
  • If proximity-aware placement is desired, serf should be deployed on at least one node of each workload cluster.
  • If cloud provisioning and autoscaling ia desired, cloud credentials are required. For now, we support OpenStack clusters.

Steps

Prepare

  1. Clone this repository to your computer.
  2. Copy the kubeconfig file of the management cluster as cluster0 in ~/.kube/ directory of your computer .
  3. Copy the kubeconfig files from the workload clusters to ~/.kube/ directory of your computer and rename these files as per their cluster names such as cluster1, cluster2, or cluster3, .....
  4. Make sure that the cluster, context, and user names is these files are distinct from each other.
  5. Before running prepare.sh, which assumes that there are five workload clusters, cluster1 to cluster5, edit the values.yaml file as per the number of your workload clusters and enter the IP addresses of the master nodes of your clusters.
  6. Run the prepare.sh script, which sets up Kubernetes Federation, Prometheus Operator, and Cilium. This script assumes that there are five workload clusters, cluster1 to cluster5. If you have a different number of workload clusters, please adjust the script accordingly.
  7. Copy the ~/.kube/config file to the ~/.kube/ directory of the master node of the management cluster.

Deploy the CRDs on the management cluster

  1. Switch to the cluster0 context to be able to deploy the CRDs on the management cluster.

    kubectl config use-context cluster0

  2. Create the RBAC required

    kubectl apply -f manifests/crds/01_rbac_mck8s.yaml

  3. Deploy the CRDs

    kubectl apply -f manifests/crds/

Buid Docker images of the controllers

  1. Buid the image of the Multi Cluster Scheduler

    cd multi-cluster-scheduler && docker build -t REPO_NAME/IMAGE_NAME .

  2. Build the image of the Multi Cluster HPA

    cd multi-cluster-horizontal-pod-autoscaler && docker build -t REPO_NAME/IMAGE_NAME .

  3. Build the image of the Cloud Provisioner and Cluster Autoscaler

    cd cloud-cluster-provisioner-autoscaler && docker build -t REPO_NAME/IMAGE_NAME .

  4. Build the image of the Deployment Rescheduler

    cd multi-cluster-rescheduler && docker build -t REPO_NAME/IMAGE_NAME .

Deploy the controller Deployments on the management cluster

NOTE: The pods of these controllers are going to be scheduled on the master node of the management cluster. In the manifest files below, Replace the MASTER_NODE_HOST_NAME, REPO_NAME/IMAGE_NAME, and /PATH/TO/HOME/DIRECTORY/ accordingly before running the following.

  1. Deploy the Multi Cluster Scheduler Deployment

    kubectl apply -f manifests/controllers/01_deployment_multi_cluster_scheduler.yaml

  2. Deploy the Multi Cluster HPA Deployment

    kubectl apply -f manifests/controllers/02_deployment_multi_cluster_hpa.yaml

  3. Deploy the Cloud Provisioner and Cluster Autoscaler Deployment

    kubectl apply -f manifests/controllers/03_deployment_cloud_provisioner_cluster_autoscaler.yaml

Demo: Deployment of mck8s CRDs, controllers, multicluster scheduler, and example multicluster deployment

Let's see a demo of how to deploy the multiclusterscheduler, a sample multiclusterdeployment and a multiclusterservice.

Demo: Inter-cluster traffic routing

In this demo, we show how to access a back-end application deployed on cluster3 via a front-end application deployed on cluster2.

Related Publications

[1] Mulugeta Tamiru, Guillaume Pierre, Johan Tordsson, Erik Elmroth. mck8s: An orchestration platform for geo-distributed multi-cluster environments. ICCCN 2021 - 30th International Conference on Computer Communications and Networks, Jul 2021, Athens, Greece. pp.1-12. (pdf)

Talks

[1] I gave a virtual talk titled "McK8s: Container Orchestration in Kubernetes Multi-Clusters" at KubeCon + CloudNativeCon NA 2021 https://www.youtube.com/watch?v=U1iHBZhEWUA&t=824s

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].