···17171818For the last year, I have been working a lot in various Open Source Communities on GitHub in my free time and I have been enjoying these somehow relaxing contributions because they help me gain new knowledge on a daily basis.
19192020-After some time contributing I also got to know how kind and welcoming communities behind those projects are. These people have all one thing in common with you: They want to build great stuff in their leisure time. Especially the Astro community is the one and only I have enjoyed being in the most, since it's the most rewarding and friendly at the same time. Not all communities can achieve such a great status among OSS.
2020+After some time contributing I also got to know how kind and welcoming communities behind those projects are. These people have all one thing in common with you: They want to build great stuff in their leisure time. Especially the [Astro](https://github.com/withastro) community is the one and only I have enjoyed being in the most, since it's the most rewarding and friendly at the same time. Not all communities can achieve such a great status among OSS.
21212222Recently, I discovered another evolving project founded by [pelikhan](https://github.com/pelikhan) which aims to automatically translate all your documentation, blogs or shop sites whenever something changes with the help of AI. Whilst initially sceptical, reading more about the project in its README.md had me hooked.
2323
···1414 image: ../../../../public/blog/setup-argocd-for-kubernetes.png
1515---
16161717-Having read Vegard S. Hagen's article โ[Argo CD Kustomize with Helm](https://blog.stonegarden.dev/articles/2023/09/argocd-kustomize-with-helm/)โ and decided that their solution was not the way to go for our cluster, we jumped straight into the default Argo CD โ[Getting started](https://argo-cd.readthedocs.io/en/stable/getting_started/)โ guide. And now we will walk you through the pain of setting up Argo CD on k3s and cilium, continuing from the chapter โ[Setup Certificate Manager with Cloudflare](/blog/setup-kubernetes-with-cilium-and-cloudflare#setup-certificate-manager-with-cloudflare)โ of our most recent post โ[Setting up Kubernetes with Cilium and Cloudflare](/blog/setup-kubernetes-with-cilium-and-cloudflare)โ. In this exact recent post we also set up [Keel](https://keel.sh/) at the end, but this step will now be unnecessary because we'll use Argo CD for getting the newest state-of-the-art code from each GitHub repo. Enjoy reading!
1717+Having read Vegard S. Hagen's article โ[Argo CD Kustomize with Helm](https://blog.stonegarden.dev/articles/2023/09/argocd-kustomize-with-helm/)โ and decided that their solution was not the way to go for our cluster, we jumped straight into the default Argo CD โ[Getting started](https://argo-cd.readthedocs.io/en/stable/getting_started/)โ guide. And now we will walk you through the pain of setting up [Argo CD](https://github.com/argoproj) on [k3s](https://github.com/k3s-io) and [Cilium](https://github.com/cilium), continuing from the chapter โ[Setup Certificate Manager with Cloudflare](/blog/setup-kubernetes-with-cilium-and-cloudflare#setup-certificate-manager-with-cloudflare)โ of our most recent post โ[Setting up Kubernetes with Cilium and Cloudflare](/blog/setup-kubernetes-with-cilium-and-cloudflare)โ. In this exact recent post we also set up [Keel](https://github.com/keel-hq) at the end, but this step will now be unnecessary because we'll use Argo CD for getting the newest state-of-the-art code from each GitHub repo. Enjoy reading!
18181919:::note
2020We assume that you followed [our other blog post](/blog/setup-kubernetes-with-cilium-and-cloudflare).
···106106107107## Deactivate TSL within Argo CD
108108109109-With the certificate the connection between the client and server is secured. However, there is still a self-signed certificate within the Argo CD services, which we don't necessarily need. We can therefore deactivate the security of the Argo CD server, by editing the property `server.insecure`.
109109+With the certificate the connection between the client and server is secured. However, there is still a self-signed certificate within the [Argo CD](https://github.com/argoproj) services, which we don't necessarily need. We can therefore deactivate the security of the Argo CD server, by editing the property `server.insecure`.
110110111111In order to do that, we first run this command:
112112···165165166166## Add manifest to repository
167167168168-Now in order to create a new application in Argo CD (either UI or CLI โ we use UI cause we didn't setup CLI), we need to prepare the Git repository. Because the repository is the single source of truth, this is also the place, where we define all the kubernetes resources which should be created by Argo CD.
168168+Now in order to create a new application in [Argo CD](https://github.com/argoproj) (either UI or CLI โ we use UI cause we didn't setup CLI), we need to prepare the Git repository. Because the repository is the single source of truth, this is also the place, where we define all the kubernetes resources which should be created by Argo CD.
169169170170We recommend creating a new folder in the git repository called something like `manifest`. In this folder, we'll create a few files:
171171···261261262262## Create new application in Argo CD UI
263263264264-You'll probably see the big `NEW APP` button in the Argo CD UI. Click it and create a new application with adapted properties from below:
264264+You'll probably see the big `NEW APP` button in the UI of [Argo CD](https://github.com/argoproj). Click it and create a new application with adapted properties from below:
265265266266- Application Name: `mutanuq`
267267- Project Name: `default`
···290290291291## Celebrate with a Coffee!
292292293293-Congratulations, you've successfully set up Argo CD with k3s and Cilium! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
293293+Congratulations, you've successfully set up [Argo CD](https://github.com/argoproj) on a [k3s](https://github.com/k3s-io) cluster! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
294294295295## Continuation
296296
···273273274274## Celebrate with a Coffee!
275275276276-Congratulations, you've successfully set up Argo CD with k3s and Cilium! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
276276+Congratulations, you've successfully set up Argo CD with k3s and [Cilium](https://github.com/cilium)! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
···1414 image: ../../../../public/blog/setup-kubernetes-with-cilium-and-cloudflare.png
1515---
16161717-Working with Docker Containers can be hard. However, there are tools which enhance the management of containers, like Kubernetes. Actually, Kubernetes is the only tool to my knowledge which acts as a management software for Docker Containers. Kubernetes is well-integrated in almost all cloud providers, like Google Cloud, Azure and AWS. As a result, it has a standardized `yaml`-syntax, which is great for small developers because they can switch between `The Big Three` with low effort.
1717+Working with [Docker](https://github.com/docker) Containers can be hard. However, there are tools which enhance the management of containers, like [Kubernetes](https://github.com/kubernetes). Actually, Kubernetes is the only tool to my knowledge which acts as a management software for Docker Containers. Kubernetes is well-integrated in almost all cloud providers, like Google Cloud, Azure and AWS. As a result, it has a standardized `yaml`-syntax, which is great for small developers because they can switch between `The Big Three` with low effort.
18181919## tl;dr
2020···9898 --cluster-init
9999```
100100101101-After the installation, there should be some pods running (3). Don't be shocked if the pods are in the `ContainerCreating` or `Pending` state. This is because the pods can't communicate between each other because we disabled the CNI (`--flannel-backend=none`). We will later install Cilium, which will be the replacement of the Flannel CNI.
101101+After the installation, there should be some pods running (3). Don't be shocked if the pods are in the `ContainerCreating` or `Pending` state. This is because the pods can't communicate between each other because we disabled the CNI (`--flannel-backend=none`). We will later install [Cilium](https://github.com/cilium), which will be the replacement of the Flannel CNI.
102102103103```bash
104104kubectl get pods -A
···106106107107## Install Helm
108108109109-Helm is the package manager for Kubernetes, so you should either install it directly (follow the [Helm docs](https://helm.sh/docs/intro/install/)) or use parts of Helm which are shipped with Cilium. We chose to install Helm directly, which is easily possible with this command:
109109+Helm is the package manager for [Kubernetes](https://github.com/kubernetes), so you should either install it directly (follow the [Helm docs](https://helm.sh/docs/intro/install/)) or use parts of Helm which are shipped with Cilium. We chose to install Helm directly, which is easily possible with this command:
110110111111```bash
112112curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
···114114115115## Install Cilium
116116117117-Cilium is a networking and security software for Kubernetes. Cilium is very fast, scalable and secure because it's built upon eBPF -- a revolutionary technology that can run sandboxed programs in the Linux kernel without recompiling the kernel or loading kernel modules.
117117+[Cilium](https://github.com/cilium) is a networking and security software for Kubernetes. Cilium is very fast, scalable and secure because it's built upon eBPF -- a revolutionary technology that can run sandboxed programs in the Linux kernel without recompiling the kernel or loading kernel modules.
118118119119We could install Cilium with Helm like shown here:
120120···253253254254## Setup Certificate Manager with Cloudflare
255255256256-In order to be able to create certificates for each subdomain, it is important to apply a certificate issuer which handles certificate requests and resolves them at some provider. We chose Cloudflare as our issuer and here is the setup which you need to apply to your kubernetes cluster. For further information you can check out the [cert-manager docs](https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/).
256256+In order to be able to create certificates for each subdomain, it is important to apply a certificate issuer which handles certificate requests and resolves them at some provider. We chose [Cloudflare](https://github.com/cloudflare) as our issuer and here is the setup which you need to apply to your Kubernetes cluster. For further information you can check out the [cert-manager docs](https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/).
257257258258But first, we need to install the cert-manager by running the following command:
259259···283283 key: api-token
284284```
285285286286-You can apply a file to the Kubernetes cluster, by running this k8s (also k3s) command:
286286+You can apply a file to the [Kubernetes](https://github.com/kubernetes) cluster, by running this k8s (also k3s) command:
287287288288```bash
289289kubectl apply -f cluster-issuer.yaml
···297297298298As you may have spotted above, we also need a secret for the API token which authenticates that this issuer is allowed to request certificates. Therefore, we create a secret with an unencrypted `API Token` from Cloudflare.
299299300300-Nowadays we create a token by going to your Cloudflare dashboard, then click on your profile and select the tab `API Tokens`. Here you can generate a specific token for your issuer or use the Global API Key (not recommended any more). The recommended solution is to create a API token with two permissions (custom token):
300300+Nowadays we create a token by going to your [Cloudflare](https://github.com/cloudflare) dashboard, then click on your profile and select the tab `API Tokens`. Here you can generate a specific token for your issuer or use the Global API Key (not recommended any more). The recommended solution is to create a API token with two permissions (custom token):
301301302302- Zone - DNS - Edit
303303- Zone - Zone - Read
···711711712712## Celebrate with a Coffee!
713713714714-Congratulations, you've successfully set up Kubernetes with Cilium and Cloudflare! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
714714+Congratulations, you've successfully set up [Kubernetes](https://github.com/kubernetes) with [Cilium](https://github.com/cilium) and [Cloudflare](https://github.com/cloudflare)! You deserve a coffee break. Enjoy a well-earned cup, and if you'd like to share a virtual coffee with me, feel free to support my work on [Ko-fi](https://ko-fi.com/trueberryless). Thank you!
715715716716## Troubleshooting
717717
···20202121However, one thing that's objectively missing in my opinion is a granular way of separating broad topics inside your documentation. And I'm not alone with this subjectively general accepted opinion. [HiDeoo](https://github.com/HiDeoo) is not only one of the most active maintainers of the project, but also the author of the most and imho best plugins you can find for Starlight. And they have also noticed this missing niche functionality about topics. That's why they decided to create the [Starlight Sidebar Topics](https://github.com/hideoo/starlight-sidebar-topics) plugin early on, back in October 2024, which allows you to make a sidebar with topics. Read more about the plugin's functionalities in [its documentation](https://starlight-sidebar-topics.netlify.app/).
22222323-The one thing that bothered me personally in the early days of the plugin was the way topics were displayed in the sidebar. Because it doesn't - like I imagined a solution could look like - use some kind of dropdown menu for switching between topics, but instead always shows all topics. This design choice was, as [HiDeoo clearly points out](https://github.com/HiDeoo/starlight-sidebar-topics/issues/2#issuecomment-2410196392), very intentional and not without any reason: All topics should be visible at once. Proven by the Astro docs themselves ([Chris Swithinbank](https://github.com/delucis) implemented the ["tabbed sidebar"](https://github.com/withastro/docs/pull/9890) for the Astro v5 docs later in the same month), this approach definitely has many benefits over a dropdown menu. Nonetheless, I was still unsatisfied by this design, and so I created my own version.
2323+The one thing that bothered me personally in the early days of the plugin was the way topics were displayed in the sidebar. Because it doesn't - like I imagined a solution could look like - use some kind of dropdown menu for switching between topics, but instead always shows all topics. This design choice was, as [HiDeoo clearly points out](https://github.com/HiDeoo/starlight-sidebar-topics/issues/2#issuecomment-2410196392), very intentional and not without any reason: All topics should be visible at once. Proven by the [Astro](https://github.com/withastro) docs themselves ([Chris Swithinbank](https://github.com/delucis) implemented the ["tabbed sidebar"](https://github.com/withastro/docs/pull/9890) for the Astro v5 docs later in the same month), this approach definitely has many benefits over a dropdown menu. Nonetheless, I was still unsatisfied by this design, and so I created my own version.
24242525Copying and pasting was my strength when it came to building a new Starlight plugin for the community. And so, I did just that. I took the Starlight Sidebar Topics plugin as a starting point and just had to adapt the `Topics.astro` component, which includes the HTML for rendering the topics in the sidebar. After struggling for some time with the implementation of a satisfying enough dropdown menu, which was pure HTML + CSS but also clean to look at (sorry for the self-praise, I'm just proud of myself), I finally found a solution that I'm very satisfied with and released this new plugin under the name [Starlight Sidebar Topics Dropdown](https://github.com/trueberryless-org/starlight-sidebar-topics-dropdown) - how original.
2626
···1414tableOfContents: false
1515---
16161717-After a very interesting discussion in the [Astro Discord](https://astro.build/chat) - started by none other than core maintainer [Alex](https://github.com/alexanderniebuhr) himself (btw congratulations on this recent achievement ๐) -, I joked around that someone could write a blog about reasons why it is so difficult for many people to not only write, but also maintain a blog as a whole.
1717+After a very interesting discussion in the [Astro](https://github.com/withastro) [Discord](https://astro.build/chat) - started by none other than core maintainer [Alex](https://github.com/alexanderniebuhr) himself (btw congratulations on this recent achievement ๐) -, I joked around that someone could write a blog about reasons why it is so difficult for many people to not only write, but also maintain a blog as a whole.
18181919The man who nominated me as an Astro Support Squad - [Jacob](https://github.com/jdtjenkins) (btw thank you very much for noticing me within this awesome community ๐) - took that quite literally and wrote a blog about it. No joke. Check it out: https://jacobjenkins.codes/posts/why-is-writing-blogs-so-hard/ This is his first every blog btw (and hopefully not his last one, as I really enjoyed reading his style).
2020