sgzwiz / kube-ez

This is a simple k8s-api project. It is built on Golang and utilises the client-go library to interact with Kubernetes Cluster. It is a plug and play solution and can be used to create a k8s-api server.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Kube-ez

GitHub contributors GitHub issues Docker Docker Follow

Introduction 👋🏻

It is built on Golang and utilizes the client-go library to interact with Kubernetes Cluster. It is a plug-and-play solution and can be used to create a kube-ez server. In three easy steps, you will have a simple API to interact with your cluster. The aim is to build a simple API server that can be used to interact with any Kubernetes cluster.

In my industrial experience, I have realized that Kubernetes is a very powerful tool but, only used by a handful of developers in the organization. The problem is not grasping the concept of the cluster. My last Product Manager was much more versed in AWS than I am. I feel the reason is that there is no easier way to interact with it. This project will provide a bunch of API endpoints to perform various functions on the cluster. For now, I will have the Postman collections and API docs to achieve it, plan is to build a Dashboard on the API later.

Docker Image: kitarp29/k8s-api

Use the Docker image with tag 2.0 or above to run the kube-ez server.


Getting started ▶️

To start using the project you need a Kubernetes Cluster and should have the right access to apply changes to the cluster. The project can be run inside the cluster and from outside the cluster. We will first discuss how to run the project from inside the cluster.

Steps to follow 🪜

  • Service Account:

    We need to make a custom service account to be able to interact with the cluster. We will use this service account in our pod on which we will run the API.
    Command to make a service account:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: <Your-Custom-Name>
    EOF
    

    Or you can apply the YAML file using:

    kubectl apply -f https://raw.githubusercontent.com/kitarp29/kube-ez/main/yamls/sa.yaml
    

    We can also use the default service account. But it is not recommended.

    Verify the service account by running the following command: kubectl get serviceaccounts/Your-Custom-Name -o yaml

  • Cluster Role:

    We need to make a custom cluster role to be able to interact with the cluster. We will use this cluster role to bind to our Service Account. The role should have permission to all the resources in order for the project to run smoothly. I would advise you not to make any role and use the cluster-admin role directly. Still, if you want to create a custom role, you can do so. Here

  • Cluster Role Binding:

    We will bind the Service Account to the Cluster Role we just created. To do so the commands needed are:

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: <your-custom-name>
    subjects:
    - kind: ServiceAccount
      name: <Name-of-your-serviceaccount> 
      namespace: default
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    EOF
    

    Or you can apply the YAML file using:

    kubectl apply -f https://raw.githubusercontent.com/kitarp29/kube-ez/main/yamls/crb.yaml
    
  • Deploying the Pod

    This is it! Now that we have the service account and the cluster role binding, we can deploy the pod. We can use this command to deploy the pod:

    kubectl apply -f - <<EOF 
    apiVersion: v1
    kind: Pod
    metadata:
      name: <your-custom-name>
    spec:
      serviceAccount: <Name-of-your-serviceaccount> 
      containers:
      - name: <your-custom-name>
        image: kitarp29/k8s-api:8.0
        ports:
        - containerPort: 8000
    EOF
    

    or you can apply the YAML file using:

    kubectl apply -f https://raw.githubusercontent.com/kitarp29/kube-ez/main/yamls/pod.yaml
    
  • Port-forward:

    Now that we have the pod deployed, we can use the port-forward command to access the pod. Expose a port of the pod to the local machine. To do so, we can use the following command:

    kubectl port-forward <your-pod-name> 8000:8000
    

API will be running at localhost:8000 now.

The project is up and running🔥!


Project Features 🤯

  • Get details about any resource in the cluster.
  • Create new resources in the cluster.
  • Delete resources in the cluster.
  • Run CLI commands using the API.
  • Manage Helm Charts.
  • You can add, install, delete and update HELM charts.
  • Get live events from the cluster.
  • It is a REST API to interact with the cluster.
  • It has a health check endpoint as well.
  • More coming soon... 🚧

API Docs 📖

There are multiple endpoints in the API. You can find all the endpoints in the API Docs

Moreover you can find the Postman Collections Here 📮


Contributors Guide 🥰

Thanks for considering contributing to the project. If you have any questions, please feel free to contact me at Twitter. The Contributors Guide is available Here 📖


License 🍻

This project is licensed under the MIT license. Feel free to use it and if you want to contribute, please feel free to fork the project and make a pull request. Thanks!


FAQ 🤔

  • Is this a Unique Product?

    No, this is not a unique product. There are similar implementations made by other developers.

  • Purpose of this project?

    It's a pet project to learn Kubernetes and Golang. I wanted to build this to better understand these two technologies. I also explored Docker.

Thanks for your interest in my API :)


About

This is a simple k8s-api project. It is built on Golang and utilises the client-go library to interact with Kubernetes Cluster. It is a plug and play solution and can be used to create a k8s-api server.

License:MIT License


Languages

Language:Go 99.4%Language:Dockerfile 0.6%