<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The Ops Community ⚙️: Rich Burroughs</title>
    <description>The latest articles on The Ops Community ⚙️ by Rich Burroughs (@richburroughs).</description>
    <link>https://community.ops.io/richburroughs</link>
    <image>
      <url>https://community.ops.io/images/AHtRGcLj0rs_9xC28Q7QxsTIBuTR4QMe60AO-mcMciU/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS8xMDU1LzY1/YjQ3NTgwLTg4MDMt/NGEyZS05ZDllLWE2/NDAyZjU1OWFmMC5q/cGc</url>
      <title>The Ops Community ⚙️: Rich Burroughs</title>
      <link>https://community.ops.io/richburroughs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/richburroughs"/>
    <language>en</language>
    <item>
      <title>Cyclops: Platform Engineering for the Rest of Us</title>
      <dc:creator>Rich Burroughs</dc:creator>
      <pubDate>Mon, 03 Feb 2025 18:46:17 +0000</pubDate>
      <link>https://community.ops.io/richburroughs/cyclops-platform-engineering-for-the-rest-of-us-2451</link>
      <guid>https://community.ops.io/richburroughs/cyclops-platform-engineering-for-the-rest-of-us-2451</guid>
      <description>&lt;p&gt;Platform engineering is possibly the biggest concept to take hold in infrastructure over the last 5+ years, and there’s a big reason why. For decades, application engineers have dealt with systems that have constantly thrown roadblocks and delays in their way. Platform engineers address this problem by building systems that enable self-service and provide useful abstractions that help those other engineers build and run their applications. As we know, enabling self-service helps both productivity and developer happiness.&lt;/p&gt;

&lt;p&gt;However, building and maintaining a platform can be expensive, and not every organization has the budget for a dedicated platform team. For organizations with platform teams, there’s an ongoing tension between either building custom tools, using open source tools, or buying commercial solutions. Each of those options requires some kind of investment, but for many teams, building platforms largely composed of open source tools is a strong choice. The team doesn’t spend a lot on software licenses and isn’t stuck maintaining all the code.&lt;/p&gt;

&lt;p&gt;In this post, we’ll look at &lt;a href="https://cyclops-ui.com/" rel="noopener noreferrer"&gt;Cyclops&lt;/a&gt;, an &lt;a href="https://github.com/cyclops-ui/cyclops" rel="noopener noreferrer"&gt;open source tool&lt;/a&gt; for building developer platforms. Cyclops lets teams deploy and manage applications using Helm charts as templates. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;The main requirement for this tutorial is a Kubernetes cluster. In this example, we’ll use &lt;a href="https://kind.sigs.k8s.io/" rel="noopener noreferrer"&gt;kind&lt;/a&gt; to provision a cluster, but feel free to use a different method if you prefer. If you’re not already using kind, you can install it using the &lt;a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation" rel="noopener noreferrer"&gt;instructions in the docs&lt;/a&gt;. You also need a local Docker-compatible daemon to use kind, like Docker, Podman, or Colima.&lt;/p&gt;

&lt;p&gt;You will also need kubectl. You can find instructions for installing kubectl in the &lt;a href="https://kubernetes.io/docs/tasks/tools/#kubectl" rel="noopener noreferrer"&gt;Kubernetes docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provision a cluster and install Cyclops
&lt;/h2&gt;

&lt;p&gt;First, provision a cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kind create cluster --name cyclops-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your kube context should already be set to point to the kind cluster. You can test that you can connect by viewing the namespaces in the cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get namespaces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, install Cyclops into your cluster with kubectl.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/cyclops-ui/cyclops/v0.15.4/install/cyclops-install.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you’ll see from the output, Cyclops is composed of Kubernetes native objects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customresourcedefinition.apiextensions.k8s.io/modules.cyclops-ui.com created
customresourcedefinition.apiextensions.k8s.io/templateauthrules.cyclops-ui.com created
customresourcedefinition.apiextensions.k8s.io/templatestores.cyclops-ui.com created
namespace/cyclops created
serviceaccount/cyclops-ctrl created
clusterrole.rbac.authorization.k8s.io/cyclops-ctrl created
clusterrolebinding.rbac.authorization.k8s.io/cyclops-ctrl created
deployment.apps/cyclops-ui created
service/cyclops-ui created
networkpolicy.networking.k8s.io/cyclops-ui created
deployment.apps/cyclops-ctrl created
service/cyclops-ctrl created
networkpolicy.networking.k8s.io/cyclops-ctrl created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There should now be two pods running in a new namespace called Cyclops. We can view them with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n cyclops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                            READY   STATUS    RESTARTS   AGE
cyclops-ctrl-7984df7589-wv4dw   1/1     Running   0          36s
cyclops-ui-64c4cdd7f7-fxnb7     1/1     Running   0          36s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first pod handles the Cyclops API, manages the CRDs, and communicates with the Kubernetes API server. The second pod runs the Cyclops web UI.&lt;/p&gt;

