Today I will guide you through the deployment of a HANA Express database on AKS – Managed Kubernetes on Azure. One of my colleagues out of the GBB SAP team has asked me, if the setup described for GKE on the SAP website is also possible for AKS on Azure.
The answer is yes. I have written a PowerShell script which leverages the Azure CLI and a YAML file to deploy an AKS cluster and the HANA Express database on AKS. I have used the same configuration details as provided in the SAP tutorial. So, the AKS cluster will have three agent nodes with 4 vCPUs and 32 GB memory each using the Standard_A4m_v2 Azure VM size. So, what do you need to deploy the HANA Express database on AKS?
- Access to an Azure subscription
- Azure Cloud Shell – Bash
- Docker Registry credentials
- deploy_HXE_AKS.ps1 file from the following GitHub repo.
Let us start with the first step logging in to the Azure Cloud Shell (https://shell.azure.com/). Type in pwsh to start a PowerShell Core session. Next step is to download the deploy_HXE_AKS.ps1 to your Azure Cloud Shell session.
Then we kick off the deployment with the command ./deploy_HXE_AKS.ps1.
You will be asked in which region you would like to deploy the AKS cluster. Currently, you can only choose between West Europe, East US, and Central US. The PowerShell script will then create a resource group called “aks-hxe-rg” in the selected region and deploys the AKS cluster called “aks-hxe-cluster” into it.
Throughout the setup you will be asked to specify the master password for the HANA Express database installation and your Docker Registry credentials to pull the SAP HANA Express Edition image. The master password for the HANA Express database should have at least 8 characters with one uppercase letter, one lowercase letter, and one number.
The PowerShell script is designed to create the necessary Kubernetes secrets for the HANA Express database master password and for the Docker Registry. I have modified the YAML file for the HANA Express database deployment, so it will use the master password secret instead of specifying the password in the YAML file as described in the SAP tutorial.
apiVersion: v1 kind: PersistentVolume metadata: name: persistent-vol-hxe labels: type: local spec: storageClassName: manual capacity: storage: 150Gi accessModes: - ReadWriteOnce hostPath: path: /data/hxe_pv --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hxe-pvc spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 50Gi --- apiVersion: v1 kind: Pod metadata: name: hxe-pod labels: name: hxe-pod spec: initContainers: - name: install image: busybox command: [ 'sh', '-c', 'chown 12000:79 /hana/mounts' ] volumeMounts: - name: hxe-data mountPath: /hana/mounts restartPolicy: OnFailure volumes: - name: hxe-data persistentVolumeClaim: claimName: hxe-pvc - name: hxe-config secret: defaultMode: 420 secretName: masterpassword imagePullSecrets: - name: docker-secret containers: - name: hxe-container image: "store/saplabs/hanaexpress:2.00.022.00.20171211.1" ports: - containerPort: 39013 name: port1 - containerPort: 39015 name: port2 - containerPort: 39017 name: port3 - containerPort: 8090 name: port4 - containerPort: 39041 name: port5 - containerPort: 59013 name: port6 args: [ "--agree-to-sap-license", "--dont-check-system", "--passwords-url", "file:///hana/hxeconfig/password.json" ] volumeMounts: - name: hxe-data mountPath: /hana/mounts - name: hxe-config mountPath: /hana/hxeconfig
After the PowerShell script execution type in kubectl describe pod hxe-pod to get more details about the current deployment status. The image pull will take some time.
After the successful image pull have a look at the logs with the following command.
kubectl logs hxe-pod
Continue showing the logs until you get a Startup finished! as the last output of the logs.
Afterwards we can execute the command kubectl exec -it hxe-pod bash to get access to the bash of the pod. Followed by the command hdbsql -i 90 -d HXE -u SYSTEM -p YOURPASSWORD, we can log in to the SAP HANA Database interactive terminal.