Skip to main content

Customizing Stacks

Learn how to customize KubeZero stacks for your specific requirements.

Overview

KubeZero stacks are composable, allowing you to customize them to meet your specific needs.

Stack Structure

A KubeZero stack consists of:

  • Base configuration: Core platform components
  • Modules: Optional feature additions
  • Customizations: Environment-specific settings
  • Overrides: Local modifications

Creating Custom Stacks

Basic Stack Customization

Start with a base stack and add customizations:

# stacks/my-custom-stack/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../../base/k8s-essentials
- ../../modules/monitoring
- ../../modules/security

patches:
- target:
kind: Deployment
name: prometheus
patch: |-
- op: replace
path: /spec/replicas
value: 3

Environment-Specific Stacks

Create stacks for different environments:

# stacks/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../base-stack

patches:
- target:
kind: Ingress
patch: |-
- op: replace
path: /metadata/annotations/cert-manager.io~1cluster-issuer
value: letsencrypt-prod

Module Customization

Enabling/Disabling Features

Control which features are included:

# Custom module selection
modules:
monitoring:
enabled: true
prometheus:
retention: 30d
grafana:
persistence: true

logging:
enabled: true
elasticsearch:
replicas: 3

service-mesh:
enabled: false # Disable if not needed

Custom Module Configuration

Override module defaults:

# modules/monitoring/values.yaml
prometheus:
server:
retention: 15d
resources:
requests:
memory: 512Mi
cpu: 500m
limits:
memory: 2Gi
cpu: 2000m

grafana:
adminPassword: "${GRAFANA_ADMIN_PASSWORD}"
persistence:
enabled: true
size: 10Gi

Configuration Management

Using ConfigMaps

Store configuration in ConfigMaps:

apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "postgresql://db:5432/myapp"
redis_url: "redis://redis:6379"
log_level: "info"

Using Secrets

Manage sensitive data with secrets:

apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
database_password: "${DATABASE_PASSWORD}"
api_key: "${API_KEY}"

Advanced Customizations

Custom Resource Definitions

Add custom resources:

# Add CRDs to your stack
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
status:
type: object

Custom Operators

Include custom operators:

# Deploy custom operator
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-operator
spec:
replicas: 1
selector:
matchLabels:
app: my-operator
template:
metadata:
labels:
app: my-operator
spec:
containers:
- name: operator
image: my-org/my-operator:v1.0.0

Validation and Testing

Stack Validation

Validate your custom stack:

# Validate stack configuration
kubezero validate stack --path ./stacks/my-stack

# Dry run deployment
kubezero deploy --dry-run --stack my-stack

Testing Framework

Test your customizations:

# Run stack tests
kubezero test stack --path ./stacks/my-stack

# Integration tests
kubezero test integration --suite custom-stack

Best Practices

Stack Organization

Organize your stacks effectively:

stacks/
├── base/ # Base configurations
├── environments/ # Environment-specific
│ ├── development/
│ ├── staging/
│ └── production/
├── applications/ # Application stacks
└── custom/ # Custom components

Version Control

Track stack changes:

  1. Git repository: Store stacks in Git
  2. Branching: Use branches for changes
  3. Tags: Tag stable versions
  4. Documentation: Document changes

Configuration Management

Follow configuration best practices:

  1. Separation: Separate config from code
  2. Encryption: Encrypt sensitive data
  3. Validation: Validate configurations
  4. Testing: Test before deployment

Migration Strategy

When updating stacks:

  1. Backup: Backup current configuration
  2. Test: Test in non-production environment
  3. Gradual rollout: Deploy incrementally
  4. Monitor: Monitor during deployment
  5. Rollback: Have rollback plan ready

For detailed customization examples, see the customization reference.