&lt;p&gt;Next, we will install a set of example templates that we will use to see how Cyclops works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/cyclops-ui/cyclops/v0.15.4/install/demo-templates.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, let’s connect to the Cyclops web UI. First, forward a port to it using kubectl.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl port-forward svc/cyclops-ui 3000:3000 -n cyclops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, connect to the UI with your browser at &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy Niginx with a generic app template
&lt;/h2&gt;

&lt;p&gt;For the first portion of the demo, we’ll deploy Nginx using Cyclops.&lt;/p&gt;

&lt;p&gt;Open a new terminal window/tab and create a namespace called nginx.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, go back to the Cyclops UI tab in your browser. Click &lt;em&gt;Add module&lt;/em&gt; in the upper right corner of the Cyclops screen. Think of a module in Cyclops as an application and all of the other Kubernetes resources required to run it.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/A0kvsuH4GTJfpYctROoNXBve4IZ0kz8OTHNS8WxKzZI/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3Q1NTl2/dzN6aHI0cmd2cnYw/aWhtLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/A0kvsuH4GTJfpYctROoNXBve4IZ0kz8OTHNS8WxKzZI/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3Q1NTl2/dzN6aHI0cmd2cnYw/aWhtLnBuZw" alt="the add module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we’ll select a template. Cyclops templates are Helm charts, and Cyclops can use charts from GitHub repositories, Helm chart repositories, or OCI repositories.&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;app-template&lt;/code&gt; from the &lt;em&gt;Template&lt;/em&gt; pull-down list. This generic template creates a Kubernetes deployment and service for an application.&lt;/p&gt;

&lt;p&gt;For the module name, enter &lt;code&gt;nginx&lt;/code&gt;. Click on &lt;em&gt;Advanced&lt;/em&gt;. Select the &lt;code&gt;nginx&lt;/code&gt; namespace from the &lt;em&gt;Target namespace&lt;/em&gt; pull-down menu.   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/TdDUwFaPIKFNdbPQCqzsWfqn1QZMDxz7hFophmC35q0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2tqeWx1/NjJ2ODFqNHN6b3J4/Z2Q1LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/TdDUwFaPIKFNdbPQCqzsWfqn1QZMDxz7hFophmC35q0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2tqeWx1/NjJ2ODFqNHN6b3J4/Z2Q1LnBuZw" alt="the define module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;em&gt;General&lt;/em&gt;. You can see that some defaults have been populated, like the image name version. Leave them set to the defaults. Those values are being pulled from a values.yaml file &lt;a href="https://github.com/cyclops-ui/templates/blob/main/app-template/values.yaml" rel="noopener noreferrer"&gt;in the Helm chart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You’ll see some other configurable options under &lt;em&gt;Scaling&lt;/em&gt; and &lt;em&gt;Networking&lt;/em&gt;. You can also leave those set to the defaults. Scroll down and hit the &lt;em&gt;Deploy&lt;/em&gt; button in the bottom right of the window.&lt;/p&gt;

&lt;p&gt;On the next screen, you’ll see more information about the module and its status as it’s deployed. There’s a link to the template it was deployed from and information about the Kubernetes resources that have been created.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/lj7O-6_lRkof_GavVOWd7wwuV_Nwbeq-0UWoB_0qbTY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3N0MWVq/NjZocXlqN2dmOTdi/d2diLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/lj7O-6_lRkof_GavVOWd7wwuV_Nwbeq-0UWoB_0qbTY/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3N0MWVq/NjZocXlqN2dmOTdi/d2diLnBuZw" alt="the module status screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;em&gt;nginx Deployment&lt;/em&gt; to see that one pod is running. We can confirm that info in the terminal by running this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That output should match what you saw in Cyclops.&lt;/p&gt;

