πŸš€ Kubernetes GitOps and CI/CD

Kubernetes GitOps and CI/CD Implementation

Learn how to implement GitOps practices and establish robust CI/CD pipelines for your Kubernetes clusters using modern tools and techniques.

What We’ll Cover

  1. GitOps Principles and Tools
  2. ArgoCD Implementation
  3. Flux CD Setup
  4. CI/CD Pipeline Integration
  5. Progressive Delivery Patterns

Prerequisites

  • Kubernetes cluster
  • Git repository access
  • Basic CI/CD knowledge
  • Helm fundamentals

Setting Up ArgoCD

First, let’s install ArgoCD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

ArgoCD Application Configuration

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/app.git
    targetRevision: HEAD
    path: k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: myapp
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Implementing Flux CD

Installing Flux:

# Install Flux CLI
brew install fluxcd/tap/flux

# Bootstrap Flux
flux bootstrap github \
  --owner=my-github-username \
  --repository=my-cluster-config \
  --branch=main \
  --path=clusters/my-cluster \
  --personal

Flux Kustomization Example

apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: apps
  namespace: flux-system
spec:
  interval: 10m0s
  path: ./apps
  prune: true
  sourceRef:
    kind: GitRepository
    name: flux-system

CI Pipeline with GitHub Actions

name: CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Build and Test
      run: |
        make test
        make build
        
    - name: Build and Push Docker image
      uses: docker/build-push-action@v2
      with:
        push: true
        tags: myorg/myapp:$

Progressive Delivery with Argo Rollouts

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp-rollout
spec:
  replicas: 5
  strategy:
    canary:
      steps:
      - setWeight: 20
      - pause: {duration: 1h}
      - setWeight: 40
      - pause: {duration: 1h}
      - setWeight: 60
      - pause: {duration: 1h}
      - setWeight: 80
      - pause: {duration: 1h}
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myorg/myapp:latest

GitOps Best Practices

  1. Repository Structure:
    β”œβ”€β”€ base/
    β”‚   β”œβ”€β”€ deployment.yaml
    β”‚   β”œβ”€β”€ service.yaml
    β”‚   └── kustomization.yaml
    β”œβ”€β”€ overlays/
    β”‚   β”œβ”€β”€ production/
    β”‚   β”‚   β”œβ”€β”€ kustomization.yaml
    β”‚   β”‚   └── patch.yaml
    β”‚   └── staging/
    β”‚       β”œβ”€β”€ kustomization.yaml
    β”‚       └── patch.yaml
    
  2. Environment Management:
    • Use separate branches or directories
    • Implement environment-specific configurations
    • Maintain promotion strategy
  3. Security Considerations:
    • Implement RBAC
    • Use sealed secrets
    • Regular security scanning

Video Resources

GitOps Fundamentals

CI/CD Implementation

Advanced Patterns

Additional Resources

Written on August 13, 2025