gokp aims to install a GitOps Native Kubernetes Platform

gokp

gokp aims to install a GitOps Native Kubernetes Platform.

This project is a Proof of Concept centered around getting a GitOps aware Kubernetes Platform on Day 0. The installer aims to:

  • Install an HA Kubernetes cluster (AWS or Docker)
  • Install Argo CD
  • Configure Argo CD in an opinionated way
  • Export all YAML into a Git repo (GitHub only currently)
  • Deliver a "ready to go with GitOps" cluster.

The idea being that the end user just needs to start commiting to the proper directory to futher confgure the cluster. GitOps ready, from the get go!

Please keep in mind that this is a PoC and should be considered Pre-Pre-Alpha.

Take a look at the Documentation Repo for more info.

Owner
Christian Hernandez
Just doing GitOps things over at Red Hat
Christian Hernandez
Comments
  • Development Cluster Currently Broken

    Development Cluster Currently Broken

    Cannot create a development cluster currently. I get the following error

    $ gokp create-cluster development --cluster-name=chx-$RANDOM$$ --github-token=${GH_TOKEN}  --gitops-controller=fluxcd
    INFO[0000] Running checks                               
    INFO[0000] Creating temporary control plane             
    INFO[0020] Initializing Docker provider                 
    FATA[0070] action failed after 10 attempts: failed to get cert-manager object /, Kind=, /: Object 'Kind' is missing in 'unstructured object has no kind
    
  • RFE - GitOps Controller should be an option

    RFE - GitOps Controller should be an option

    Currently, gokp installs an opinionated Argo CD instance. This should be extended to also provide an opinionated Flux CD instance as well. This will give the user the ability to use either ArgoCD or FluxCD.

    • --gitops-controller=argocd
    • --gitops-controller=fluxcd

    The directory structure may or maynot stay the same. But in either case it should be opinionated for the specific controller.

  • RFE - For AWS, add a way to skip CloudFormation update/creation

    RFE - For AWS, add a way to skip CloudFormation update/creation

  • RFE - Make create-cluster hyperscaler agnostic

    RFE - Make create-cluster hyperscaler agnostic

    Currently create-cluster creates a cluster on AWS and development-cluster creates one on docker. create-cluster should take subcommands, and those sub commands are the hyperscalers/infrastructure provider.

    Example:

    • gokp create-cluster aws [options]
    • gokp create-cluster development [options]
    • gokp create-cluster azure [options]
    • gokp create-cluster gcp [options]

    After this, there should only be create-cluster and delete-cluster and development-cluster and development-delete would no longer be needed.

  • Version v0.0.3 update

    Version v0.0.3 update

    This update

    • Development cluster now only deploys 1 master and 2 nodes. Has an optional "emulate HA" mode.
    • Adds --skip-cloud-formation option for those who ran the CloudFormation already (fixes #8)
    • Label Workers of the clusters as such (was previously unlabeled)
    • Making create-cluster and delete-cluster provider agnostic. This also removed the need to have a separate development-create and development-delete subcomands. (fixes #3)
  • BUG -  couldn't get current server API group list

    BUG - couldn't get current server API group list

    Using the development mode of gokp on a Mac returns the following.

    INFO[0230] Control Plane Nodes are Online, saving Kubeconfig
    E1014 10:30:38.616046   63630 memcache.go:179] couldn't get current server API group list: Get "https://172.18.0.3:6443/api?timeout=32s": dial tcp 172.18.0.3:6443: i/o timeout
    FATA[0261] Get "https://172.18.0.3:6443/api?timeout=32s": dial tcp 172.18.0.3:6443: i/o timeout
    

    Known issue with CAPI Docker provider (CAPD) where the kubeconfig file needs tweaking.

    Potential solution: Edit the file before using it (without calling sed) in the CreateDevelK8sInstance function ~> https://github.com/christianh814/gokp/blob/main/cmd/capi/capi.go#L428-L431

  • Deleting docker cluster doesn't delete control plane

    Deleting docker cluster doesn't delete control plane

    After deleting a cluster on Docker, the delete command doesn't delete the bootstrapper container. This causes the next create-cluster to fail:

    nillsf@SHRISU-YOGA ~ % gokp delete-cluster development \ 
    --cluster-name=$MYCLUSTER --kubeconfig=/home/nillsf/.gokp/$MYCLUSTER/$MYCLUSTER.kubeconfig
    
    INFO[0000] Deleting development cluster nfcluster       
    INFO[0022] Cluster nfcluster successfully deleted       
    
    nillsf@SHRISU-YOGA ~ % gokp create-cluster development \
    --cluster-name=$MYCLUSTER --github-token=$GH_TOKEN
    
    INFO[0000] Running checks                               
    INFO[0000] Creating temporary control plane             
    FATA[0001] node(s) already exist for a cluster with the name "gokp-bootstrapper" 
    
  • RFE - Support for other Git providers

    RFE - Support for other Git providers

    Currently only GitHub is supported. It would be nice to also support Bitbucket, GitLab, and GitTea

    • --bitbucket-token=
    • --gitlab-token=
    • --gittea-token=
  • RFE - Existing Management Cluster

    RFE - Existing Management Cluster

    If the user already has a management cluster, then it should be used (instead of creating one). The default should be what it is now (create one) but a user should be given the option to use one that's already there.

    • --management-cluster=/path/to/kube.config
  • RFE, BUG - Wait for Nodes to not have Taint

    RFE, BUG - Wait for Nodes to not have Taint

    It's not enough to just wait for the nodes to be ready. There is a taint places when they are not ready and removed when they are. gokp should ALSO wait until the taint is removed.

    There was an attempt, but I never got back to it.

Related tags
Stop using install.sh! Start using install.yml! DAJE...

Daje - A general purpose Ansible dotfiles installer Configure one time and run everywhere. What is this I've never liked using a big bash script to in

Nov 14, 2022
PolarDB-X Operator is a Kubernetes extension that aims to create and manage PolarDB-X cluster on Kubernetes.

GalaxyKube -- PolarDB-X Operator PolarDB-X Operator is a Kubernetes extension that aims to create and manage PolarDB-X cluster on Kubernetes. It follo

Dec 19, 2022
Bootstrap curated Kubernetes stacks. Logging, metrics, ingress and more - delivered with gitops.

Gimlet Stack Bootstrap curated Kubernetes stacks. Logging, metrics, ingress and more - delivered with gitops. You can install logging aggregators, met

Dec 1, 2021
The Elastalert Operator is an implementation of a Kubernetes Operator, to easily integrate elastalert with gitops.

Elastalert Operator for Kubernetes The Elastalert Operator is an implementation of a Kubernetes Operator. Getting started Firstly, learn How to use el

Jun 28, 2022
The Oracle Database Operator for Kubernetes (a.k.a. OraOperator) helps developers, DBAs, DevOps and GitOps teams reduce the time and complexity of deploying and managing Oracle Databases

The Oracle Database Operator for Kubernetes (a.k.a. OraOperator) helps developers, DBAs, DevOps and GitOps teams reduce the time and complexity of deploying and managing Oracle Databases. It eliminates the dependency on a human operator or administrator for the majority of database operations.

Dec 14, 2022
Digitalocean-kubernetes-challenge - Deploy a GitOps CI/CD implementation
Digitalocean-kubernetes-challenge - Deploy a GitOps CI/CD implementation

DigitalOcean Kubernetes Challenge 2021 I chose to participate in the DigitalOcean Kubernetes Challenge in order to learn more about Kubernetes and to

Nov 9, 2022
Frisbee is a Kubernetes-native platform for exploring, testing, and benchmarking distributed applications.
Frisbee is a Kubernetes-native platform for exploring, testing, and benchmarking distributed applications.

Why Frisbee ? Frisbee is a next generation platform designed to unify chaos testing and perfomance benchmarking. We address the key pain points develo

Dec 14, 2022
ORBOS - GitOps everything
ORBOS - GitOps everything

ORBOS - GitOps everything ORBOS explained ORBITER BOOM Getting Started on Google Compute Engine In the following example we will create a kubernetes c

Dec 31, 2022
ArgoCD is widely used for enabling CD GitOps. ArgoCD internally builds manifest from source data in Git repository, and auto-sync it with target clusters.
ArgoCD is widely used for enabling CD GitOps. ArgoCD internally builds manifest from source data in Git repository, and auto-sync it with target clusters.

ArgoCD Interlace ArgoCD is widely used for enabling CD GitOps. ArgoCD internally builds manifest from source data in Git repository, and auto-sync it

Dec 14, 2022
Cluster bootstraps for GitOps
Cluster bootstraps for GitOps

Introduction Documentation Site Cluster bootstraps for Crossplane GitOps based on argocd, see main doc site for details PreRequisites K8 cluster eg ki

Mar 13, 2022
Litmus helps Kubernetes SREs and developers practice chaos engineering in a Kubernetes native way.
Litmus helps Kubernetes SREs and developers practice chaos engineering in a Kubernetes native way.

Litmus Cloud-Native Chaos Engineering Read this in other languages. ???? ???? ???? ???? Overview Litmus is a toolset to do cloud-native chaos engineer

Jan 1, 2023
The OCI Service Operator for Kubernetes (OSOK) makes it easy to connect and manage OCI services from a cloud native application running in a Kubernetes environment.

OCI Service Operator for Kubernetes Introduction The OCI Service Operator for Kubernetes (OSOK) makes it easy to create, manage, and connect to Oracle

Sep 27, 2022
An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers
An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers

Developer-oriented Continuous Delivery Product ⁣ English | 简体中文 Table of Contents Zadig Table of Contents What is Zadig Quick start How to use? How to

Oct 19, 2021
tfa is a 2fa cli tool that aims to help you to generate 2fa code on CI/CD pipelines.

tfa tfa is 2fa cli tool that aim to help you to generate 2fa code on CI/CD pipelines. You can provide secret with stdin or flag. Install brew install

Nov 27, 2022
The project aims to provide the utility for Kunlun-Cluster aka KTS

Kunlun Tool Set Description This project aims to provide the utility for Kunlun-Cluster aka 'KTS' Including but not limited to backup/restore tools...

Jul 1, 2022
ip-masq-agent-v2 aims to solve more specific networking cases, allow for more configuration options, and improve observability compared to the original.

ip-masq-agent-v2 Based on the original ip-masq-agent, v2 aims to solve more specific networking cases, allow for more configuration options, and impro

Aug 31, 2022
⚔ Personal Golang starter kit with an engineer research perspective, expressjs developer friendly, and aims for rapid app development.
⚔ Personal Golang starter kit with an engineer research perspective, expressjs developer friendly, and aims for rapid app development.

Goku (WIP; Author Only) ⚔ Personal Golang starter kit with an engineer research perspective, expressjs developer friendly, and aims for rapid app deve

Jan 6, 2022
Kubernetes OS Server - Kubernetes Extension API server exposing OS configuration like sysctl via Kubernetes API

KOSS is a Extension API Server which exposes OS properties and functionality using Kubernetes API, so it can be accessed using e.g. kubectl. At the moment this is highly experimental and only managing sysctl is supported. To make things actually usable, you must run KOSS binary as root on the machine you will be managing.

May 19, 2021
operator to install cluster manager and klusterlet.

registration-operator Minimum cluster registration and work Community, discussion, contribution, and support Check the CONTRIBUTING Doc for how to con

Dec 14, 2022