The Kubernetes Operator to deploy and manage Temporal clusters.
- Deploy a new temporal cluster.
- Ability to deploy multiple clusters.
- Support for SQL datastores.
- Deploy Web UI.
- Deploy admin tools.
- Support for Elastisearch.
- Support for Cassandra datastore.
- Automatic mTLS certificates management (using cert-manager).
- Support for integration in meshes: istio & linkerd.
- Namespace management using CRDs.
- Cluster version upgrades.
- Cluster monitoring.
- Complete end2end test suite.
- Auto scaling.
- Multi cluster replication.
First install cert-manager on your cluster. The operator comes with admissions webhooks that needs self-signed certificates.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.1/cert-manager.yaml
(You can use the installation method you want, see the cert-manager's documentation). Note that you can use your own certificates if you don't want cert-manager on your cluster.
Then install Temporal Operator's CRDs and the operator itself on your cluster:
kubectl apply --server-side -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.crds.yaml
kubectl apply -f https://github.com/alexandrevilain/temporal-operator/releases/latest/download/temporal-operator.yaml
Then create the namespace "demo" and create a simple postgresql server:
kubectl apply -f https://raw.githubusercontent.com/alexandrevilain/temporal-operator/main/examples/cluster-postgres/00-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/alexandrevilain/temporal-operator/main/examples/cluster-postgres/01-postgresql.yaml
Finish by creating your first temporal cluster:
apiVersion: temporal.io/v1beta1
kind: TemporalCluster
metadata:
name: prod
namespace: demo
spec:
version: 1.20.0
numHistoryShards: 1
persistence:
defaultStore:
sql:
user: temporal
pluginName: postgres
databaseName: temporal
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
visibilityStore:
sql:
user: temporal
pluginName: postgres
databaseName: temporal_visibility
connectAddr: postgres.demo.svc.cluster.local:5432
connectProtocol: tcp
passwordSecretRef:
name: postgres-password
key: PASSWORD
Apply this file to the cluster. For more customization options refers to the api documentation.
- Using overrides to customize rendered resources
- Monitoring temporal using prometheus-operator
- Using temporal server dynamic config
Few examples are available to help you get started:
- Demo cluster with PostgreSQL
- Demo cluster with PostgreSQL & advanced visibility using ElasticSearch
- Demo cluster with Cassandra
- Demo cluster with mTLS using cert-manager & PostgreSQL as datastore
The following table shows operator compatibility with Temporal and Kubernetes. Please note this table only reports end-to-end tests suite coverage, others versions may work.
Temporal Operator | Temporal | Kubernetes |
---|---|---|
v0.12.x | v1.18.x to v1.20.x | v1.23 to v1.26 |
v0.11.x | v1.17.x to v1.19.x | v1.23 to v1.26 |
v0.10.x | v1.17.x to v1.19.x | v1.23 to v1.26 |
v0.9.x | v1.16.x to v1.18.x | v1.22 to v1.25 |
Feel free to contribute to the project ! All issues and PRs are welcome! To start hacking on the project, you can follow the local development documentation page.
Temporal Operator is licensed under Apache License Version 2.0. See LICENSE for more information.