About Deploying in a Multi-Architecture Kubernetes Cluster

Kubernetes supports single architecture and multi-architecture clusters. A single architecture cluster is a cluster in which nodes within the cluster use the same computer instruction set. For example, a single-architecture cluster could consist of all arm64 nodes or all amd64 nodes. A multi-architecture cluster is a Kubernetes cluster in which nodes within the cluster may be of different computer instruction sets. For example, a multi-architecture cluster could consist of both amd64 and arm64 nodes.

The TimesTen Operator runs in single and multi-architecture Kubernetes clusters. Pods that are created by the TimesTen Operator run on nodes of the same node type as the TimesTen Operator. For example, if the TimesTen Operator runs on arm64 nodes, Pods created by this TimesTen Operator also run on arm64 nodes.

Since the TimesTen Operator is namespace-scoped, you can deploy the TimesTen Operator in one namespace on arm64 nodes (and have it provision and manage TimesTen on arm64 nodes) and you can deploy a second TimesTen Operator in a different namespace on amd64 nodes (and have it provision and manage TimesTen on amd64 nodes).

In addition, there are the following considerations:
  • TimesTen Operators that run on arm64 nodes support TimesTenClassic objects, but not TimesTenScaleout objects.

  • TimesTen Operators that run on amd64 nodes support TimesTenClassic and TimesTenScaleout objects.

The affinity settings of both the operator.yaml YAML manifest file and the ttoperator Helm chart control whether the Operator and the objects it manages uses arm64 or amd64 nodes. For example, here is a snippet of the affinity section of the operator.yaml file.

# An example affinity definition; this pod will only be assigned to a node
# running on amd64 (the default)
#
#     affinity:
#       nodeAffinity:
#         requiredDuringSchedulingIgnoredDuringExecution:
#           nodeSelectorTerms:
#             - matchExpressions:
#               - key: "kubernetes.io/arch"
#                 operator: In
#                 values: ["amd64"]
...
If your Kubernetes cluster consists of a single architecture, you do not need to change the affinity section. However, if you are using a multi-architecture cluster, you must instruct Kubernetes to deploy the TimesTen Operator on a specific architecture. Here's how:
  • Uncomment the .affinity.nodeAffinity section.

  • In the .affinity.nodeAffinity.nodeSelectorTerms section where key has the value "kubernetes-io/arch", specify either "amd64" or "arm64" for the values datum.

For example, to instruct Kubernetes to deploy the TimesTen Operator and the objects it manages on arm64 nodes, do the following:
# An example affinity definition; this pod will only be assigned to a node
# running on amd64 (the default)
#
      affinity:
       nodeAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
             - matchExpressions:
               - key: "kubernetes.io/arch"
                 operator: In
                 values: ["arm64"]
...
Valid values for the values datum are:
  • "amd64": Use this for TimesTen Operators that you want to run on amd64 nodes.

  • "arm64": Use this for TimesTen Operators that you want to run on arm64 nodes.