<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Ernest Neijenhuis on Qstars IT Blog - Cloud, Kubernetes &amp; Software Engineering</title>
        <link>https://blog.qstars.nl/authors/ernest-neijenhuis/</link>
        <description>Recent content in Ernest Neijenhuis on Qstars IT Blog - Cloud, Kubernetes &amp; Software Engineering</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Sun, 30 Mar 2025 12:00:00 +0200</lastBuildDate><atom:link href="https://blog.qstars.nl/authors/ernest-neijenhuis/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Docker about to announce Docker Module Runner</title>
        <link>https://blog.qstars.nl/posts/docker-model-runner/</link>
        <pubDate>Sun, 30 Mar 2025 12:00:00 +0200</pubDate>
        
        <guid>https://blog.qstars.nl/posts/docker-model-runner/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/docker-model-runner/docker-vs-ollama.png" alt="Featured image of post Docker about to announce Docker Module Runner" /&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docker.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker&lt;/a&gt; is about to launch &lt;em&gt;Docker Model Runner&lt;/em&gt; (DMR). This allows users to run AI large language models on their local system. Although not officially announced yet, multiple preview users have come up with their first impressions, like &lt;a class=&#34;link&#34; href=&#34;https://www.linkedin.com/feed/update/urn:li:activity:7311088837990965249/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nigel Poulton&lt;/a&gt; (author of &lt;em&gt;The Kubernetes Book&lt;/em&gt;) did on LinkedIn. Meanwhile a &lt;a class=&#34;link&#34; href=&#34;https://docker.com/llm/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DMR landing page&lt;/a&gt; has become available on the Docker website.&lt;/p&gt;
&lt;p&gt;During &lt;a class=&#34;link&#34; href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeCon / CloudNativeCon Europe 2025&lt;/a&gt; (this week in London) Docker will &lt;a class=&#34;link&#34; href=&#34;https://www.linkedin.com/posts/docker_kubecon-docker-ai-activity-7311407521515122689-iCoU?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAADCKbUB9Tke3BiuNvQwJlssCdk8-2XanZ0&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;introduce&lt;/a&gt; DMR during one of the side events.&lt;/p&gt;
&lt;h2 id=&#34;big-change&#34;&gt;Big change
&lt;/h2&gt;&lt;p&gt;This is definitely a big change for Docker. Being the oldest runtime for Docker and &lt;a class=&#34;link&#34; href=&#34;https://opencontainers.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OCI&lt;/a&gt; containers, once published in 2013 it exploded in popularity and containerization became the next big thing in compute. It was the only runtime available in the early versions of Kubernetes. However, in Kubernetes version 1.24 native Docker support was &lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io/blog/2022/05/03/dockershim-historical-context/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;dropped&lt;/a&gt; from the codebase and the community moved merely to &lt;a class=&#34;link&#34; href=&#34;https://containerd.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Containerd&lt;/a&gt; as their new favourite runtime for Kubernetes.&lt;/p&gt;
&lt;p&gt;Meanwhile Docker was moving more into the Developer workstations, by means of &lt;a class=&#34;link&#34; href=&#34;https://www.docker.com/products/docker-desktop/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker Desktop&lt;/a&gt;. This product has become very popular to run code locally in containers, as a local test environment for apps being developed, or running containerized tools.&lt;/p&gt;
&lt;p&gt;In February Docker got a &lt;a class=&#34;link&#34; href=&#34;https://www.docker.com/press-release/docker-announces-don-johnson-as-new-ceo-succeeding-scott-johnston/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;new CEO&lt;/a&gt;, named &lt;em&gt;Don Johnson&lt;/em&gt; (no, not that guy from &lt;em&gt;Miami Vice&lt;/em&gt;) who came over from Oracle. Now DMR is seeing the light soon, probably in Docker Desktop for Apple Silicon. Yes, Docker is on the move again.&lt;/p&gt;
&lt;h2 id=&#34;not-a-container&#34;&gt;Not a container
&lt;/h2&gt;&lt;p&gt;DMR will probably being introduced in Docker Desktop 4.40 for Mac. This would be a cool choice, since competitor &lt;a class=&#34;link&#34; href=&#34;https://ollama.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ollama&lt;/a&gt; showed some issues supporting their Silicon GPU&amp;rsquo;s. Docker promises to start with support for Silicon and NVidia GPU&amp;rsquo;s, which could be a game changer, since developers love to use MacBooks.&lt;/p&gt;
&lt;p&gt;If you think those models run like any other container in Docker, you&amp;rsquo;re wrong. Docker introduces a new runtime, allowing models to run natively on the system, so not from a container! So far, a small set of supported models has been mentioned, including &lt;a class=&#34;link&#34; href=&#34;https://www.llama.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Llama&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemma&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Gemma&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;https://mistral.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mistral&lt;/a&gt;. Although not running as a container, models are still stored as OCI artifacts, allowing you to use your existing container registry to store/cache models locally.&lt;/p&gt;
&lt;h2 id=&#34;new-subcommand-and-api&#34;&gt;New subcommand and API
&lt;/h2&gt;&lt;p&gt;To use DMR from the command line, a new subcommand wil be introduced: &lt;code&gt;docker model&lt;/code&gt;. This will allow you to pull, run and manage large language models. It is comparable to handling docker images, so it is easy to adapt. Using &lt;code&gt;docker model pull &amp;lt;model&amp;gt;&lt;/code&gt; you can download an LLM to your system. Once downloaded, you can start it using &lt;code&gt;docker model run &amp;lt;model&amp;gt;&lt;/code&gt;. There is also &lt;code&gt;docker model list&lt;/code&gt; and &lt;code&gt;docker model rm&lt;/code&gt; to keep things organized.&lt;/p&gt;
&lt;p&gt;Docker will provide an API to access models programmatically. The API is compatible with the &lt;a class=&#34;link&#34; href=&#34;https://platform.openai.com/docs/overview&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI API&lt;/a&gt;. This allows developers to easily migrate their code by simply changing the endpoint to &lt;em&gt;localhost&lt;/em&gt;. This is another difference compared to Ollama, which implemented its &lt;a class=&#34;link&#34; href=&#34;https://github.com/ollama/ollama/blob/main/docs/api.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;own API&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;what-about-ollama&#34;&gt;What about Ollama?
&lt;/h2&gt;&lt;p&gt;So what does this mean for Ollama? One of the good things of free and open source software is that you always can choose which tool or technology best fits your purpose. So there will be a place for both solutions. For now DMR will still be in development, while Ollama is already very mature. Also Ollama has built an impressive &lt;a class=&#34;link&#34; href=&#34;https://ollama.com/library&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;library of LLM&amp;rsquo;s&lt;/a&gt;, while DMR is still working on this. Personally I would stick to Ollama for now, but keep an eye on how DMR evolves. I expect Docker Model Runner will take another 6 to 12 months to become a serious competitor.&lt;/p&gt;
&lt;h2 id=&#34;more-information&#34;&gt;More information
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.qstars.nl/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Qstars IT&lt;/a&gt; will attend &lt;a class=&#34;link&#34; href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeCon / CloudNativeCon Europe 2025&lt;/a&gt;, in April we will publish the highlights on this blog. Meanwhile you can always contact us to help you on your journey into containerization, to prepare your code for containerization, build CI pipelines for automation, to design/build your hosting platform or develop your next cloud-ready Python application.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Herding Cattle in your Data Center?</title>
        <link>https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/</link>
        <pubDate>Wed, 04 Dec 2024 10:00:00 +0100</pubDate>
        
        <guid>https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/herding-cattle-in-dc.png" alt="Featured image of post Herding Cattle in your Data Center?" /&gt;&lt;p&gt;In most of our on-premise data centers, compute is traditionally realized by running a few large virtualization clusters (e.g. &lt;a class=&#34;link&#34; href=&#34;https://vmware.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VMware&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://nutanix.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Nutanix&lt;/a&gt;), backed by one or more shared (file+block) storage solutions and a solid network. Just add power, climate control and security, and your data center is basically ready to go.&lt;/p&gt;
