DEV Community

Cover image for Gitpod : How to use kubectl and manage Kubernetes clusters ?
Florian Lacrampe for Stack Labs

Posted on

Gitpod : How to use kubectl and manage Kubernetes clusters ?

Introduction

Gitpod is a Ready-to-Code development platform which allow users to quickly contribute on projects. This platform is powered by VS-Code online.

GitOps is now a standard approach to manage applications and infrastructure delivery. Gitpod is very usefull for that, because you can offer to anyone a Ready-to-Use platform to administrate and contribute.

Gitpod simplifying project startup ! All the tools you use will be available in the VS-Code terminal.

Here, i will share my experience with Gitpod to administrate and contribute on Kubernetes projects.

Requirements

  • Gitpod account on gitpod.io (Or self-hosted instance)
  • Gitlab / Github account (or private Git server)
  • Working Kubernetes cluster
  • A web browser !

Getting Started

1. Init git project

First, you need to create en empty git project and open it with Gitpod.

Tips: You can install web-browser extension to quickly open git projects with Gitpod : https://www.gitpod.io/docs/browser-extension/

2. Set up .gitpod.yml

Gitpod allow user to specify environments settings like :

  • Environment Docker image
  • VS-Code extensions
  • Startup tasks

Here, we want to manage and administrate a Kubernetes cluster.

Unfortunately, official Gitpod environment image does not contain Kubernetes administration tools (kubectl, Helm, Kustomize etc..).

So, we going to change default image to use a custom image with all needed tools.

Use image from Docker Hub (Easy method !)

I recently publish a Docker image with useful tools to manage Kubernetes cluster through Gitpod.

Project : https://github.com/quadeare/gitpod-kubectl

You can test this Gitpod environement by opening this project with Gitpod :
Open in Gitpod

Create a .gitpod.yml file and copy the following content :

image: quadeare/gitpod-kubectl:latest
Enter fullscreen mode Exit fullscreen mode

After that, commit and push .gitpod.yml. Then, restart Gitpod workspace (close and open).

Use local Dockerfile (Take control !)

You can also build you own Docker image (by using Gitpod) and remain self-sufficient without having to depend on an external image.

So, you can create a simple .gitpod.yml file with the following:

image:
  file: .gitpod.Dockerfile
Enter fullscreen mode Exit fullscreen mode

Next, create .gitpod.Dockerfile like that :

FROM gitpod/workspace-base:latest

ARG KUBECTL_VERSION=v1.22.2

RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \
    chmod +x ./kubectl && \
    sudo mv ./kubectl /usr/local/bin/kubectl && \
    mkdir ~/.kube

RUN set -x; cd "$(mktemp -d)" && \
    OS="$(uname | tr '[:upper:]' '[:lower:]')" && \
    ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" && \
    curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" && \
    tar zxvf krew.tar.gz && \
    KREW=./krew-"${OS}_${ARCH}" && \
    "$KREW" install krew && \
    echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> /home/gitpod/.bashrc

Enter fullscreen mode Exit fullscreen mode

After that, commit and push .gitpod.yml/.gitpod.Dockerfile. Then, restart Gitpod workspace (close and open).

3. Add your kubeconfig as Gitpod secret

To administrate your Kubernetes cluster from Gitpod, you need to add Kubeconfig content as secret on Gitpod.

Gitpod supports encrypted, user-specific environment variables. They are stored as part of your user settings and can be used to set access tokens, or pass any other kind of user-specific information to your workspaces.

Convert Kubeconfig to base64

cat kubeconfig | base64 -w 0
Enter fullscreen mode Exit fullscreen mode

Copy Kubeconfig (base64 format) to Gitpod

image

image

You can add multiple kubeconfig secrets with same variable name (ex : K8S_CTX) by using project scope !

image

4. Configure your project to extract kubeconfig

Now, edit your .gitpod.yml file and add this following content :

tasks:
  - name: Set Glados K8s context
    command: echo $K8S_CTX | base64 -d > ~/.kube/config
Enter fullscreen mode Exit fullscreen mode

After that, commit and push .gitpod.yml. Then, restart Gitpod workspace (close and open).

Now, you should be able to administrate your Kubernetes cluster with Kubectl, Helm or even with VS-Code by using Kubernetes extension.

Kubectl and Helm commands

image

VS-Code Kubernetes extension

image

Conclusion

Gitpod can be very useful to quickly get a handle on Kubernetes clusters without having to install all tools (Kubectl, Krew plugins, Kustomize etc..).

However, it may be necessary to ask security question :

  • Are Gitpod secrets really secured ?
  • Are Gitpod workspace perfectly isolated ?
  • Is it reasonable to put kubernetes cluster connection informations on Gitpod?

In my case, i prefer to install self-hosted Gitpod to keep my secrets/workspaces in secure place, but that may not be enough.

Moreover, it should not replace an automation by continuous integration. It's very convenient to talk directly to a Kubernetes cluster, but Gitpod should not become a Kubernetes deployment solution. It should be used only for troobleshooting or testing.

Top comments (0)