Skip to content

Cluster Deployment with KubeDirector

Joel Baxter edited this page Jul 14, 2020 · 14 revisions

The end user creates a cluster by providing a custom resource (CR) specification to K8s, for example by using "kubectl create". The CR spec identifies the relevant KubeDirector app type definition (KubeDirectorApp resource), configures the roles, and provides selection values for available choices. KubeDirector will validate CRs to ensure that they are legal for that application type.

A CR spec for an instance of the example Cassandra application is shown below. This example specifies 2 "seed" role members and one "worker" role member. 40Gi of persistent shared storage is also requested for each member in each role.

apiVersion: kubedirector.hpe.com/v1beta1
kind: KubeDirectorCluster
metadata:
  name: mycluster
spec:
  app: cassandra311
  roles:
  - id: seed
    members: 2
    resources:
      requests:
        memory: "4Gi"
        cpu: "2"
      limits:
        memory: "4Gi"
        cpu: "2"
    storage:
      size: "40Gi"
  - id: worker
    members: 1
    resources:
      requests:
        memory: "4Gi"
        cpu: "2"
      limits:
        memory: "4Gi"
        cpu: "2"
    storage:
      size: "40Gi"

For more details, see the complete spec for KubeDirectorCluster.

After the CR has been created, a user can read it (for example by using "kubectl get") to find information about the various resources that make up the application cluster and any changes that the cluster is undergoing. An example of the CR is shown below, at a point where it has finished initial setup and is ready for use.

apiVersion: kubedirector.hpe.com/v1beta1
kind: KubeDirectorCluster
metadata:
  creationTimestamp: "2020-02-24T17:57:57Z"
  finalizers:
  - kubedirector.hpe.com/cleanup
  generation: 1
  name: mycluster
  namespace: default
  resourceVersion: "16500"
  selfLink: /apis/kubedirector.hpe.com/v1beta1/namespaces/default/kubedirectorclusters/mycluster
  uid: f1ced958-cac3-4996-94d4-0e9fa294d1e6
spec:
  app: cassandra311
  appCatalog: local
  roles:
  - id: seed
    members: 2
    resources:
      limits:
        cpu: "2"
        memory: 4Gi
      requests:
        cpu: "2"
        memory: 4Gi
    storage:
      size: 40Gi
      storageClassName: standard
  - id: worker
    members: 1
    resources:
      limits:
        cpu: "2"
        memory: 4Gi
      requests:
        cpu: "2"
        memory: 4Gi
    storage:
      size: 40Gi
      storageClassName: standard
  serviceType: LoadBalancer
status:
  clusterService: kdhs-gnqdt
  generationUID: 0026d2f3-e804-42a7-a9c1-b794e35776b4
  lastNodeID: 3
  memberStateRollup:
    configErrors: false
    membersDown: false
    membersInitializing: false
    membersRestarting: false
    membersWaiting: false
    membershipChanging: false
  roles:
  - id: worker
    members:
    - nodeID: 1
      pod: kdss-grckq-0
      pvc: p-kdss-grckq-0
      service: s-kdss-grckq-0
      state: configured
      stateDetail:
        lastConfigDataGeneration: 1
        lastConfiguredContainer: docker://8bf09a98d2b485834a9c5424e61f931fcfc6e2c5a068611d4c433cc2a7d53584
        lastKnownContainerState: running
        lastSetupGeneration: 1
    statefulSet: kdss-grckq
  - id: seed
    members:
    - nodeID: 2
      pod: kdss-fqn78-0
      pvc: p-kdss-fqn78-0
      service: s-kdss-fqn78-0
      state: configured
      stateDetail:
        lastConfigDataGeneration: 1
        lastConfiguredContainer: docker://6bce637e473c45e21fa89ea84fbf0c095c613babfbb943de14df57249ffab8d6
        lastKnownContainerState: running
        lastSetupGeneration: 1
    - nodeID: 3
      pod: kdss-fqn78-1
      pvc: p-kdss-fqn78-1
      service: s-kdss-fqn78-1
      state: configured
      stateDetail:
        lastConfigDataGeneration: 1
        lastConfiguredContainer: docker://a483133387febb9704b7b1dc1b6015e04c87ac992c65f2c9f4cf940704d953ba
        lastKnownContainerState: running
        lastSetupGeneration: 1
    statefulSet: kdss-fqn78
  specGenerationToProcess: 1
  state: configured

A user can later reconfigure the cluster -- e.g. to add or remove role members -- by changing the CR and re-applying it.