Search code examples
kubernetes-helmazure-aksapache-pulsar

Unable to deploy Apache Pulsar on AKS. 'selectedNode annotation value "" not set'


This is my first attempt to deploy Pulsar on AKS v1.15.11.

I'm getting a not very verbose error messages from 2 pods that are "unscheduled" :

enter image description here

Firtst pod unscheduled "pulsar-zookeeper-0"

[Pod] [pulsar-zookeeper-0] FailedScheduling: selectedNode annotation value "" not set to scheduled node "aks-agentpool-20916223-vmss000001"

Second Pod unscheduled "pulsar-bookkeeper-0"

[Pod] [pulsar-bookkeeper-0] FailedScheduling: selectedNode annotation value "" not set to scheduled node "aks-pulsar-20916223-vmss000001"

Here's a detailed procedure of what I did. I've used official helm-charts for deployments

helm repo add kafkaesque https://helm.kafkaesque.io
helm repo update

Based on the documentation, I understood that I need to feed theese values in my storage_values.yaml file.

default_storage:
  provisioner: kubernetes.io/azure-disk
  fsType: ext4
  type: managed-premium
  extraParams:
    storageaccounttype: Premium_LRS
    kind: Managed
    cachingmode: ReadOnly

Also created the namespace

{
  "kind": "Namespace",
  "apiVersion": "v1",
  "metadata": {
     "name": "pulsar",
     "labels": {
       "name": "pulsar"
     }
  }
}

Using this command

kubectl create -f namespace-pulsar.json

Then then I launched the deployment using the previous values

helm install pulsar kafkaesque/pulsar --namespace pulsar --values storage_values.yaml

Solution

  • AKS already comes with Storage Classes

    you shouldn't need to tell your Chart to create a Storage Class using

    default_storage:
      provisioner: kubernetes.io/azure-disk
      fsType: ext4
      type: managed-premium
      extraParams:
        storageaccounttype: Premium_LRS
        kind: Managed
        cachingmode: ReadOnly
    

    Instead update the StorageClassName variable to have your pods create their PVC using an existing Storage Class from AKS

    run kubectl get sc to get a list of all deployed storage classes

    For your particular Chart,

    Create a new file called storage_values.yaml for the storage class settings. To use an existing storage class (including the default one) set this value:

    default_storage:
      existingStorageClassName: default or <name of storage class>
    

    ref: https://helm.kafkaesque.io