DEV Community

Cover image for From Kubernetes Chaos to Calm: A Cyclops Adventure
Chirag Aggarwal
Chirag Aggarwal

Posted on

From Kubernetes Chaos to Calm: A Cyclops Adventure

Hey there, fellow coders! 👋 Ever felt like managing Kubernetes clusters was about as fun as herding cats? Well, buckle up, because we're about to dive into the world of Cyclops - the tool that promises to make Kubernetes management a walk in the park. (Spoiler alert: It actually does!)

What's This Cyclops Thing Anyway?

Cyclops Introduction Image

Cyclops is like that cool friend who always knows how to simplify complex stuff. It's a tool for managing Kubernetes clusters with a fancy GUI that even your non-tech-savvy cousin could probably figure out. (No offence to your cousin, of course.)

Imagine Kubernetes as a massive, tangled ball of yarn, and Cyclops as the patient cat that somehow helps you unravel it without getting caught in a fur-ball of confusion. It's designed for developers, system admins, and DevOps pros who'd rather not spend their days deciphering cryptic YAML files. (Because let's face it, life's too short for that much indentation.)

Getting Started: The "Fun" Part

Cyclops Coding Introduction Image

Step 1: Get Yourself a Kubernetes Cluster

First things first, you need a Kubernetes cluster. If you don't have one lying around (who does?), Minikube is your new best friend. It's like having a mini Kubernetes playground right on your laptop. Perfect for when you want to feel like a DevOps god without the fear of breaking production.

Here's how to start Minikube:

minikube start
Enter fullscreen mode Exit fullscreen mode

If you're feeling fancy, you can even specify the driver:

minikube start --driver=docker
Enter fullscreen mode Exit fullscreen mode

Step 2: Install Cyclops

