CI/CD Workflows with Kubernetes¶
Continuous Integration and Deployment workflows for Kubernetes.
CI/CD Pipeline¶
┌────────────────────────────────────────────────┐
│ CI/CD Pipeline │
├────────────────────────────────────────────────┤
│ 1. Code Commit │
│ 2. Build & Test │
│ 3. Build Container Image │
│ 4. Push to Registry │
│ 5. Update Kubernetes Manifests │
│ 6. Deploy to Cluster │
│ 7. Verify Deployment │
└────────────────────────────────────────────────┘
GitHub Actions¶
name: Deploy to Kubernetes
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build image
run: docker build -t myapp:${{ github.sha }} .
- name: Push image
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push myapp:${{ github.sha }}
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v1
with:
manifests: |
k8s/deployment.yaml
k8s/service.yaml
images: myapp:${{ github.sha }}
kubectl-version: 'latest'
GitLab CI¶
stages:
- build
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- kubectl rollout status deployment/myapp
ArgoCD¶
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/myapp
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
Flux CD¶
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
name: myapp
namespace: flux-system
spec:
interval: 1m
url: https://github.com/example/myapp
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: myapp
namespace: flux-system
spec:
interval: 5m
path: ./k8s
prune: true
sourceRef:
kind: GitRepository
name: myapp
Best Practices¶
- Use GitOps
- Automate Testing
- Image Scanning
- Progressive Delivery
- Rollback Strategy