This is a prerelease version.

View latest

Deploy a Cluster with the Hazelcast Platform Operator for Kubernetes

This topic explains how to deploy a Hazelcast cluster using Hazelcast Platform Operator for Kubernetes.

Prerequisites

  • A Kubernetes or OpenShift cluster

  • The kubectl or oc command-line tools, configured to communicate with your cluster

  • Helm

If you want to migrate from the Hazelcast Helm Chart, please follow the guidance in Migrating from Helm document.

Step 1. Deploy Hazelcast Platform Operator

As part of the deployment process, you will install the custom resource definitions (CRD) that describe the Hazelcast resource types.

A CRD is a Kubernetes feature that allows you to create custom resources that extend the Kubernetes API. CRDs allow new types of resources tailored to specific use cases to be created, without adding another API server. They also provide detailed reports on the configuration content of a CRD to any authorized Kubernetes API consumer. Using CRDs, you can:

  • Introduce unique objects or types into the Kubernetes cluster

  • Create platform resources on top of Kubernetes

  • Build and use platforms through self-service activity

For example, the clusterName field in the Hazelcast CRD can be used to rename a cluster.

CRDs are expressed in YAML format, just like standard Kubernetes entities. The Kubernetes API server processes and manages CRDs the same way it does with built-in resources.

For more information about the Hazelcast Platform Operator CRD, see API types.

Install and run Operator

From release 5.6.0 onwards, you can use a Helm chart to install the Hazelcast Platform Operator.

  1. Add the Hazelcast Helm Charts repository to your Helm repository list by running the following command:

    helm repo add hazelcast https://hazelcast-charts.s3.amazonaws.com/
    helm repo update
  2. You can either deploy the Hazelcast Platform Operator at the same time as CRDs or separately.

    Since CRDs are global resources, they may need to be installed by an administrator.
    • Cluster Wide Installation

    • Restricted Installation

    Run the following command to deploy the Operator and the CRDs together. By default, the Hazelcast Platform Operator watches all namespaces. Use the watchedNamespaces variable to update this configuration.

    helm install operator hazelcast/hazelcast-platform-operator --version=5.15.0-snapshot \
        --set=installCRDs=true

    Run the following commands to deploy the Operator and the CRDs separately. An administrator may need to do this.

    helm install operator-crds hazelcast/hazelcast-platform-operator-crds --version=5.15.0-snapshot

    After installing CRDs, install the Operator by running the following command. This operation requires only namespace-scoped permissions for hz-system, ns-1 and ns-2 namespaces which should already exist.

    helm install operator hazelcast/hazelcast-platform-operator --version=5.15.0-snapshot -n hz-system \
        --set=createClusterScopedResources=false \(1)
        --set=webhook.enabled=false \(2)
        --set=enableHazelcastNodeDiscovery=false \(3)
        --set=installCRDs=false \
        --set=watchedNamespaces="{ns-1, ns-2}"
    1 Disabling createClusterScopedResources means that the management of resources by Operator is constrained to specified namespaces. This enhances both security and compliance.
    2 Disabling webhook.enabled means that webhooks cannot be used. This is needed as the cluster-wide permissions required for webhooks conflict with our restrictions on cluster-scoped resource creation.
    3 Disabling enableHazelcastNodeDiscovery means that Operator does not automatically discover nodes across all namespaces. This limits the use of NODE_AWARE in highAvailabilityMode and of NodePort in discoveryServiceType, both of which depend on broader node discovery.
    You can view all configuration options by running the following command: helm show values hazelcast/hazelcast-platform-operator
  3. Monitor the operator logs. At this point, the Hazelcast Platform Operator should be up and running. You can check it with the command below.

    • Kubernetes

    • Openshift

    kubectl logs deployment.apps/operator-hazelcast-platform-operator -n hz-system
    oc logs deployment.apps/operator-hazelcast-platform-operator -n hz-system

Step 2. Start the Hazelcast Cluster

After installing and running the Hazelcast Platform Operator, you can create a Hazelcast cluster.

Hazelcast Enterprise requires a license key. If you don’t have a license key, you can request one from the Hazelcast website.

  1. Create a Kubernetes secret to hold your license key.

    For Kubernetes
    kubectl create secret generic hazelcast-license-key --from-literal=license-key=<YOUR LICENSE KEY>
    For Openshift
    oc create secret generic hazelcast-license-key --from-literal=license-key=<YOUR LICENSE KEY>
  2. Create the Hazelcast custom resource file and name it hazelcast-enterprise.yaml.

    apiVersion: hazelcast.com/v1alpha1
    kind: Hazelcast
    metadata:
      name: hazelcast-sample
    spec:
      clusterSize: 3
      clusterName: mycluster
      repository: 'docker.io/hazelcast/hazelcast-enterprise'
      version: '5.5.2-slim'
      licenseKeySecretName: hazelcast-license-key
  3. Apply the custom resource to start the Hazelcast cluster.

    For Kubernetes
    kubectl apply -f hazelcast-enterprise.yaml
    For Openshift
    oc apply -f hazelcast-enterprise.yaml
  4. Verify that Hazelcast cluster is up and running by checking the Hazelcast member logs.

    For Kubernetes
    kubectl logs pod/hazelcast-sample-0
    For Openshift
    oc logs pod/hazelcast-sample-0

You should see the following:

Members {size:3, ver:3} [
        Member [10.36.8.3]:5701 - ccf31703-de3b-4094-9faf-7b5d0dc145b2 this
        Member [10.36.7.2]:5701 - e75bd6e2-de4b-4360-8113-040773d858b7
        Member [10.36.6.2]:5701 - c3d105d2-0bca-4a66-8519-1cacffc05c98
]

Step 3. Check that the Hazelcast Cluster is running

To check if a cluster is running, see the status field of the Hazelcast resource.

The status can be checked using the get hazelcast command.

  • Kubernetes

  • Openshift

kubectl get hazelcast
oc get hazelcast
NAME               STATUS    MEMBERS
hazelcast-sample   Running   3/3

You can use the following command for the long format.

  • Kubernetes

  • Openshift

kubectl get hazelcast hazelcast-sample -o=yaml
oc get hazelcast hazelcast-sample -o=yaml
status:
  hazelcastClusterStatus:
    readyMembers: 3/3
  phase: Running

The phase field represents the current status of the cluster, and can contain any of the following values:

  • Running: The cluster is up and running.

  • Pending: The cluster is in the process of starting.

  • Failed: An error occurred while starting the cluster.

Any additional information such as validation errors will be provided in the message field.

The readyMembers field represents the number of Hazelcast members that are connected to the cluster.

Next Steps

Learn how to expose Hazelcast clusters outside Kubernetes so you can connect external clients to them.