&lt;p&gt;However, compute is on the move. Where virtual servers were the only/major type of workload, nowadays we also need to support hosting for Docker containers, serverless/functions, event driven solutions, webAssembly, etc&amp;hellip; Meanwhile we learned that running containerized applications is better on smaller clusters than on one single cluster: the &lt;em&gt;Pets versus Cattle&lt;/em&gt; paradigm.&lt;/p&gt;
&lt;h2 id=&#34;pets-versus-cattle&#34;&gt;Pets versus Cattle
&lt;/h2&gt;&lt;p&gt;For those who are not familiar with this concept, here is a short explanation. Once we ran servers for multiple years. We updated them periodically and applied changes when new applications/functionally was added to the server. We gave them cute names, noticed some &lt;em&gt;ECC memory warning&lt;/em&gt; in the &lt;em&gt;syslog&lt;/em&gt; of a server and remembered that we already saw the same error on this server about two months ago. After 5+ years the server got replaced and with tears in our eyes we removed the obsolete server from the rack and moved it to the &lt;em&gt;museum rack&lt;/em&gt;. We handled those servers like &lt;em&gt;pets&lt;/em&gt;, with all our love and care.&lt;/p&gt;
&lt;p&gt;A few years ago we started containerizing, and started orchestrating these workloads in clusters like &lt;a class=&#34;link&#34; href=&#34;https://docker.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Docker Swarm&lt;/a&gt; or &lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kubernetes&lt;/a&gt;. Containers were recreated faster and faster, from months to days to minutes. Although containers still have host names and IP addresses, we don’t care about it. Containers are handled like &lt;em&gt;cattle&lt;/em&gt;. Hosting became more application-centric, sysadmins moved from managing servers to managing clusters and related tools. The clusters became the new &lt;em&gt;pets&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;clusters-as-cattle&#34;&gt;Clusters as cattle
&lt;/h2&gt;&lt;p&gt;While the number of containers increased rapidly, clusters grew exponentially and became more difficult to maintain. Thanks to &lt;em&gt;DevOps&lt;/em&gt; we learned that it is easier to have multiple, smaller clusters: each team or application (group) gets its own cluster, so cluster maintenance could be delegated to the owning teams and aligned with the application release cycles. Also, when a cluster fails, only a limited set of functionality is lost, while other clusters/apps remain available. Cluster deployments become automated and available on-demand via API-call, web form and/or Infrastructure-as-Code. Our clusters now become &lt;em&gt;cattle&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;compute-as-cattle&#34;&gt;Compute as cattle
&lt;/h2&gt;&lt;p&gt;Not only container workloads are disposable, so become virtual servers. Containerization is still not a solution for all kinds of applications. For example, large database clusters and ERP systems still prefer to scale vertically and are not suitable to containerize. However it would be great to manage these servers like containers, to limit our tool set and create a universal way of managing workloads. This means that compute in our data center needs to change: virtual machines (and basically any type of workload) should be available on-demand, as cattle!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Whatever your compute demand is, it should be available as cattle”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;kubernetes-as-the-new-compute-layer&#34;&gt;Kubernetes as the new compute layer
&lt;/h2&gt;&lt;p&gt;Nowadays Kubernetes is so much more than just a container hosting platform and orchestrator. Lots of effort has been put into hosting additional compute types, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a class=&#34;link&#34; href=&#34;https://kubevirt.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeVirt&lt;/a&gt; project allows us to create and manage virtual machines as they where containers. KubeVirt requires &lt;em&gt;KVM&lt;/em&gt; enabled nodes, since it uses this hypervisor.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://spinkube.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SpinKube&lt;/a&gt; provides hosting &lt;a class=&#34;link&#34; href=&#34;https://webassembly.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;WebAssembly&lt;/a&gt; containers, enabling workloads to start within milliseconds.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://keda.sh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KEDA&lt;/a&gt; enables event driven solutions to Kubernetes (comparable to AWS Lambda, Azure Functions, etc). Whenever a call comes in, the required workload is started to handle it. Combined with WebAssembly function apps this can be very powerful.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using Kubernetes as the new compute layer for your data center is quite different from the more traditional way (large virtualization clusters). It requires both a different skill set and mind set to build and manage. Infrastructure-as-Code should be in your genes to automate everything. You also need a &lt;em&gt;portal&lt;/em&gt; to expose the available compute options and allow teams to deploy and maintain their own clusters.&lt;/p&gt;
&lt;h2 id=&#34;example-solutions&#34;&gt;Example solutions
&lt;/h2&gt;&lt;p&gt;Here are some example setups to create your new compute-as-cattle. These are commercially supported solutions, you can still build your own compute using the related open source solutions, although I don&amp;rsquo;t think this is suitable for most enterprise organizations.&lt;/p&gt;
&lt;p&gt;All examples follow a basic &lt;em&gt;pattern&lt;/em&gt;: there is a &lt;em&gt;Management Cluster&lt;/em&gt; that runs software to deploy &lt;em&gt;Workload Clusters&lt;/em&gt;. The Management Cluster also runs the Portal and API. One of the workload clusters will probably be a &lt;em&gt;Services Cluster&lt;/em&gt;, running shared services you offer to the application teams; think of your Git repositories, container registry, helm repository, CI tools, etc&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/mgmt-vs-workload-cluster.png&#34;
	width=&#34;1727&#34;
	height=&#34;1279&#34;
	srcset=&#34;https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/mgmt-vs-workload-cluster_hu_88c1f5bc2bec12c7.png 480w, https://blog.qstars.nl/posts/herding-cattle-in-your-data-center/mgmt-vs-workload-cluster_hu_51f23f8734747ac6.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Management Cluster and Workload Clusters&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;135&#34;
		data-flex-basis=&#34;324px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;suse&#34;&gt;SUSE
