Installing Appian on Kubernetes

As Appian on Kubernetes is only supported for non-production environments, there is no supported path for upgrading from 21.4 to 22.1 or higher. For environments where future upgrades are desired, use Appian 22.1.

Overview

This page walks through how to install Appian on Kubernetes for self managed customers. The instructions show how to install on either a server-based cluster or locally for testing. It is aimed at platform engineers with some experience with Kubernetes, Helm, and Docker images; although this experience is not required, it will make life much easier.

Appian is installed on Kubernetes using a Custom Resource Definition (CRD) and an Operator. Before performing the install you should be familiar with these concepts. To read about them, see What is the Appian Operator?

Prerequisites

Make sure you have the following prerequisites and system requirements before installing Appian on Kubernetes.

Request licenses

You’ll need to request license files specifically for Appian on Kubernetes. There are two types of licenses: temporary and long-term.

  • Temporary license files are valid for 7 days and can be used on any server as long as the operating system matches. Request temporary license files when a new server is being set up for the first time or a long-term license has expired and you want to renew it.
  • Long-term license files are valid for an extended period of time and can only be used on the server that they were requested for. Request long-term license files when you've already obtained temporary license files to set up a new server, or your existing license file is about to expire and you want to proactively request replacements.

Generating the long-term license files can take up to 4-5 business days. You'll want to request temporary license files first, or both the temporary and long-term licenses in the same request.

You can request temporary and long-term licenses by doing the following.

  1. Go to Request a License and log in using your Community credentials.
  2. Fill out the form according to your requirements and submit it. If you are requesting long-term license files, in Q Output specify the following:
    • Operating system (must be Linux)
    • Your Appian site name. You’ll use this later when creating the Appian custom resource. It can be anything, but should be all one word, lower-case. For example, appian-k8s-appn. If you’re currently using a temporary license on an install and want to upgrade it to a long-term license, you'll want this to be the same name you designated in the .metadata.name field of your Appian CR to make it easier to upgrade. This way you can simply update the Kubernetes secrets with the long-term license files, and avoid having to additionally stop your Appian site, change the name, and restart.
  3. For long-term licenses, the request is fulfilled as follows.
    • If you are your organization's primary POC (point of contact), then the Appian license administrators will review your request and provide you with the license files or the next steps required to generate the long-term license files. You will receive these steps in the form of a task on Forum.
    • If you are not your organization's primary POC, then the request will first go to your organization's POC who will have to approve this request. If the POC approves the request, the Appian license administrators will review the request and provide you the license files or the next steps required to generate the long-term license files.
  4. The license files will be delivered to you in the form of a task on Forum which allows you to download them.

Download the Appian images and operator

You’ll need to download the Appian on Kubernetes images and operator by doing the following.

  1. Go to the Support tab on Appian Community.
  2. Click Downloads > Platform > Appian 21.4.
  3. On the right under Installers, click on the links to download all Appian on Kubernetes images and operator artifacts.

We’ll use these artifacts later during the install.

System Requirements

Your environment should have the recommended hardware requirements for running Appian.

Docker

Docker is required for the container-based install. See Docker’s Getting Started to install. If you are installing Appian locally to test it, you’ll want to install Docker Desktop.

Kubernetes

Kubernetes v1.16 or later is required for the Appian install. This version made custom resources available, and is required to run the Appian custom resource definition.

To check your server version, in a command terminal run kubectl version --short.

Installing Appian on Kubernetes locally with Docker Desktop

For testing the install of Appian on Kubernetes locally, Docker Desktop includes a Kubernetes environment it can be installed on. You can set things up as follows.

  1. Enable Kubernetes on Docker Desktop.
  2. Set the Docker Resource limits to 2 CPUs and 15GB of Memory to run the Appian site. If you don’t have these resources available, it’s still possible to test the Appian install with reduced resources.
  3. Set the kubectl context to the local Docker instance.
    • Check what the current context is.

      kubectl config current-context

    • If the result of the previous command is not docker-desktop, run the following command to set the context.

      kubectl config set-context docker-desktop

Helm

