Kubernetes orchestration

Deploy and operate SFTPPlus MFT as a containerized file transfer service in Kubernetes, OpenShift, or a managed Kubernetes platform.

Introduction

Kubernetes (K8s) is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications.

SFTPPlus MFT can run as a containerized file transfer server or transfer automation service in Kubernetes and OpenShift. It supports SFTP, FTPS, HTTPS, AS2, and other file transfer protocols without requiring a separate application server or database. The deployment can use the networking, storage, configuration, and secret management facilities already available in your cluster.

Kubernetes Logo

Supported Kubernetes environments

SFTPPlus MFT can run in an on-premises cluster, OpenShift, or managed Kubernetes services such as:

  • Azure Kubernetes Service
  • Amazon Elastic Kubernetes Service (EKS)
  • Google Kubernetes Engine (GKE)

Any modern Kubernetes version is supported, and the container can use current Linux distributions. SFTPPlus MFT can also run in native Windows containers, which we use every day to test SFTPPlus across various Windows environments. See the system requirements documentation for more details about supported operating systems.

Start with the example resources

The SFTPPlus Kubernetes repository provides example Kubernetes resources for single-pod, autoscaled, and persistent-storage deployments. Use them as a starting point and adapt their namespaces, storage classes, network services, and resource settings to your cluster.

The SFTPPlus Docker repository contains the container build files, entry point, and configuration examples used to create an SFTPPlus image. This gives your team control over the image build and the SFTPPlus version deployed in each environment.

The following deployment manifest is a partial snippet that illustrates a two-replica worker configuration. It is not a self-contained example: the namespace, persistent volume claim, ConfigMap, Secret, and initialization script need to be created separately.

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
    name: sftpplus-worker
    namespace: manual-tests
    labels:
        app: sftpplus-worker
spec:
    replicas: 2
    selector:
        matchLabels:
            app: sftpplus-worker
    template:
        metadata:
            labels:
                app: sftpplus-worker

        spec:
            securityContext:
                runAsUser: 1000
                runAsGroup: 1000
                fsGroup: 1000
                fsGroupChangePolicy: 'OnRootMismatch'
            containers:
                - name: worker
                  image: proatria/sftpplus-trial:5.26.4-linux-x64
                  command: ['/bin/sh']
                  args: ['/opt/sftpplus-initialization/worker-init.sh']
                  ports:
                      - name: sftp
                        containerPort: 10022
                      - name: https-files
                        containerPort: 10443
                  volumeMounts:
                      - name: sftpplus-storage
                        mountPath: /opt/sftpplus-storage
                      - name: sftpplus-initialization
                        mountPath: /opt/sftpplus-initialization
                      - name: sftpplus-worker-credentials
                        mountPath: /opt/sftpplus-worker-credentials
                        readOnly: true
            volumes:
                - name: sftpplus-storage
                  persistentVolumeClaim:
                      claimName: sftpplus-storage
                - name: sftpplus-initialization
                  configMap:
                      name: sftpplus-initialization-v1
                - name: sftpplus-worker-credentials
                  secret:
                      secretName: sftpplus-worker-credentials

Manage configuration with GitOps

The SFTPPlus .INI configuration file can be supplied through a Kubernetes ConfigMap. Cluster secrets can provide sensitive files and values separately from the main configuration. This separation lets teams review deployment and application configuration while keeping credentials out of version control.

GitOps controllers such as Argo CD can apply the container, ConfigMap, Secret references, storage, and network service from the same reviewed repository. For more detail about configuration workflows and command-line automation, see the DevOps and GitOps solution.

Scale and keep transfers available

Kubernetes services and external load balancers can distribute incoming connections across SFTPPlus replicas. SFTPPlus cluster support synchronizes configuration between instances and centralizes events on the primary node. Persistent or shared storage can be selected according to how files need to be accessed across replicas.

This allows a deployment to scale file transfer volume by adding instances and maintain availability by load balancing incoming connections.

Explore deployment guides

Browse all Kubernetes articles for configuration, storage, and deployment examples.