&lt;p&gt;Go back to the Cyclops browser tab. Under &lt;em&gt;Actions&lt;/em&gt;, you can see several buttons for making changes to a running module. &lt;em&gt;Edit&lt;/em&gt; will let you change the configuration. &lt;em&gt;Reconcile&lt;/em&gt; will re-create the resources. &lt;em&gt;Rollback&lt;/em&gt; will revert to the previous version of the module if you have made changes. You can view the code for the module using the &lt;em&gt;Module manifest&lt;/em&gt; button, and *Rendered manifes*t lets you view the Kubernetes YAML for the running resources.&lt;/p&gt;

&lt;p&gt;Click &lt;em&gt;Edit&lt;/em&gt;, and then change the number of replicas to 2 under &lt;em&gt;Scaling&lt;/em&gt;. Then, hit the &lt;em&gt;Deploy&lt;/em&gt; button.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/80FzKuGRWRJ2-js1Puo1OhuZACJ9hBANu0a1yw9QVA8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzFwZDg2/MzV5dGw3NjV3Mmlq/a3F3LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/80FzKuGRWRJ2-js1Puo1OhuZACJ9hBANu0a1yw9QVA8/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzFwZDg2/MzV5dGw3NjV3Mmlq/a3F3LnBuZw" alt="The edit module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the status goes back to green, hit the &lt;em&gt;Rollback&lt;/em&gt; button. You’ll see a list of the module's previous generations (versions). There should just be one. Click the Rollback button for that generation, and you’ll see a diff of the changes that were made.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/iLsOkc1zk6kOHIocxPHb0Oxn87KLtJBM_JUXAKXgwu0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2c4d3ln/eHQ0a292b2xtZXhu/YWN0LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/iLsOkc1zk6kOHIocxPHb0Oxn87KLtJBM_JUXAKXgwu0/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2c4d3ln/eHQ0a292b2xtZXhu/YWN0LnBuZw" alt="The diff on the rollback screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the &lt;em&gt;OK&lt;/em&gt; button to perform the rollback.&lt;/p&gt;

&lt;p&gt;Some teams won’t want to manage changes through the Cyclops UI, of course. You can instead use Cyclops with GitOps tools like Argo CD. There’s a GitHub repo with examples &lt;a href="https://github.com/cyclops-ui/gitops-starter" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, let’s clean up. Click &lt;em&gt;Delete&lt;/em&gt;, and type in the module name to confirm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/z30GgF6Ec_iZJTml2n-rPER7C8lmDSNQtJN9yyMLrfs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2d2MTR4/eXBxMnl4MmxzMHF0/OXpwLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/z30GgF6Ec_iZJTml2n-rPER7C8lmDSNQtJN9yyMLrfs/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2d2MTR4/eXBxMnl4MmxzMHF0/OXpwLnBuZw" alt="The delete module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy Redis with Cyclops
&lt;/h2&gt;

&lt;p&gt;We’ve seen how to deploy an app with a custom Helm chart, but Cyclops can also deploy applications using existing Helm charts. Let’s look at how that works by deploying Redis using the Bitnami chart, which is included with Cyclops.&lt;/p&gt;