Helm v3 or later is required to install the Appian Operator, and should be available where Appian is deployed. See Installing Helm.

Exposing Appian

Appian needs to be exposed outside of Kubernetes to allow access to Apache Web Server (httpd) and webapp components. See Exposing Appian Outside Kubernetes to learn about different ways of exposing Appian.

How you choose to expose Appian will affect the configuration of the Appian custom resource; we’ll remind you of this configuration during that step.

Installing NGINX ingress controller (optional)

To expose Appian via Ingress and enable testing the Appian install locally, you can optionally do a new install of NGINX Ingress Controller on Kubernetes. If you are exposing Appian using a different method or are already using an ingress controller on your Kubernetes cluster, you can ignore this step.

  1. Install ingress-nginx using Helm.
  2. Be sure to verify the install.

Relational Database

Appian on Kubernetes does not install a relational database. You’ll need to bring your own relational database for each site to serve as its Appian/primary data source. You’ll also want to provide at least one business data source to use data stores.

Your database may be either running on the Kubernetes cluster or running outside the cluster. In these install instructions, we'll show how to make a connection to MariaDB running on the cluster. If you want to use a direct connection to a database outside the cluster, you can add database details similar to our MariaDB example, but you'll need to make sure that the database is accessible from within the cluster.

If you are going to run Appian with either MySQL or IBM Db2, or use older drivers for one of the other supported DBs (MariaDB, Oracle, or Microsoft SQL Server, or PostgreSQL) see the section on setting up RDBMS/JDBC drivers.

Install MariaDB (optional)

To enable testing the Appian install locally, you can optionally do a new install of MariaDB on Kubernetes and use it as the primary data source in our Appian site. We’ll reference this new MariaDB instance in our Appian CR configuration during the install steps.

