Installing WebSphere Liberty operator with the Kubernetes CLI

A cluster administrator can install a WebSphere® Liberty operator with the Kubernetes command-line interface (CLI) (kubectl) when the cluster is not an Red Hat® OpenShift® Container Platform cluster. Example Kubernetes environments that do not use the OpenShift Container Platform include Azure Kubernetes Service (AKS) or Amazon Elastic Kubernetes Service (EKS).

Before you begin

WebSphere Liberty operator requires a Kubernetes cluster. Use kubectl to run commands against the Kubernetes cluster.

Install prerequisites. See Preparing for installation.

If you plan to use Operator Lifecycle Manager (OLM), it must be installed on your cluster before you proceed. In addition, you need the IBM® Operator catalog source. The CatalogSources pods must be running.

Log in to the Kubernetes cluster as a cluster administrator.

Follow the instructions for installing WebSphere Liberty operator on a non-OCP Kubernetes cluster with OLM or without OLM.

Installing the WebSphere Liberty operator with OLM

The operator supports OwnNamespace, SingleNamespace, and AllNamespaces install modes. The AllNamespaces installation mode applies to most installations.

  1. Set the WLO_NAMESPACE and WLO_TARGET_NAMESPACE shell variables.

    For the AllNamespaces installation mode, set WLO_NAMESPACE to operators.

    WLO_NAMESPACE=operators

    For the SingleNamespace mode where the operator watches a different namespace, set WLO_NAMESPACE to the name where the operator is installed, and set WLO_TARGET_NAMESPACE to the name of the namespace to be watched.

    WLO_NAMESPACE=my-wlo-namespace
    WLO_TARGET_NAMESPACE=websphere-liberty-target

    For the OwnNamespace mode, set the WLO_NAMESPACE environment variable and the WLO_TARGET_NAMESPACE environment variable to the same value.

    WLO_NAMESPACE=my-wlo-namespace
    WLO_TARGET_NAMESPACE=my-wlo-namespace
  2. Create the namespaces, if needed.

    For AllNamespaces installation mode, the operators namespace already exists.

    kubectl create namespace $WLO_NAMESPACE
    kubectl create namespace $WLO_TARGET_NAMESPACE
    Note: For security considerations applicable at the namespace level, see Setting limits with the ResourceQuota resource.
  3. For either OwnNamespace or SingleNamespace mode, create an OperatorGroup.
    Note: If you are using the default AllNamespaces mode, skip this step.
    cat <<EOF | kubectl apply -f -
    apiVersion: operators.coreos.com/v1alpha2
    kind: OperatorGroup
    metadata:
      name: ibm-websphere-liberty
      namespace: $WLO_NAMESPACE
    spec:
      targetNamespaces:
      - $WLO_TARGET_NAMESPACE
    EOF
  4. Install WebSphere Liberty operator.
    cat <<EOF | kubectl apply -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: ibm-websphere-liberty
      namespace: $WLO_NAMESPACE
    spec:
      installPlanApproval: Automatic
      name: ibm-websphere-liberty
      source: ibm-operator-catalog
      sourceNamespace: olm
    EOF

Installing the WebSphere Liberty operator without OLM

The operator supports OwnNamespace, SingleNamespace, and AllNamespaces installation modes. The AllNamespaces installation mode applies to most installations.

In a non-OCP Kubernetes environment without OLM, an option is to use kustomize. For more information, see Installing WebSphere Liberty operator with kustomize.

  1. Create the custom resource definitions (CRDs) for WebSphereLibertyApplication and Day-2 operations WebSphereLibertyTrace and WebSphereLibertyDump. This step needs to be done only one time per cluster.
    kubectl apply -f https://raw.githubusercontent.com/WASdev/websphere-liberty-operator/main/deploy/releases/1.0.2/kubectl/websphereliberty-app-crd.yaml
  2. Create environment variables and namespaces.
    1. Set the operator namespace and the target namespace to watch.

      For the AllNamespaces installation mode, set WLO_TARGET_NAMESPACE to '""'.

      WLO_NAMESPACE=my-wlo-namespace
      WLO_TARGET_NAMESPACE='""'

      For the SingleNamespace mode where the operator watches a different namespace, set WLO_NAMESPACE to the name where the operator is installed, and set WLO_TARGET_NAMESPACE to the name of the namespace to be watched.

      WLO_NAMESPACE=my-wlo-namespace
      WLO_TARGET_NAMESPACE=websphere-liberty-target

      For the OwnNamespace mode, set the WLO_NAMESPACE environment variable and the WLO_TARGET_NAMESPACE environment variable to the same value.

      WLO_NAMESPACE=my-wlo-namespace
      WLO_TARGET_NAMESPACE=my-wlo-namespace
    2. Create any namespaces that are needed.
      kubectl create namespace $WLO_NAMESPACE
      kubectl create namespace $WLO_TARGET_NAMESPACE
      Note: For security considerations applicable at the namespace level, see Setting limits with the ResourceQuota resource.
  3. Install roles and bindings to watch another namespace or all namespaces. Skip this step if the operator is watching its own namespace.
    1. To watch all namespaces, install cluster-level role-based access:
      curl -L https://raw.githubusercontent.com/WASdev/websphere-liberty-operator/main/deploy/releases/1.0.2/kubectl/websphereliberty-app-rbac-watch-all.yaml \
        | sed -e "s/WEBSPHERE_LIBERTY_OPERATOR_NAMESPACE/${WLO_NAMESPACE}/" \
        | kubectl apply -f -
    2. To watch another namespace, install role with access to another namespace:
      curl -L https://raw.githubusercontent.com/WASdev/websphere-liberty-operator/main/deploy/releases/1.0.2/kubectl/websphereliberty-app-rbac-watch-another.yaml \
        | sed -e "s/WEBSPHERE_LIBERTY_OPERATOR_NAMESPACE/${WLO_NAMESPACE}/" \
        | sed -e "s/WEBSPHERE_LIBERTY_WATCH_NAMESPACE/${WLO_TARGET_NAMESPACE}/" \
        | kubectl apply -f -
  4. Install WebSphere Liberty operator.
    curl -L https://raw.githubusercontent.com/WASdev/websphere-liberty-operator/main/deploy/releases/1.0.2/kubectl/websphereliberty-app-operator.yaml \
      | sed -e "s/WEBSPHERE_LIBERTY_WATCH_NAMESPACE/${WLO_TARGET_NAMESPACE}/" \
      | kubectl apply -n ${WLO_NAMESPACE} -f -

What to do next

Validate the installation. At your discretion, you can deploy the sample application.

If the operator failed to install correctly, view the logs.
kubectl logs wlo-controller-manager-xxx