&lt;/h3&gt;&lt;p&gt;SUSE provides a solution based on Harvester and Rancher. Harvester enables bare metal provisioning of your physical servers and can initialize Kubernetes clusters (RKE2). Once the basic cluster is up, Rancher Prime imports the cluster and will manage it. It will also enable server virtualization (based on KubeVirt). Rancher provides a nice web interface to manage your clusters. It centralizes authentication/authorization and provides a web store for your own helm charts. Rancher also allows you to deploy clusters on popular clouds for a hybrid approach.&lt;/p&gt;
&lt;h3 id=&#34;red-hat&#34;&gt;Red Hat
&lt;/h3&gt;&lt;p&gt;The Red Hat solution uses Advanced Cluster Management for Kubernetes (ACM), combined with OpenShift (Red Hat’s Kubernetes based hosting platform). ACM allows you to provision OpenShift clusters on bare metal. OpenShift is Red Hat’s implementation of Kubernetes and includes OpenShift Virtualization to deploy and manage virtual machines. ACM can also deploy clusters on popular clouds.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Kubernetes is a proven foundation for all popular types of compute and can be provisioned as cattle to populate your on-premise data center, optionally combined with cloud for a hybrid solution. Clusters are available on-demand thanks to a portal, API and Infrastructure-as-Code. The platform is maintained by a platform team, that applies Infrastructure-as-Code and CI-pipelines to deliver the platform. The team can work in sprints, delivering a new potential version of the platform in every sprint. There is no more single/large production cluster, instead workloads are spread over numerous clusters. Cluster maintenance ahs less impact and is repeatable, more predictable and eventually automated. Outages will be smaller and will have less impact.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Running Cattle rather than Pets is a computing infrastructure best practice no matter what layer of the stack&amp;rdquo; (&lt;a class=&#34;link&#34; href=&#34;https://thenewstack.io/how-to-treat-your-kubernetes-clusters-like-cattle-not-pets/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;source&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;aside class=&#34;qstars-cta qstars-cta--cloud-native&#34; lang=&#34;en&#34;&gt;
    &lt;p class=&#34;qstars-cta__kicker&#34;&gt;From the team behind this blog&lt;/p&gt;
    &lt;h3 class=&#34;qstars-cta__title&#34;&gt;Still running pets?&lt;/h3&gt;
    &lt;div class=&#34;qstars-cta__body&#34;&gt;We move applications and infrastructure to a cloud native setup, whether
that stays in your own data centre, goes to the cloud, or ends up somewhere
in between.&lt;/div&gt;
    &lt;a class=&#34;qstars-cta__button&#34; href=&#34;https://www.qstars.nl/wat-we-doen?utm_source=blog&amp;amp;utm_medium=cta&amp;amp;utm_campaign=cloud-native&#34; rel=&#34;noopener&#34;&gt;
        &lt;span&gt;See what we do&lt;/span&gt;
        &lt;svg class=&#34;qstars-cta__arrow&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;18&#34; height=&#34;18&#34;
             fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
             stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34;&gt;
            &lt;line x1=&#34;5&#34; y1=&#34;12&#34; x2=&#34;19&#34; y2=&#34;12&#34;&gt;&lt;/line&gt;
            &lt;polyline points=&#34;12 5 19 12 12 19&#34;&gt;&lt;/polyline&gt;
        &lt;/svg&gt;
    &lt;/a&gt;
&lt;/aside&gt;

</description>
        </item>
        <item>
        <title>Crossplane: Manage your cloud like you manage Kubernetes</title>
        <link>https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/</link>
        <pubDate>Tue, 18 Jun 2024 12:00:00 +0200</pubDate>
        
        <guid>https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/crossplane-title.png" alt="Featured image of post Crossplane: Manage your cloud like you manage Kubernetes" /&gt;&lt;p&gt;Kubernetes has proven to be a very solid &lt;em&gt;orchestrator&lt;/em&gt; for itself. So&amp;hellip; why would you not orchestrate your complete infrastructure with Kubernetes? Crossplane provides a great way to do this, so you can manage your storage, databases, even other Kubernetes clusters and all other resources available outside your cluster (but within your (hybrid) cloud). Whenever you&amp;rsquo;re in a Kubernetes minded environment or not, Crossplane is a great alternative to tools like Terraform and worth evaluating on your IaC product selection.&lt;/p&gt;
&lt;h2 id=&#34;what-is-crossplane&#34;&gt;What is Crossplane?
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://crossplane.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Crossplane&lt;/a&gt; provides self-service to your developers without needing to become an infrastructure expert. For example, if you need an S3 bucket to store data, you simply create a yaml object within Kubernetes to do so, like you create a deployment or service. Here is an example manifest for it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3.aws.upbound.io/v1beta1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;your-web-bucket-a3df9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;forProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;region&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;eu-west-3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;providerConfigRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Once deployed in your Kubernetes cluster, Crossplane will pick it up and create your S3 bucket in AWS. Isn&amp;rsquo;t that neat? Within a few seconds the bucket is available:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl get buckets
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME                    READY   SYNCED   EXTERNAL-NAME           AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;your-web-bucket-a3df9   True    True     your-web-bucket-a3df9   95s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ aws s3 ls
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-05-31 07:48:26 your-web-bucket-a3df9
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is just a kind of &lt;em&gt;hello world&lt;/em&gt; example. For more complex solutions you can create a &lt;a class=&#34;link&#34; href=&#34;https://docs.crossplane.io/latest/concepts/compositions/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;composition&lt;/a&gt;, combining multiple resources. A developer can now request an instance of such a composition, like it would be a single object. You can introduce variables (&lt;em&gt;patches&lt;/em&gt;) to these compositions or add logic by adding &lt;a class=&#34;link&#34; href=&#34;https://docs.crossplane.io/latest/concepts/composition-functions/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;composition functions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can create packages of compositions, composition resource definitions, providers, functions, etc. This enables easy deployment and versioning. To help you with this, a CLI was recently introduced. This CLI allows you to create and update packages. You can also use the CLI for testing and troubleshooting.&lt;/p&gt;
&lt;p&gt;At the time of writing, Crossplane is six years old now. It is a &lt;a class=&#34;link&#34; href=&#34;https://www.cncf.io/projects/crossplane/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CNCF &lt;em&gt;incubating&lt;/em&gt; project&lt;/a&gt; and recently applied for graduation, which means there should be enough proof of maturity and should be ready to be used in &lt;a class=&#34;link&#34; href=&#34;https://github.com/crossplane/crossplane/blob/master/ADOPTERS.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;production environments&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;gitops-workflow&#34;&gt;GitOps workflow
&lt;/h2&gt;&lt;p&gt;So Crossplane provides a Kubernetes way for doing Infrastructure-as-Code. But things get even more powerful when combining Crossplane with a GitOps agent, like Argo CD or Flux CD. Now you just create objects in your Git repository, get them reviewed and merge. Next the GitOps agent will pickup your changes and create/update/delete your resources, maybe along with your application deployment.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;p&gt;Crossplane installs as a controller in your Kubernetes cluster, accompanied with a bunch of CRD&amp;rsquo;s (custom resource definitions). After installing the main controller using their helm chart, you need to add providers for your cloud platform. You also create a secret allowing Crossplane to access your cloud. Installing Crossplane is very easy and the documentation comes with some &lt;a class=&#34;link&#34; href=&#34;https://docs.crossplane.io/v1.16/getting-started/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;quick start guides for AWS, Azure and GCP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Besides the popular public cloud providers, there are also providers available for VMware vCloud, Terraform/Ansible, GitHub/GitLab/Bitbucket, Keycloak, Argo CD, OpenStack, Ceph and many others. Check the &lt;a class=&#34;link&#34; href=&#34;https://marketplace.upbound.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Crossplane Marketplace&lt;/a&gt; for a full list.&lt;/p&gt;
&lt;h2 id=&#34;crossplane-at-large&#34;&gt;Crossplane at large
&lt;/h2&gt;&lt;p&gt;If you have a large environment, the best way to manage it is by creating a dedicated Kubernetes &lt;em&gt;management&lt;/em&gt; cluster which only runs Crossplane (and probably Argo CD or Flux CD). Next tell Crossplane to deploy Kubernetes &lt;em&gt;workload&lt;/em&gt; clusters (e.g. EKS, AKS, GCE), these clusters will host your applications.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/crossplane-at-large.png&#34;
	width=&#34;1200&#34;
	height=&#34;800&#34;
	srcset=&#34;https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/crossplane-at-large_hu_34fd6187cca6dad4.png 480w, https://blog.qstars.nl/posts/crossplane-manage-your-cloud-like-you-manage-kubernetes/crossplane-at-large_hu_eeaee8649adab25.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;crossplane at large&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;150&#34;
		data-flex-basis=&#34;360px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;If you still want to provide self-service to your developers, there are multiple ways to do so, for example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install Crossplane in the workload clusters and apply RBAC roles to selectively permit developers to create resources outside the cluster.&lt;/li&gt;
&lt;li&gt;Use RBAC on the management cluster to selectively allow developers to deploy their resources.&lt;/li&gt;
&lt;li&gt;Introduce an IdP (like Backstage) to allow developers to deploy resources in their own clusters/namespaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to have more control on what your developers are allowed to do, Crossplane provides &lt;em&gt;management policies&lt;/em&gt;. Or you can add a policy agent to your cluster, like &lt;a class=&#34;link&#34; href=&#34;https://www.cncf.io/projects/kyverno/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Kyverno&lt;/a&gt;.&lt;/p&gt;
&lt;aside class=&#34;qstars-cta qstars-cta--crossplane&#34; lang=&#34;en&#34;&gt;
    &lt;p class=&#34;qstars-cta__kicker&#34;&gt;From the team behind this blog&lt;/p&gt;
    &lt;h3 class=&#34;qstars-cta__title&#34;&gt;Picking an IaC approach?&lt;/h3&gt;
    &lt;div class=&#34;qstars-cta__body&#34;&gt;We help teams choose, design and migrate their Infrastructure-as-Code setup,
whether that lands on Crossplane, Terraform or something else. Happy to do a
talk or a demo for your team too.&lt;/div&gt;
    &lt;a class=&#34;qstars-cta__button&#34; href=&#34;https://www.qstars.nl/wat-we-doen?utm_source=blog&amp;amp;utm_medium=cta&amp;amp;utm_campaign=crossplane&#34; rel=&#34;noopener&#34;&gt;
        &lt;span&gt;See what we do&lt;/span&gt;
        &lt;svg class=&#34;qstars-cta__arrow&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;18&#34; height=&#34;18&#34;
             fill=&#34;none&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;
             stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; aria-hidden=&#34;true&#34;&gt;
            &lt;line x1=&#34;5&#34; y1=&#34;12&#34; x2=&#34;19&#34; y2=&#34;12&#34;&gt;&lt;/line&gt;
            &lt;polyline points=&#34;12 5 19 12 12 19&#34;&gt;&lt;/polyline&gt;
        &lt;/svg&gt;
    &lt;/a&gt;
&lt;/aside&gt;

</description>
        </item>
        <item>
        <title>AWS Summit Amsterdam 2024 highlights and takeaways</title>
        <link>https://blog.qstars.nl/posts/aws-summit-2024-takeaways/</link>
        <pubDate>Thu, 11 Apr 2024 10:09:06 +0200</pubDate>
        
        <guid>https://blog.qstars.nl/posts/aws-summit-2024-takeaways/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/aws-summit-2024-takeaways/aws-summit-2024.png" alt="Featured image of post AWS Summit Amsterdam 2024 highlights and takeaways" /&gt;&lt;p&gt;This week the AWS Summit was in Amsterdam, and off course Qstars was there too! We attended lots of talks, strolled along the booths and had lots of nice conversations. The main topics where AI (like any IT conference nowadays) and serverless.&lt;/p&gt;
&lt;h2 id=&#34;artificial-intelligence&#34;&gt;Artificial Intelligence
&lt;/h2&gt;&lt;p&gt;There are lots of AI resources available in AWS, as demonstrated in lots of talks. We think these are worth mentioning to start your AI adventures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/q/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Amazon Q&lt;/a&gt; was introduced a few months ago and heavily promoted during the conference. This is a generative AI-powered assistent which can help you both on coding your infrastructure, as well as providing you support on all those AWS services. You can integrate it with editors like VScode (using the &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/visualstudiocode/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS Toolkit for Visual Studio Code&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/bedrock/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bedrock&lt;/a&gt; allows you to run lots of AI models, including Mistral AI, Cohere and Llama 2. This allows you to use such models within your applications. This allows you to apply AI functionallity in your own applications. E.g. you can use this to make summaries of your documents, generate images or create a virtual assistant.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/sagemaker/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SageMaker&lt;/a&gt; provides you a great way to build, train and deploy machine learning models. This is a great way to get more insights from your data. Your data analysts will love it. To get you started there is a nice tool called &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/sagemaker/studio/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SageMaker Studio&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;serverless&#34;&gt;Serverless
&lt;/h2&gt;&lt;p&gt;AWS provides serverless compute by providing &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/lambda/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lambda&lt;/a&gt;. Serverless means you don&amp;rsquo;t have to bother about the underlying infrastructure. You can just focus on running your application, AWS will do all the other stuff for you. It scales automatically and you pay per request. Many languages are supported, including Java, Python and Node.js.&lt;/p&gt;
&lt;p&gt;Lambda really shines in distributed applications. This means that you build a workflow based on existing cloud resources, where Lambda is the resource to insert your custom code. To demonstrate this here is a simple example workflow: a user can upload documents to an S3 bucket. Whenever a document is uploaded, a lambda function is triggered, which extracts the document title and put it in a DynamoDB table. Meanwhile also Bedrock is called to add a summary. To allow scaling up, you may decide to add queues to improve/shape the flow.&lt;/p&gt;
&lt;p&gt;There are multiple tools available to build such workflows, we think these are the most interesting ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Workflow Studio&lt;/a&gt; is a low-code IDE to build a distributed application with &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/step-functions/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS Step Functions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/application-composer/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Application Composer&lt;/a&gt; allows you to generate infrastructure-as-code using the &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/serverless/sam/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Serverless Application Model&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;takeaways&#34;&gt;Takeaways
&lt;/h2&gt;&lt;h3 id=&#34;master-at-least-one-cloud-provider&#34;&gt;Master at least one cloud provider
&lt;/h3&gt;&lt;p&gt;Cloud has become mature, every company should at least explore the opportunities to benefit from the cloud. Whether you&amp;rsquo;re into infrastructure, software development of data analytics, you should know how to use at least one cloud. Initially it doesn&amp;rsquo;t matter what cloud provider you choose; once you know the possibilities of a single cloud provider, you can better select the most appropriate cloud provider for your needs. Also learn how to deploy your cloud resources using an Infrastructure-as-Code, for example Terraform.&lt;/p&gt;
&lt;h3 id=&#34;become-familiar-with-ai&#34;&gt;Become familiar with AI
&lt;/h3&gt;&lt;p&gt;Artificial Intelligence (AI) is evolving and already provides lots of intesting features for you. Whether you include AI functions within the apps you develop, or use generative AI to assist coding your infrastructure, embrace the possibilities. Coding has become so much easier. And if you don&amp;rsquo;t trust publicly available services, run an LLM on your own laptop (e.g. with Ollama) or in your own datacenter or private cloud.&lt;/p&gt;
&lt;h3 id=&#34;forget-server-virtualization-embrace-the-real-cloud&#34;&gt;Forget server virtualization, embrace the real cloud
&lt;/h3&gt;&lt;p&gt;AWS provides &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/ec2/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EC2&lt;/a&gt; (Elastic Compute) so you can run your applications on virtual machines. But this is basically just outsourcing your server hosting. Explore container hosting (like &lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/eks/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EKS&lt;/a&gt;) and serverless for your ever demanding compute needs.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>KubeCon 2024 takeaways</title>
        <link>https://blog.qstars.nl/posts/kubecon-eu-2024-takeaways/</link>
        <pubDate>Fri, 05 Apr 2024 10:09:06 +0200</pubDate>
        
        <guid>https://blog.qstars.nl/posts/kubecon-eu-2024-takeaways/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/kubecon-eu-2024-takeaways/qstars-team-at-kubecon-2024.png" alt="Featured image of post KubeCon 2024 takeaways" /&gt;&lt;p&gt;Another &lt;a class=&#34;link&#34; href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeCon / CloudNativeCon Europe 2024&lt;/a&gt;, this time in Paris. And of course Qstars attended this great conference! We joined with five people to experience the latest developments on the &lt;a class=&#34;link&#34; href=&#34;https://landscape.cncf.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cloud native landscape&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ai-ai-ai&#34;&gt;AI, AI, AI
&lt;/h2&gt;&lt;p&gt;In the first two minutes it became clear that Artificial Intelligence (AI) is the absolute main topic for this conference. AI is everywhere nowadays, and we (as platform engineers) have to deal with that. How can we prepare our infrastructure to handle these AI workloads? What are the best practices in terms of security, performance and scalability?&lt;/p&gt;
&lt;p&gt;No surprise GPU producent &lt;a class=&#34;link&#34; href=&#34;https://www.nvidia.com/en-us/ai-data-science/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVIDIA&lt;/a&gt; is one of the main sponsors of this conference. They provide the hardware and drives that are needed for running AI models. GPU&amp;rsquo;s are getting more optimized for AI workloads. One of the changes is that you can now share a GPU to run multiple workloads in parallel, making it possible to share it over multiple pods of your Kubernetes cluster. Lots of effort has been put into resource management, including &lt;a class=&#34;link&#34; href=&#34;https://github.com/NVIDIA/k8s-dra-driver&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVIDIA DRA&lt;/a&gt; (Dynamic Reource Allocation) and &lt;a class=&#34;link&#34; href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DRA functions within Kubernetes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Running AI models has become easier thanks to some intesting tools. One of them is &lt;a class=&#34;link&#34; href=&#34;https://ollama.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ollama&lt;/a&gt;, a simple docker-look-a-like tool to download and run models on a local machine (with a GPU). Be sure to give it a try on your own laptop, combining it with the &lt;a class=&#34;link&#34; href=&#34;https://continue.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Continue&lt;/a&gt; plugin on Visual Studio Code you get a local &lt;em&gt;Copilot&lt;/em&gt; experience without sending code out to a remote party; all the magic happens on your own laptop!&lt;/p&gt;
&lt;h2 id=&#34;forget-the-operating-system-kubernetes-is-your-new-base&#34;&gt;Forget the operating system, Kubernetes is your new base
&lt;/h2&gt;&lt;p&gt;Kubernetes is becoming the new base layer for your compute. Yes, there will be some linux down there, but that&amp;rsquo;s merely firmware nowadays. Kubernetes not only runs containers, but also WASM stacks, virtual machines and even &lt;em&gt;serverless&lt;/em&gt;, so all your favourite cloud compute options are now available on one single platform, even on-prem. Let&amp;rsquo;s take a quick look on a few of these.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kubevirt.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeVirt&lt;/a&gt; is already out there for a while and has even been adopted into Red Hat OpenShift. With KubeVirt you can run virtual machines on your Kubernetes cluster, for those workloads that you can&amp;rsquo;t or don&amp;rsquo;t want to containerize yet. It uses libvirt to run the virtual machines on your cluster nodes.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://webassembly.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Web Assembly&lt;/a&gt; or (WASM) is a rather new technology that allows you to create very small &lt;em&gt;stacks&lt;/em&gt; of code. It was originally created to run code in web browsers (client side), however it appears to be very powerfull for server side applications as well. One of the great features of a Web Assembly stack is the boot time, typically less then a millisecond. This is great for hosting serverless applications. One of the emerging tools for this is &lt;a class=&#34;link&#34; href=&#34;https://spinkube.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;SpinKube&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://keda.sh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KEDA&lt;/a&gt; (Kubernetes Event-Driven Autoscaling) is another way to run your apps in a serverless way. Based on triggers, KEDA can scale the number of pods up or down based on the load. It also comes with a whole bunch of built-in scalers for databases, messaging, pipelines, etc. This makes your landscape very flexible and cost effective.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://karpenter.sh&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Karpenter&lt;/a&gt; is a great tool to automatically scale your whole Kubernetes cluster. Depending on the requested load it scales your workers nodes up and down, again providing a flexible and cost efficient way of running your workloads.&lt;/p&gt;
&lt;h2 id=&#34;observability&#34;&gt;Observability
&lt;/h2&gt;&lt;p&gt;So, &lt;em&gt;observability&lt;/em&gt; is everything related to collecting, filtering, storing and visualising metrics, logs and traces. The more you automate, the more you need to keep an eye on, so observability is hotter than ever before.&lt;/p&gt;
&lt;p&gt;To retreive all metrics from the bottom of your applications, eBPF is the way to go. The kernel provides a set of hooks for tracing and instrumentation. You can dynamically insert some code into the kernel to call these hooks and report back the results to a pod that runs a collector. This collector forwards all metrics to your favourite monitoring stack. A nice tool to explore the possibilities of eBPF is &lt;a class=&#34;link&#34; href=&#34;https://bumblebee.io&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bumblebee&lt;/a&gt;, as demonstrated at one of the workshops during the conference.&lt;/p&gt;
&lt;p&gt;Maybe the best way to collect, filter and forward all monitoring data is &lt;a class=&#34;link&#34; href=&#34;https://opentelemetry.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenTelemetry&lt;/a&gt;. There are different ways to collect, including running a collector side-car with your app or use the eBPF-collector to collect directly from the kernel.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://prometheus.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Prometheus&lt;/a&gt; is still a proven tool to store all your metrics in time. Meanwhile much effort has been put into the integration between Prometheus and OpenTelemetry. Combined with tools like &lt;a class=&#34;link&#34; href=&#34;https://grafana.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Grafana&lt;/a&gt; you can build state-of-the-art dashboards for your applications and infrastructure.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The cloud native community is 10 years old now and still growing rapidly. It has become a great ecosystem which can truly help organisations to run their applications faster, more secure and cost effective. Whenever you need to select a new tool for a solution, always explore the &lt;a class=&#34;link&#34; href=&#34;https://landscape.cncf.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CNCF landscape&lt;/a&gt; first!&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Qstars to attend KubeCon 2024</title>
        <link>https://blog.qstars.nl/posts/qstars-to-attend-kubecon-2024/</link>
        <pubDate>Wed, 27 Mar 2024 13:28:26 +0100</pubDate>
        
        <guid>https://blog.qstars.nl/posts/qstars-to-attend-kubecon-2024/</guid>
        <description>&lt;img src="https://blog.qstars.nl/posts/qstars-to-attend-kubecon-2024/qstars-to-attend-kubecon-2024.png" alt="Featured image of post Qstars to attend KubeCon 2024" /&gt;&lt;p&gt;Another &lt;a class=&#34;link&#34; href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;KubeCon/CloudNativeCon&lt;/a&gt; is upcoming in Europe, this time Paris is the city hosting this big event. Alphons, Ernest, Luuk, RobV and Tom will travel to the city of light to bring back the latest trends and developments. And hopefully we will meet you all there as well! We&amp;rsquo;re eager to go. And once back we will report our findings on this blog again, and maybe even focus on some subjects in detail.&lt;/p&gt;
&lt;p&gt;Looking forward to the conference, there are some important themes to mention:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform engineering&lt;/li&gt;
&lt;li&gt;Observability and eBPF&lt;/li&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;platform-engineering&#34;&gt;Platform engineering
&lt;/h2&gt;&lt;p&gt;Last year was &lt;em&gt;platform engineering year&lt;/em&gt;, this subject hit every IT conference and we saw customers discussing, using and evaluating this. Still there are lots of developments going on, so it&amp;rsquo;s good to check out some related talks. Kubernetes seems to be one of the best platforms to adopt this best practice, however this merely depends on the IDP (Internal Developer Platform) you&amp;rsquo;re using. Is Backstage really to best IDP available? If so, are there any improvements on deploying and managing this? Where is the community heading to? And what alternatives are there? Lots to consider, so be sure to attend &lt;em&gt;BackstageCon&lt;/em&gt; of de &lt;em&gt;Platform Engineering Day&lt;/em&gt; on Tuesday, or join a few talks of the &lt;em&gt;Platform Engineering&lt;/em&gt; track during the rest of the conference.&lt;/p&gt;
&lt;h2 id=&#34;observability-and-ebpf&#34;&gt;Observability and eBPF
&lt;/h2&gt;&lt;p&gt;&lt;em&gt;eBPF&lt;/em&gt; provides a neat way to expose all kinds of data and metrics from your Kubernetes cluster, on a very detailed level, up to processes within your pods. In the world of &lt;em&gt;observability&lt;/em&gt;, eBPF is currently one of the hottest themes. Last year we saw lots of possibilities and experimental tools on this. Meanwhile some tools became more mature and are ready to apply on your production workloads, taking away most complexity of eBPF. So what are these tools? Which do best fit to your clusters? And what value do they add to your ecosystem? Join &lt;em&gt;Observability day&lt;/em&gt; on Tuesday or one of the &lt;em&gt;observability&lt;/em&gt; talks during the conference.&lt;/p&gt;
&lt;h2 id=&#34;ai&#34;&gt;AI
&lt;/h2&gt;&lt;p&gt;So&amp;hellip; &lt;em&gt;Artificial intelligence&lt;/em&gt; remains popular and increases your workloads. More applications are using AI models to perform all kinds of calculations and data analysis. So your clusters need GPU nodes to run these workloads. However, they might have special requirements and you may need to think about centralizing models. How do you handle this? What is the best way to manage this? What tools can help you? And what to expect in the upcoming years on these vast growing workloads? Be sure to attend some &lt;em&gt;ML/AI + Data Processing&lt;/em&gt; talks.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
