This topic explains how to deploy a Hazelcast cluster using Operator for Kubernetes.
| If you want to migrate from the Hazelcast Helm Chart, see Migrate from Helm to Operator. |
Overview
As part of the deployment process, you will install the custom resource definitions (CRDs) 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 Operator CRD, see Hazelcast Platform Operator API Docs.
Prerequisites
-
A Kubernetes or OpenShift cluster.
-
The
kubectloroccommand line tools, configured to communicate with your cluster. -
Helm. -
A Hazelcast Enterprise license key. If you don’t have a license key, you can request one from the Hazelcast website.
| Because CRDs are global resources, they may need to be installed by an administrator. |
Install and run Operator
Operator is installed using a Helm chart.
Hazelcast images are hosted at docker.io/hazelcast and registry.connect.redhat.com/hazelcast. The Docker images are used by default. If you need to fetch images from Red Hat or a private mirror, you can change the default image registry.
|
-
Add the Hazelcast Helm Charts repository to your Helm repository list:
helm repo add hazelcast https://hazelcast-charts.s3.amazonaws.com/ helm repo update -
You can either deploy Operator at the same time as the CRDs or separately.
Run the following command to deploy Operator and the CRDs together. By default, Operator watches all namespaces. Use the
watchedNamespacesvariable to change this configuration if needed.helm install operator hazelcast/hazelcast-platform-operator --version=5.17.0-snapshot \ --set=installCRDs=trueRun the following commands to deploy Operator and the CRDs separately.
helm install operator-crds hazelcast/hazelcast-platform-operator-crds --version=5.17.0-snapshotAfter installing CRDs, install Operator by running the following command. This operation requires only namespace-scoped permissions for
hz-system,ns-1andns-2namespaces, which should already exist.helm install operator hazelcast/hazelcast-platform-operator --version=5.17.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 createClusterScopedResourcesmeans that the management of resources by Operator is constrained to specified namespaces, improving security.2 Disabling webhook.enabledmeans that webhooks cannot be used. The cluster-wide permissions required for webhooks conflict with the restrictions on cluster-scoped resource creation.3 Disabling enableHazelcastNodeDiscoverymeans that Operator does not automatically discover nodes across all namespaces. This limits the use ofNODE_AWAREinhighAvailabilityModeand ofNodePortindiscoveryServiceType, 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 -
Monitor the Operator logs. At this point, Operator should be up and running. To check:
Start the Hazelcast cluster
After installing and running Operator, you can create a Hazelcast cluster.
-
Create a Kubernetes secret to hold your license key.
For Kuberneteskubectl create secret generic hazelcast-license-key --from-literal=license-key=<YOUR LICENSE KEY>For Openshiftoc create secret generic hazelcast-license-key --from-literal=license-key=<YOUR LICENSE KEY> -
Create the
Hazelcastcustom resource file and name ithazelcast-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.6.0-slim' licenseKeySecretName: hazelcast-license-key -
Apply the custom resource to start the Hazelcast cluster.
For Kuberneteskubectl apply -f hazelcast-enterprise.yamlFor Openshiftoc apply -f hazelcast-enterprise.yaml -
Verify that Hazelcast cluster is up and running by checking the Hazelcast member logs.
For Kuberneteskubectl logs pod/hazelcast-sample-0For Openshiftoc 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
]
Check that the Hazelcast cluster is running
To check if a cluster is running, see the status field of the Hazelcast resource. You can check the status using get hazelcast:
NAME STATUS MEMBERS
hazelcast-sample Running 3/3
You can also view a more detailed status report in YAML format:
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.
For more information, see the API reference.
Next steps
Expose Hazelcast clusters outside Kubernetes so you can connect external clients to them.