Now comes the "fun" part - installing Cyclops on your cluster. Follow their installation guide, and pray to the tech gods that everything goes smoothly. (Spoiler: It probably will, but where's the drama in that?)

Here's a snippet to install Cyclops using Helm:

helm repo add cyclops https://cyclops-ui.github.io/helm-charts/
helm repo update
helm install cyclops cyclops/cyclops
Enter fullscreen mode Exit fullscreen mode

Step 3: Containerize Your App

Got an app? Great! No app? Well, time to whip one up faster than you can say "Docker." Remember, it needs a UI (even if it's just a "Hello, World!" page), and it should play nice with localhost:8881.

Here's a simple Dockerfile for a basic Node.js app:

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8881
CMD [ "node", "server.js" ]
Enter fullscreen mode Exit fullscreen mode

Now, containerize it and push it to Docker Hub. It's like gift-wrapping your app, but instead of paper and ribbons, you're using layers of filesystem and environmental variables. Festive!

docker build -t yourusername/your-awesome-app:v1 .
docker push yourusername/your-awesome-app:v1
Enter fullscreen mode Exit fullscreen mode

Step 4: Deploy with Cyclops

Fire up the Cyclops GUI on localhost. Navigate to the modules section like you're Christopher Columbus discovering the New World of Kubernetes management. Click "Add new module" and select the demo template. You'll see a screen that looks like it's straight out of a sci-fi movie, but don't panic! This is where the magic happens.

If you're more of a CLI person (we don't judge), you can use kubectl to apply your Cyclops-generated YAML:

kubectl apply -f your-cyclops-generated-config.yaml
Enter fullscreen mode Exit fullscreen mode

Step 5: Port Forwarding (Because Why Make Things Simple?)

After your service is deployed, it's time for some command-line fun. Run this magical incantation:

kubectl port-forward svc/your-awesome-app 8881:80
Enter fullscreen mode Exit fullscreen mode

Replace your-awesome-app with, well, your awesome app's name. If it doesn't work, don't freak out. Cyclops likes to keep you on your toes by defaulting to port 80. Just change it to another port and pretend that's what you meant to do all along.

The Grand Finale

Voilà! Your app should now be running on localhost:8881 (or whatever port you ended up using). Take a moment to bask in the glory of your achievement. You've just deployed an app using Cyclops, and the Kubernetes gods are smiling upon you.

To check if your app is really running (and not just hiding from you), try:

curl http://localhost:8881
Enter fullscreen mode Exit fullscreen mode

If you see your app's content, congratulations! If not, well, welcome to the wonderful world of debugging Kubernetes deployments!

Contributing to Cyclops: My Adventure with GitHub Issues

Contributing to Cyclops Image

Now that we've gone through the basics of using Cyclops, let's talk about something even cooler - contributing to the project itself! As part of this quest, I had the opportunity to work on a real GitHub issue for Cyclops. Let me tell you, it's as exciting as finding an unattended snack in the office kitchen!

The Issue: Taming the Impatient User (Including Myself)

The issue I tackled was #423: "Disable all actions while the template is loading". Sounds thrilling, right? Well, hold onto your keyboards, because it actually is pretty important!

Here's the gist: When adding a new module in Cyclops, you choose a template. But templates, like your colleague's never-ending status updates, can take a while to load. The problem was that impatient users (guilty as charged) could click around and potentially cause chaos while the template was still loading.

The Solution: Adding a Digital Straitjacket

To solve this, we needed to add some restrictions - a digital straitjacket, if you will. Here's what I did:

  1. Disabled the 'save' button while loading
  2. Disabled the 'load values from file' button
  3. Prevented users from changing the template mid-load

Here's a simplified snippet of the changes I made:

const [isLoading, setIsLoading] = useState(false);

const handleTemplateLoad = async () => {
  setIsLoading(true);
  try {
    await loadTemplate();
  } finally {
    setIsLoading(false);
  }
};

return (
  <div>
    <button onClick={handleTemplateLoad} disabled={isLoading}>
      Load Template
    </button>
    <button onClick={handleSave} disabled={isLoading}>
      Save
    </button>
    <button onClick={handleLoadValues} disabled={isLoading}>
      Load Values from File
    </button>
    <select onChange={handleTemplateChange} disabled={isLoading}>
      {/* Template options */}
    </select>
  </div>
);
Enter fullscreen mode Exit fullscreen mode

The key was using a loading state to control the UI elements. It's like putting a "Do Not Disturb" sign on your desk but for web components.

How You Can Contribute

Think you can't contribute because you're not a Cyclops expert? Nonsense! Here's a quick guide to getting started:

  1. Find an Issue: Browse the Cyclops GitHub Issues page. Look for "good first issue" or "help wanted" labels - they're the low-hanging fruit of the coding world.

  2. Dive In: Set up your environment, comment on an issue to claim it (no one likes a code stealer), and start coding. Don't forget to test your changes - untested code is like a mystery flavour jellybean.

  3. Submit and Iterate: Send in your pull request, describing your changes like you're selling them on a late-night infomercial. Be ready for feedback - it's all part of the open-source tango.

Contributing isn't just about the code - it's about learning, connecting with fellow developers, and getting that warm, fuzzy feeling of making the world a tiny bit better. Plus, it looks pretty snazzy on your resume. So why wait? Dive in and start your Cyclops adventure today!

Remember, in the world of open-source, we're all Cyclops - focused on one goal at a time, but with a vision that spans the entire Kubernetes landscape. Happy coding!

What's Next?

Now that you've dipped your toes into the Cyclops pool, why not dive deeper? Explore more of Cyclops' tools, poke around your Kubernetes cluster, break things (in a non-production environment, of course), and learn from the chaos.

And hey, if all else fails, you can always fall back on the age-old tech solution: turn it off and on again. Works every time, 60% of the time.

minikube stop
minikube start
Enter fullscreen mode Exit fullscreen mode

Happy Cycloptic adventures, and may your containers always be running!


P.S. If you found this guide helpful, consider giving Cyclops some love by starring their GitHub repo. After all, they're the reason we're not all crying into our keyboards trying to manage Kubernetes the old-fashioned way.

Top comments (0)