If you already have an RDBMS, you can ignore this step and configure the Appian CR using the details described in the install steps.

  1. Create a new namespace in Kubernetes for our Appian site. We’ll use this namespace to house MariaDB and the Appian site. The namespace can have any name, though the rest of our instructions will use my-appian-site.

    kubectl create ns my-appian-site

  2. Install MariaDB using Helm on the namespace with the following commands.

    helm repo add bitnami https://charts.bitnami.com/bitnami

    helm install mariadb-appian --namespace my-appian-site --set auth.database=appian-k8s-appn,auth.username=appian-k8s-appn,auth.password=appian-k8s-appn bitnami/mariadb

    In the install command, we are creating a database with auth.database and setting up an initial username and password with auth.username and auth.password. We’ll use these later in the Appian CR configuration.

  3. The output of the install should be similar to the following.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    NAME: mariadb-appian
    LAST DEPLOYED: Tue Aug 10 15:23:33 2021
    NAMESPACE: my-appian-site
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    ** Please be patient while the chart is being deployed **
    
    Tip:
    
    Watch the deployment status using the command: kubectl get pods -w --namespace my-appian-site -l app.kubernetes.io/instance=mariadb-appian
    
    Services:
    
    echo Primary: mariadb-appian.my-appian-site.svc.cluster.local:3306
    
    Administrator credentials:
    
    Username: root
    Password : $(kubectl get secret --namespace my-appian-site mariadb-appian -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
    
    To connect to your database:
    
    1. Run a pod that you can use as a client:
    
          kubectl run mariadb-appian-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.5.12-debian-10-r0 --namespace my-appian-site --command -- bash
    
    2. To connect to primary service (read/write):
    
          mysql -h mariadb-appian.my-appian-site.svc.cluster.local -uroot -p appian-k8s-appn
    
    To upgrade this helm chart:
    
    1. Obtain the password as described on the 'Administrator credentials' section and set the 'auth.rootPassword' parameter as shown below:
    
          ROOT_PASSWORD=$(kubectl get secret --namespace my-appian-site mariadb-appian -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
          helm upgrade --namespace my-appian-site mariadb-appian bitnami/mariadb --set auth.rootPassword=$ROOT_PASSWORD
    

    From this output, copy the Services URL similar to what's highlighted below.

    1
    2
    3
    
    Services:
    
       echo Primary: `mariadb-appian.my-appian-site.svc.cluster.local:3306`
    

    Later we’ll use this URL in the Appian CR to connect to our database.

  4. Use the following command to check on the progress of the MariaDB install.

    kubectl get pods -w --namespace my-appian-site -l app.kubernetes.io/instance=mariadb-appian

    When it has completed, the READY column will have 1/1 pods and STATUS will be Running. This may take several minutes to complete.

If you have any trouble with the install, see Bitnami’s Helm chart troubleshooting guide.

Installation

Once all your prerequisites are in order, the following steps will install Appian on Kubernetes.

1. Create the Appian site namespace

If you haven’t done so already, create a new namespace in Kubernetes for your Appian site and all its components. The namespace can have any name, though the rest of our instructions will use my-appian-site.

kubectl create ns my-appian-site

2. Install cert-manager

Do the following steps to install cert-manager, which is used to validate the Appian CR configuration. For more on how cert-manager is used, continue reading below.

  1. Install cert-manager.
  2. After install, verify the cert-manager install manually.

By default, the Appian operator creates webhooks to perform validation on the Appian custom resource (mutating and validating admission webhooks). This ensures the CR is initially set up correctly and validated on each update. The webhooks require certificates, and the Appian Operator Helm chart depends on cert-manager to provision certificates for the webhook servers.

The Appian operator Helm chart doesn’t currently support other certificate solutions. If you cannot deploy cert-manager in your environment or would like to disable the webhooks, set webhooks.enabled to false when installing the operator chart.

3. Load Appian images and licenses

Having downloaded your images and licenses as TAR files, we’ll now load these onto Kubernetes.

Appian CRD and operator images

  1. Load the operator image and Appian images (all TAR.GZ files) into Docker with docker load -i <IMAGE>:

    1
    2
    3
    4
    5
    6
    7
    8
    
     docker load -i appian-operator-<APPIAN_OPERATOR_VERSION>.tar.gz
     docker load -i zookeeper-<APPIAN_VERSION>.tar.gz
     docker load -i kafka-<APPIAN_VERSION>.tar.gz
     docker load -i search-server-<APPIAN_VERSION>.tar.gz
     docker load -i data-server-<APPIAN_VERSION>.tar.gz
     docker load -i service-manager-<APPIAN_VERSION>.tar.gz
     docker load -i webapp-<APPIAN_VERSION>.tar.gz
     docker load -i httpd-<APPIAN_VERSION>.tar.gz
    

    Afterwards, verify that the images were loaded correctly with the following command.

    docker images registry.example.com/appian/*

    The output should show all the images you’ve just loaded, similar to the following.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    REPOSITORY                                    TAG                                 IMAGE ID            CREATED             SIZE
    registry.example.com/appian/appian-operator   v0.65.0                             06d27ba22776        2 months ago        48.7MB
    registry.example.com/appian/webapp            21.2.360.0                          17bdc49b8890        2 months ago        1.28GB
    registry.example.com/appian/service-manager   21.2.360.0                          58ee3df15880        2 months ago        667MB
    registry.example.com/appian/httpd             21.2.360.0                          7757cdfb8036        2 months ago        704MB
    registry.example.com/appian/search-server     0.213.1                             3a51063f0112        2 months ago        455MB
    registry.example.com/appian/data-server       0.215.2                             c434d4ba1c3d        3 months ago        744MB
    registry.example.com/appian/kafka             2.13-2.7.0-appian-4-prod-8d0de3b2   49257fb571bb        4 months ago        997MB
    registry.example.com/appian/zookeeper         3.7.0-prod-939f6a88                 7dce817715d4        5 months ago        819MB
    
  2. Each Docker image has an initial registry hostname of registry.example.com. If you have your own docker registry and are not running this locally for testing, each image will need to be retagged with your specific Docker registry.

    For example, if your registry URL is my.registry.com, you would tag each image similar to:

    docker tag registry.example.com/appian/webapp:20.4.420.0 my.registry.com/appian/webapp:20.4.420.0

    docker tag registry.example.com/appian/data-server:0.215.2 my.registry.com/appian/data-server:0.215.2

    docker tag ...

    Your commands, including the tags on the end, may differ from the commands above.

  3. If you retagged images for your registry in the last step, you’ll then need to push each image to your specific registry.

    1
    2
    3
    4
    5
    6
    7
    8
    
    docker push my.registry.com/appian/appian-operator:<APPIAN_OPERATOR_VERSION>
    docker push my.registry.com/appian/zookeeper:<ZOOKEEPER_TAG>
    docker push my.registry.com/appian/kafka:<KAFKA_TAG>
    docker push my.registry.com/appian/search-server:<ZOOKEEPER_TAG>
    docker push my.registry.com/appian/data-server:<DATA_SERVER_TAG>
    docker push my.registry.com/appian/service-manager:<APPIAN_VERSION>
    docker push my.registry.com/appian/webapp:<APPIAN_VERSION>
    docker push my.registry.com/appian/httpd:<APPIAN_VERSION>
    

Licenses

Having requested your licenses, you’ll have received a zip with two files: k3.lic and k4.lic. We’ll install these as secrets on Kubernetes.

  1. Unzip the product license files.
  2. Load the product license files as secrets into Kubernetes.

    kubectl -n my-appian-site create secret generic k3lic --from-file=<PATH TO LICENSE>/k3.lic

    kubectl -n my-appian-site create secret generic k4lic --from-file=<PATH TO LICENSE>/k4.lic

4. Create the Appian operator

The following steps will create the Appian operator from the downloaded TGZ file Helm chart.

If you already have your own Helm chart repository, you could optionally load the Appian operator Helm chart into your repository and run it from there. Be sure you add the repository to your Helm client via helm repo add. The install command below would then reference the helm chart in the repository rather than the TGZ file.

  1. Create a new namespace for the Appian operator. The namespace can have any name, though the rest of our instructions will use appian-operator.

    kubectl create ns appian-operator

  2. Install the Appian operator Helm chart TGZ file that was previously downloaded.

    helm install appian-operator <PATH TO OPERATOR HELM CHART .TGZ FILE> --wait --namespace appian-operator --set image.repository=<DOCKER IMAGE REPOSITORY>/appian/appian-operator

    For example:

    helm install appian-operator appian-operator-v0.65.0.tgz --wait --namespace appian-operator --set image.repository=registry.example.com/appian/appian-operator

    If the Docker registry where your Appian operator image resides is private, follow the instructions here to create a Secret of type docker-registry and provide the name of the Secret via the option --set imagePullSecrets={<NAME>} in the command above.

    If you’ve pushed the operator image with a different tag that doesn’t match the version / app version of the chart, you’ll want to include the option --set image.tag=<TAG>.

  3. This command may take a minute or two to complete. When complete, check that the correct Appian operator Deployments, ReplicaSets, and Pods were created.

    kubectl -n appian-operator get deployments,replicasets,pods

    The output should be similar to:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/appian-operator-controllers   1/1     1            1           90s
    deployment.apps/appian-operator-webhooks      1/1     1            1           90s
    
    NAME                                                     DESIRED   CURRENT   READY   AGE
    replicaset.apps/appian-operator-controllers-55cfcf74f    1         1         1       90s
    replicaset.apps/appian-operator-webhooks-5bd6588b95      1         1         1       90s
    
    NAME                                              READY   STATUS    RESTARTS   AGE
    pod/appian-operator-controllers-55cfcf74f-sr4jd   1/1     Running   0          90s
    pod/appian-operator-webhooks-5bd6588b95-7lggk     1/1     Running   0          90s
    

    For each of the operator’s controllers and webhooks, you should see a single Deployment, ReplicaSet, and Pod. Once the Pods’ STATUS are all Running, the READY column should show 1/1 within 1 minute.

    Please note that the usage of appians below, and elsewhere, refers to multiple instances of Appian in a cluster. This pluralization follows Kubernetes conventions on resource naming.

  4. Validate that the Appian CRD installed successfully by running:

    kubectl get crd appians.crd.k8s.appian.com

    The output should be similar to:

    1
    2
    
    NAME                         CREATED AT
    appians.crd.k8s.appian.com   2021-07-21T17:37:31Z
    

If you have any trouble installing the operator, see Troubleshooting Appian on Kubernetes.

5. Create an Appian YAML file

We’ll now configure a YAML file used as the spec to deploy the Appian CR.

  1. Download the appian.yaml file (it can also be copied from the code block below). This will serve as a template for the Appian CR spec.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    
     apiVersion: crd.k8s.appian.com/v1alpha1
     kind: Appian
     metadata:
     # Temporary licenses: name can be any lower case name, one word  
     # Long-term licenses: name must match the requested Appian site name for the license
       name: appian-k8s-appn
    
     spec:
       webapp:
         image:
           repository: registry.example.com/appian/webapp
           tag: 21.2.360.0
         replicas: 1
         resources:
           requests:
             cpu: 1000m
             memory: 4Gi
           limits:
             cpu: 2000m
             memory: 8Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
         # The scheme, host, and, optionally, port of the site 
         # See Post-Install_Configurations.html#configure-your-site-url
         url: http://myappiansite.com
                
         # The scheme, host, and, optionally, port of the site's static and dynamic content URLs 
         # See Post-Install_Configurations.html#configure-your-static-and-dynamic-content-urls
         # staticUrl: http://myappiansite-static.com
         # dynamicUrl: http://myappiansite-dynamic.com
    
         dataSources:
           # Connection information for the relational database to use as the
           # Appian/primary data source. If connecting to MySQL or IBM Db2, use an
           # init container to add the appropriate RDBMS/JDBC driver JAR to Tomcat's classpath
           # See Configuring_Relational_Databases.html#provide-data-source-connection-information
           primary:
             name: jdbc/AppianPrimaryDS
             driverClassName: org.mariadb.jdbc.Driver
             url: "jdbc:mariadb://mariadb-appian.my-appian-site.svc.cluster.local:3306/appian-k8s-appn?useOldAliasMetadataBehavior=true"
             username: appian-k8s-appn
             password: appian-k8s-appn
             validationQuery: "SELECT 1"
    
    
       # Key-value pairs to inject into the custom.properties file shared by all components
       # See Custom_Configurations.md#custom-properties
       customProperties: {}
         # my.custom.key: my-custom-value
    
       zookeeper:
         image:
           repository: registry.example.com/appian/zookeeper
           tag: 3.7.0-prod-939f6a88
         replicas: 1
         resources:
           requests:
             cpu: 250m
             memory: 1Gi
           limits:
             cpu: 500m
             memory: 2Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
    
       kafka:
         image:
           repository: registry.example.com/appian/kafka
           tag: 2.13-2.7.0-appian-4-prod-8d0de3b2
         replicas: 1
         resources:
           requests:
             cpu: 250m
             memory: 1Gi
           limits:
             cpu: 500m
             memory: 2Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
    
       searchServer:
         image:
           repository: registry.example.com/appian/search-server
           tag: 0.213.1
         replicas: 1
         resources:
           requests:
             cpu: 500m
             memory: 1.25Gi
           limits:
             cpu: 1000m
             memory: 1.25Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
    
       dataServer:
         image:
           repository: registry.example.com/appian/data-server
           tag: 0.215.2
         replicas: 1
         resources:
           requests:
             cpu: 500m
             memory: 2Gi
           limits:
             cpu: 1000m
             memory: 4Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
    
       serviceManager:
         image:
           repository: registry.example.com/appian/service-manager
           tag: 21.2.360.0
         replicas: 1
         resources:
           requests:
             cpu: 1000m
             memory: 4Gi
           limits:
             cpu: 2000m
             memory: 8Gi
         volumeClaimTemplateSpec:
           accessModes:
             - "ReadWriteOnce"
           resources:
             requests:
               storage: "5Gi"
    
       httpd:
         image:
           repository: registry.example.com/appian/httpd
           tag: 21.2.360.0
         replicas: 1
    
       ingress:
         enabled: true
    
  2. At minimum, change the following field values in appian.yaml with custom values. Save the file.

    Key Current Value Your Value
    metadata.name appian-k8s-appn This should be the same Appian site name specified when requesting your long-term license.

    If you are using a temporary license, you can specify any name here, lower-case, all one word. If you intend to upgrade the temporary license on an install to a long-term license, it is easiest to keep this same name for the long-term license request.
    spec.webapp.url http://myappiansite.com Fully qualified domain name of the Appian site's URL including the scheme, host, and, optionally, port. For example: http://www.example.com:8080.

    For more info, see SERVER_AND_PORT in Configure your Site URL.

    If you are running this locally to test it, you can run the terminal command hostname to determine a valid URL for your machine. The URL would then be set as: http://<HOSTNAME COMMAND URL>
    spec.webapp.dataSources.primary.driverClassName org.mariadb.jdbc.Driver Driver class name for your RDBMS. For examples of each of the supported databases, see Configuring Data Sources.
    spec.webapp.dataSources.primary.url jdbc:mariadb://mariadb-appian.my-appian-site.svc.cluster.local:3306/appian-k8s-appn?useOldAliasMetadataBehavior=true Primary data source connection URL of your RDBMS. For URL examples of each of the supported databases, see Configuring Data Sources.

    If you installed a new copy of MariaDB in earlier steps, use the Service URL copied from the install step, along with the database that was created: jdbc:mariadb://<MARIADB SERVICE URL>/<MARIADB DATABASE>?useOldAliasMetadataBehavior=true

    For example: jdbc:mariadb://mariadb-appian.my-appian-site.svc.cluster.local:3306/appian-k8s-appn?useOldAliasMetadataBehavior=true
    spec.webapp.dataSources.primary.username appian-k8s-appn Plain-text username for your RDBMS connection.

    If you installed a new copy of MariaDB in earlier steps, this will be the username created in that step. For example: appian-k8s-appn.
    spec.webapp.dataSources.primary.password appian-k8s-appn Plain-text password for your RDBMS connection.

    If you installed a new copy of MariaDB in earlier steps, this will be the password created in that step. For example: appian-k8s-appn.
    spec.webapp.dataSources.primary.validationQuery "SELECT 1" Validation query for your RDBMS connection. For examples of each of the supported databases, see Configuring Data Sources.

    If you installed a new copy of MariaDB in earlier steps, this will be "SELECT 1".
    spec.<COMPONENT>.image.repository
    (Multiple fields - one field per component)
    registry.example.com/appian/<COMPONENT> Image location on your Docker registry of each Appian component. If you are using a custom registry, change this image for each Appian component. If you did not re-tag your images and push to a custom registry, use the current values that include registry.example.com.
    spec.<COMPONENT>.image.tag
    (Multiple fields - one field per component)
    Various tag values for each Appian component. The image version number for each Appian component. You can find these tags with the command: docker images <MY DOCKER REGISTRY>/appian/*

    For example: docker images registry.example.com/appian/*
  3. Be sure to change any other custom values in appian.yaml spec. For a detailed reference of all allowable fields, refer to the custom resource definitions API documentation.

    Here are some configuration settings to consider.

    • The Apache Web Server (httpd) component is specified in the spec, though it is optional and can be taken out if you are using another web server or don't require one.
    • We are only specifying a primary data source in the spec. To use Data Store Objects, you'll also want to provide at least one business data store. This is defined in the .spec.webapp.dataSources.business field.
    • Since we are using NGINX ingress controller for this example install, we are setting .spec.ingress.enabled to true in the spec. If you want to configure Appian to be exposed in other ways, see Exposing Appian Outside Kubernetes for the different configuration options.
    • The spec.<COMPONENT>.resources fields in the appian.yaml spec are suggested resource values based on each component. See Managing Resources in Containers for the meaning and syntax of these fields.
    • As most Appian components are StatefulSets that rely on persistent storage, the spec.<COMPONENT>.volumeClaimTemplateSpec fields have suggested values that define this storage. For more on these fields, see PersistentVolumeClaimSpec.
    • The appian.yaml specifies one Pod replica per Appian component. You may consider specifying more replicas for components such as Webapp or Apache Web Server (http).
    • You may want to set up Horizontal Pod Autoscaling on the Apache Web Server (httpd).
    • You may want to define custom.properties for Appian using the spec.customProperties field.

You will need to set the Search Server kernel settings either using an init container in the CR spec or using admin commands after the install.

6. Create the Appian site

  1. Run kubectl create to create the Appian site based on the appian.yaml:

    kubectl create -n my-appian-site -f <PATH TO APPIAN.YAML>

  2. It will take about 20-30 minutes for the Appian site to fully start. Check progress on the various Appian component pods with the following command.

    kubectl -n my-appian-site get pods

    The STATUS of the Appian component pods will transition from Pending to Running. When the Appian site is ready, you should see all pods have READY of 1/1 and STATUS of Running, similar to the following.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    NAME                                     READY   STATUS    RESTARTS   AGE
    appian-k8s-appn-data-server-0-0          1/1     Running   0          15m
    appian-k8s-appn-httpd-8658f7fdb7-k9f6j   1/1     Running   0          15m
    appian-k8s-appn-httpd-bf56974d4-crv4g    1/1     Running   0          15m
    appian-k8s-appn-kafka-0-0                1/1     Running   2          15m
    appian-k8s-appn-search-server-0-0        1/1     Running   2          15m
    appian-k8s-appn-service-manager-0-0      1/1     Running   3          15m
    appian-k8s-appn-webapp-0-0               1/1     Running   0          15m
    appian-k8s-appn-zookeeper-0-0            1/1     Running   0          15m
    mariadb-appian-mariadb-0                 1/1     Running   0          21m
    
  3. Get the appians custom resource to check the status of your Appian site.

    kubectl get -n my-appian-site appians

    The STATUS of a starting site will transition from not set to Creating to Starting to Ready. The transition from not set to Creating to Starting should happen within seconds. The transition from Starting to Ready should happen within 20 to 30 minutes.

    Make sure the STATUS is Ready before accessing your site, similar to:

    1
    2
    
    NAME              URL                                  STATUS
    appian-k8s-appn   http://myappiansite.com              Ready
    

If you have any trouble with creating the Appian site, see Troubleshooting Appian on Kubernetes.

If you need to edit the Appian CR and restart, see Editing, Stopping, and Restarting.

7. Access your Appian site

Newly created sites are bootstrapped with a system administrator user. This user cannot access the Administration Console. The steps below detail how to login, then create a new system administrator user that can access the Administration Console.

  1. In a browser, navigate to <URL>/suite/design/users where <URL> is the value you set in the .spec.webapp.url field of the Appian custom resource.
  2. Login as the bootstrap system administrator user with username Administrator and temporary password admin. Change the user’s password when prompted to do so.
  3. Click on the CREATE USER button to create the new user. Under Security > User Type, select System Administrator.
  4. If you haven’t configured your site to send email, make sure to manually assign a temporary password. If a temporary password is omitted, Appian will attempt to send an email to the specified email address with a randomly generated temporary password. Since the site has not yet been configured to send email, this will fail and there will be no way to recover the user’s password.
  5. Logout and login as the newly created user.

To stop the Appian site, see Stopping the Appian site.

RDBMS/JDBC drivers

As noted in the supported database list, Appian supports the following relational databases:

To be able to communicate with your relational database, Appian requires a compatible RDBMS/JDBC driver. The Webapp Docker image includes drivers for the latest supported versions of MariaDB, Oracle, Microsoft SQL Server, and PostgreSQL. It does not, however, include drivers for MySQL or IBM Db2.

If you’d like to use either MySQL or IBM Db2 as the Appian/primary or a business data source, you’ll need to use the Appian CRD support for specifying init containers. The same goes for older supported versions of MariaDB, Oracle, Microsoft SQL Server, and PostgreSQL that require different driver versions.

Open in Github Built: Tue, Mar 28, 2023 (09:28:18 PM)

On This Page

FEEDBACK