Skip to content

Cloud-Native Deployment

RustFS is designed for cloud-native environments, providing seamless integration with Kubernetes, container orchestration, and modern DevOps workflows.

Multi-Cloud Architecture

Multi-Cloud Architecture

RustFS supports deployment across multiple cloud providers, enabling:

  • Vendor Independence: Avoid cloud provider lock-in
  • Cost Optimization: Leverage best pricing across providers
  • Geographic Distribution: Deploy closer to users worldwide
  • Risk Mitigation: Reduce dependency on single provider

Kubernetes Integration

Helm Chart Deployment

bash
# Add RustFS Helm repository
helm repo add rustfs https://charts.rustfs.com
helm repo update

# Install RustFS cluster
helm install rustfs rustfs/rustfs \
  --set replicas=4 \
  --set storage.size=100Gi \
  --set storage.storageClass=fast-ssd

Operator Deployment

yaml
apiVersion: rustfs.io/v1
kind: RustFSCluster
metadata:
  name: rustfs-cluster
spec:
  replicas: 4
  storage:
    size: 100Gi
    storageClass: fast-ssd
  resources:
    requests:
      memory: "2Gi"
      cpu: "1"
    limits:
      memory: "4Gi"
      cpu: "2"

Container Orchestration

Docker Compose

yaml
version: '3.8'
services:
  rustfs:
    image: rustfs/rustfs:latest
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - data1:/data1
      - data2:/data2
      - data3:/data3
      - data4:/data4
    command: server /data{1...4} --console-address ":9001"
    environment:
      - RUSTFS_ROOT_USER=admin
      - RUSTFS_ROOT_PASSWORD=password123
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/rustfs/health/live"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  data1:
  data2:
  data3:
  data4:

Docker Swarm

yaml
version: '3.8'
services:
  rustfs:
    image: rustfs/rustfs:latest
    ports:
      - "9000:9000"
    volumes:
      - rustfs_data:/data
    deploy:
      replicas: 4
      placement:
        constraints:
          - node.role == worker
      resources:
        limits:
          memory: 4G
        reservations:
          memory: 2G
    command: server http://rustfs_rustfs:9000/data --console-address ":9001"
    networks:
      - rustfs_network

networks:
  rustfs_network:
    driver: overlay
    attachable: true

volumes:
  rustfs_data:
    driver: local

Service Mesh Integration

Istio Integration

yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: rustfs-vs
spec:
  hosts:
  - rustfs.example.com
  gateways:
  - rustfs-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: rustfs-service
        port:
          number: 9000
      weight: 100
    fault:
      delay:
        percentage:
          value: 0.1
        fixedDelay: 5s

Linkerd Integration

yaml
apiVersion: v1
kind: Service
metadata:
  name: rustfs-service
  annotations:
    linkerd.io/inject: enabled
spec:
  selector:
    app: rustfs
  ports:
  - name: api
    port: 9000
    targetPort: 9000
  - name: console
    port: 9001
    targetPort: 9001

Observability

Prometheus Monitoring

yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: rustfs-monitor
spec:
  selector:
    matchLabels:
      app: rustfs
  endpoints:
  - port: metrics
    interval: 30s
    path: /rustfs/v2/metrics/cluster

Grafana Dashboards

Key metrics to monitor:

  • Cluster Health: Node status, quorum health
  • Performance: Request latency, throughput
  • Storage: Capacity utilization, I/O metrics
  • Network: Bandwidth, connection count

Distributed Tracing

yaml
# Jaeger integration
apiVersion: v1
kind: ConfigMap
metadata:
  name: rustfs-tracing
data:
  tracing.yaml: |
    jaeger:
      endpoint: http://jaeger-collector:14268/api/traces
      service_name: rustfs
      sample_rate: 0.1

CI/CD Integration

GitOps with ArgoCD

yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: rustfs-app
spec:
  project: default
  source:
    repoURL: https://github.com/company/rustfs-config
    targetRevision: HEAD
    path: kubernetes
  destination:
    server: https://kubernetes.default.svc
    namespace: rustfs
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Jenkins Pipeline

groovy
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'docker build -t rustfs:${BUILD_NUMBER} .'
            }
        }
        stage('Test') {
            steps {
                sh 'docker run --rm rustfs:${BUILD_NUMBER} test'
            }
        }
        stage('Deploy') {
            steps {
                sh '''
                    helm upgrade --install rustfs ./helm-chart \
                        --set image.tag=${BUILD_NUMBER} \
                        --namespace rustfs
                '''
            }
        }
    }
}

Security

Pod Security Standards

yaml
apiVersion: v1
kind: Pod
metadata:
  name: rustfs-pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 1000
  containers:
  - name: rustfs
    image: rustfs/rustfs:latest
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      readOnlyRootFilesystem: true

Network Policies

yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: rustfs-network-policy
spec:
  podSelector:
    matchLabels:
      app: rustfs
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: client
    ports:
    - protocol: TCP
      port: 9000

Best Practices

Resource Management

  1. Resource Limits

    • Set appropriate CPU and memory limits
    • Use resource quotas at namespace level
    • Monitor resource utilization trends
  2. Storage Classes

    • Use fast SSDs for high-performance workloads
    • Consider regional persistent disks for durability
    • Implement automated backup strategies

High Availability

  1. Multi-Zone Deployment

    yaml
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - rustfs
            topologyKey: topology.kubernetes.io/zone
  2. Health Checks

    yaml
    livenessProbe:
      httpGet:
        path: /rustfs/health/live
        port: 9000
      initialDelaySeconds: 30
      periodSeconds: 10
    
    readinessProbe:
      httpGet:
        path: /rustfs/health/ready
        port: 9000
      initialDelaySeconds: 10
      periodSeconds: 5

Troubleshooting

Common Issues

  1. Pod Startup Issues

    • Check resource constraints
    • Verify storage class availability
    • Review security contexts
  2. Network Connectivity

    • Validate service discovery
    • Check network policies
    • Monitor DNS resolution
  3. Performance Issues

    • Analyze resource utilization
    • Check storage I/O patterns
    • Review network bandwidth

Released under the Apache License 2.0.