Deployment
This guide explains how to deploy your KubeOps operator to a Kubernetes cluster. KubeOps generates all necessary deployment files during the build process, making deployment straightforward.
Prerequisites
Before deploying your operator, ensure you have:
- A running Kubernetes cluster
kubectl
configured to access your cluster- Generated deployment files (in the
config
directory by default) - A container registry to host your operator's Docker image
Deployment Steps
1. Build the Docker Image
First, build the Docker image using the generated Dockerfile:
# Navigate to your project directory
cd your-operator-project
# Build the Docker image
docker build -t your-registry/your-operator:latest .
2. Push the Docker Image
Push the image to your container registry:
# Push to your registry
docker push your-registry/your-operator:latest
3. Deploy Using Kustomize
KubeOps generates Kustomize files that handle the deployment. Deploy using:
# Navigate to the config directory
cd config
# Apply the Kustomize configuration
kubectl apply -k .
This will:
- Create necessary RBAC rules
- Deploy the operator
- Install CRDs
- Set up any required configurations
Generated Deployment Files
KubeOps generates the following files in your config directory:
config/
├── crd/ # Custom Resource Definitions
├── rbac/ # RBAC rules
├── deployment.yaml # Operator deployment
├── kustomization.yaml # Kustomize configuration
└── namespace.yaml # Namespace configuration
Automated Deployment
You can automate the deployment process using GitHub Actions or similar CI/CD tools. Here's an example workflow:
name: Deploy Operator
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.0.x"
- name: Build and Push Docker Image
run: |
docker build -t ghcr.io/${{ github.repository }}:${{ github.event.release.tag_name }} .
docker push ghcr.io/${{ github.repository }}:${{ github.event.release.tag_name }}
- name: Generate Deployment Files
run: dotnet build -c Release
- name: Commit Generated Files
run: |
git config --global user.name 'GitHub Actions'
git config --global user.email 'actions@github.com'
git add config/
git commit -m "Update deployment files for ${{ github.event.release.tag_name }}"
git push
Distribution Options
1. Manual Distribution
Users can deploy your operator by:
- Downloading the generated config files
- Building the Docker image
- Applying the Kustomize configuration
# Clone your repository
git clone https://github.com/your-org/your-operator.git
cd your-operator
# Build and push the image
docker build -t your-registry/your-operator:latest .
docker push your-registry/your-operator:latest
# Deploy using Kustomize
kubectl apply -k config/
2. Automated Distribution
For automated distribution:
- Set up GitHub Container Registry (GCR)
- Configure GitHub Actions to:
- Build and push images on release
- Update deployment files
- Create release artifacts
Users can then deploy using:
# Add your GCR credentials
kubectl create secret docker-registry gcr-secret \
--docker-server=ghcr.io \
--docker-username=$GITHUB_USER \
--docker-password=$GITHUB_TOKEN
# Deploy using the release artifacts
kubectl apply -f https://github.com/your-org/your-operator/releases/download/v1.0.0/config.tar.gz
Best Practices
-
Versioning:
- Use semantic versioning for releases
- Tag Docker images with specific versions
- Include version information in CRDs
-
Security:
- Use non-root users in Docker images
- Implement proper RBAC rules
- Scan images for vulnerabilities
-
Monitoring:
- Set up proper health checks
- Configure resource limits
- Implement logging and metrics
-
Updates:
- Document upgrade procedures
- Test upgrades in staging
- Provide rollback instructions
Common Issues
-
Image Pull Errors:
- Check registry credentials
- Verify image exists
- Ensure proper permissions
-
RBAC Issues:
- Verify service account permissions
- Check role bindings
- Review operator logs
-
CRD Installation:
- Check CRD compatibility
- Verify API version
- Review validation rules