169 lines
4.0 KiB
Markdown
Executable File
169 lines
4.0 KiB
Markdown
Executable File
---
|
|
title: GitOps with Flux CD
|
|
description: Implementing GitOps workflows on Kubernetes using Flux CD
|
|
pubDate: 2025-04-19
|
|
heroImage: /blog/images/posts/prometheusk8.png
|
|
category: devops
|
|
tags:
|
|
- kubernetes
|
|
- gitops
|
|
- flux
|
|
- ci-cd
|
|
- automation
|
|
readTime: 10 min read
|
|
---
|
|
|
|
# GitOps with Flux CD
|
|
|
|
GitOps is revolutionizing the way teams deploy and manage applications on Kubernetes. This guide will walk you through implementing a GitOps workflow using Flux CD, an open-source continuous delivery tool.
|
|
|
|
## What is GitOps?
|
|
|
|
GitOps is an operational framework that takes DevOps best practices used for application development such as version control, collaboration, compliance, and CI/CD, and applies them to infrastructure automation.
|
|
|
|
With GitOps:
|
|
- Git is the single source of truth for the desired state of your infrastructure
|
|
- Changes to the desired state are declarative and version controlled
|
|
- Approved changes are automatically applied to your infrastructure
|
|
|
|
## Why Flux CD?
|
|
|
|
Flux CD is a GitOps tool that ensures that your Kubernetes cluster matches the desired state specified in a Git repository. Key features include:
|
|
|
|
- Automated sync between your Git repository and cluster state
|
|
- Support for Kustomize, Helm, and plain Kubernetes manifests
|
|
- Multi-tenancy via RBAC
|
|
- Strong security practices, including image verification
|
|
|
|
## Installation
|
|
|
|
### Prerequisites
|
|
|
|
- A Kubernetes cluster (K3s, Kind, or any other distribution)
|
|
- kubectl configured to access your cluster
|
|
- A GitHub (or GitLab/Bitbucket) account and repository
|
|
|
|
### Installing Flux
|
|
|
|
1. Install the Flux CLI:
|
|
|
|
```bash
|
|
curl -s https://fluxcd.io/install.sh | sudo bash
|
|
```
|
|
|
|
2. Export your GitHub personal access token:
|
|
|
|
```bash
|
|
export GITHUB_TOKEN=<your-token>
|
|
```
|
|
|
|
3. Bootstrap Flux:
|
|
|
|
```bash
|
|
flux bootstrap github \
|
|
--owner=<your-github-username> \
|
|
--repository=<repository-name> \
|
|
--path=clusters/my-cluster \
|
|
--personal
|
|
```
|
|
|
|
## Setting Up Your First Application
|
|
|
|
1. Create a basic directory structure in your Git repository:
|
|
|
|
```
|
|
└── clusters/
|
|
└── my-cluster/
|
|
├── flux-system/ # Created by bootstrap
|
|
└── apps/
|
|
└── podinfo/
|
|
├── namespace.yaml
|
|
├── deployment.yaml
|
|
└── service.yaml
|
|
```
|
|
|
|
2. Create a Flux Kustomization to deploy your app:
|
|
|
|
```yaml
|
|
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
|
|
kind: Kustomization
|
|
metadata:
|
|
name: podinfo
|
|
namespace: flux-system
|
|
spec:
|
|
interval: 5m0s
|
|
path: ./clusters/my-cluster/apps/podinfo
|
|
prune: true
|
|
sourceRef:
|
|
kind: GitRepository
|
|
name: flux-system
|
|
```
|
|
|
|
3. Commit and push your changes, and Flux will automatically deploy your application!
|
|
|
|
## Advanced Features
|
|
|
|
### Automated Image Updates
|
|
|
|
Flux can automatically update your deployments when new images are available:
|
|
|
|
```yaml
|
|
apiVersion: image.toolkit.fluxcd.io/v1beta1
|
|
kind: ImageRepository
|
|
metadata:
|
|
name: podinfo
|
|
namespace: flux-system
|
|
spec:
|
|
image: ghcr.io/stefanprodan/podinfo
|
|
interval: 1m0s
|
|
---
|
|
apiVersion: image.toolkit.fluxcd.io/v1beta1
|
|
kind: ImagePolicy
|
|
metadata:
|
|
name: podinfo
|
|
namespace: flux-system
|
|
spec:
|
|
imageRepositoryRef:
|
|
name: podinfo
|
|
policy:
|
|
semver:
|
|
range: 6.x.x
|
|
```
|
|
|
|
### Working with Helm Charts
|
|
|
|
Flux makes it easy to manage Helm releases:
|
|
|
|
```yaml
|
|
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
|
kind: HelmRepository
|
|
metadata:
|
|
name: bitnami
|
|
namespace: flux-system
|
|
spec:
|
|
interval: 30m
|
|
url: https://charts.bitnami.com/bitnami
|
|
---
|
|
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
|
kind: HelmRelease
|
|
metadata:
|
|
name: redis
|
|
namespace: flux-system
|
|
spec:
|
|
interval: 5m
|
|
chart:
|
|
spec:
|
|
chart: redis
|
|
version: "16.x"
|
|
sourceRef:
|
|
kind: HelmRepository
|
|
name: bitnami
|
|
values:
|
|
architecture: standalone
|
|
```
|
|
|
|
## Conclusion
|
|
|
|
Flux CD provides a powerful, secure, and flexible platform for implementing GitOps workflows. By following this guide, you'll be well on your way to managing your Kubernetes infrastructure using GitOps principles.
|
|
|
|
Stay tuned for more advanced GitOps patterns and best practices! |