&lt;p&gt;At the terminal, create a namespace called &lt;code&gt;redis&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the Cyclops browser tab, click &lt;em&gt;Templates&lt;/em&gt; in the left nav bar. Type “redis” in the search box to see the info for the installed template. The source for it is the Bitnami GitHub repo, and it’s coming from the &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/0XByqmTRkgFLB2-js0xvBm97MNF2_ivru3QHWOBdDNo/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3VmeGNk/MHY4a2hvbm10YXN5/cTNyLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/0XByqmTRkgFLB2-js0xvBm97MNF2_ivru3QHWOBdDNo/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3VmeGNk/MHY4a2hvbm10YXN5/cTNyLnBuZw" alt="The template search results" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, click on &lt;em&gt;Modules&lt;/em&gt; in the left nav and then &lt;em&gt;Add module&lt;/em&gt; again. Select &lt;code&gt;redis&lt;/code&gt; from the module pulldown list, and type in “redis-cache” for the module name. Click on &lt;em&gt;Advanced&lt;/em&gt; and select &lt;code&gt;redis&lt;/code&gt; from the list of namespaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/bZK6GJ-rzPtk5TVEH5Vy73fVlcQZ7ejRaLHYl0uwmeg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzMzM2dz/dDkyaXFycjI5dWhl/bnF1LnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/bZK6GJ-rzPtk5TVEH5Vy73fVlcQZ7ejRaLHYl0uwmeg/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzLzMzM2dz/dDkyaXFycjI5dWhl/bnF1LnBuZw" alt="The add module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scroll down. You will see many other options that can be customized for the Redis install. Feel free to expand and view any that interest you, but leave them set to the defaults. Then, click the &lt;em&gt;Deploy&lt;/em&gt; button in the bottom right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/9CHQ_LjOG_5fvBnUBEWWGPrMNQa6EdgIUKOr3paO1AQ/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2M4dWYw/bno2NzV3aWp2cXVv/czdjLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/9CHQ_LjOG_5fvBnUBEWWGPrMNQa6EdgIUKOr3paO1AQ/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2M4dWYw/bno2NzV3aWp2cXVv/czdjLnBuZw" alt="The deploy module screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It may take a bit for Kubernetes to spin up all the resources, but eventually, they should all go green.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/Do3nYmVYDmaYiS3MvTCI-r3_Nmjy3nf2I1lXQwrX-9U/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2RjOGRn/OTZzMm9kZWlwY3gz/cWJoLnBuZw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/Do3nYmVYDmaYiS3MvTCI-r3_Nmjy3nf2I1lXQwrX-9U/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL2RjOGRn/OTZzMm9kZWlwY3gz/cWJoLnBuZw" alt="the module status screen" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can confirm the pods are running with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the primary/master node and three replicas like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME               READY   STATUS    RESTARTS   AGE
redis-master-0     1/1     Running   0          4m6s
redis-replicas-0   1/1     Running   0          2m21s
redis-replicas-1   1/1     Running   0          3m10s
redis-replicas-2   1/1     Running   0          2m46s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can use any Helm chart with Cyclops like this to allow users to deploy the applications they need to run. In the case of a complex module like this one, you can set default values that are needed for your team or even create a custom Helm chart that exposes fewer options.&lt;/p&gt;

&lt;p&gt;That’s it for the tutorial. To clean up, you can delete the kind cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kind delete cluster -n cyclops-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We’ve learned how to deploy applications with Cyclops using pre-existing Helm charts and custom ones, and we’ve seen how Cyclops allows teams to easily expose the abstractions they need for developers to deploy and manage their apps.&lt;/p&gt;

&lt;p&gt;Whether you’re at an organization that’s not staffed for a dedicated platform team or your platform team would like an easy way to provide self-service for developers, Cyclops could be a great fit for your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn more
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://cyclops-ui.com/docs/about/" rel="noopener noreferrer"&gt;Cyclops docs&lt;/a&gt; are a great place to start.
&lt;/li&gt;
&lt;li&gt;Check out their &lt;a href="https://github.com/cyclops-ui/cyclops" rel="noopener noreferrer"&gt;open-source repository&lt;/a&gt; and support them with a star.
&lt;/li&gt;
&lt;li&gt;There’s a &lt;a href="https://discord.com/invite/8ErnK3qDb3" rel="noopener noreferrer"&gt;community Discord&lt;/a&gt; if you’d like help or to give your feedback.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>cloudnative</category>
      <category>platformengineering</category>
    </item>
    <item>
      <title>Virtual Kubernetes clusters at PlatformCON</title>
      <dc:creator>Rich Burroughs</dc:creator>
      <pubDate>Wed, 29 Jun 2022 16:49:13 +0000</pubDate>
      <link>https://community.ops.io/richburroughs/virtual-kubernetes-clusters-at-platformcon-22d8</link>
      <guid>https://community.ops.io/richburroughs/virtual-kubernetes-clusters-at-platformcon-22d8</guid>
      <description>&lt;p&gt;Hi :)&lt;/p&gt;

&lt;p&gt;I did a talk for PlatformCON about virtual Kubernetes clusters and the open source tool vcluster. vcluster allows you to create and manage virtual clusters, which are basically a control plane inside of a namespace on a shared host cluster.&lt;/p&gt;

&lt;p&gt;In the talk I explain more about what virtual clusters are, why we need them, and some use cases. It's about 17 minutes so hopefully not too painful to get through :)&lt;/p&gt;

&lt;p&gt;Have a watch and let me know if you have questions about vcluster.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_1_iTue9GZU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>tutorials</category>
    </item>
  </channel>
</rss>
