Introduction
Recently, a community member attempted to install Sitecore 10.4 on a Kubernetes (K8s) cluster and reached out to me regarding the challenges they faced. Despite following Sitecore's standard installation document, they encountered issues due to their limited knowledge of Kubernetes. This blog post summarizes their experience and serves as a reference for other developers in a similar situation.
Steps for Installation
To successfully set up a Sitecore instance in a K8s cluster, follow these detailed steps:
Prerequisites
Access to Azure Kubernetes Service (AKS): Ensure you have the ability to create namespaces and clusters in AKS. Having a team member knowledgeable in Kubernetes is highly beneficial.
Local Tools: Install Azure CLI, Chocolatey, and Helm on your local machine. You'll be needing these while executing commands in PowerShell.
Cluster Specifications Ensure your cluster meets these specifications:
Kubernetes 1.27.x or later
Windows Server 2019 version 1809 or later OS node
Minimum 16 GB RAM per Kubernetes cluster
Quad-core or higher CPU per Kubernetes node
Premium SSD disks
For non-production environments: Minimum VM size of Standard_D4s_v3
For production environments: Minimum VM size of Standard_D8s_v3
Login to Azure Environment Execute the following commands in PowerShell in admin mode to login and retrieve cluster credentials:
az loginaz aks get-credentials --resource-group <your resource group name> --name <your cluster name>
Navigate to Working Directory Change to your working directory where you've unzipped the Sitecore container deployment package:
cd C:\Projects\<your project name>\k8s\ltsc2022\xp1Install Ingress Controller Ingress in Sitecore is similar to Traefik in Docker. It's crucial for networking in the cluster as it exposes routes from outside the cluster to services within the cluster. Run following commands to create ingress and ingress controller:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.replicaCount=2 --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux --set controller.service.externalTrafficPolicy=Local kubectl apply -k ./ingress-nginx/
Configure Secrets Set up the necessary secrets for Sitecore, including admin passwords and SQL credentials. This will specify certain settings called as Secrets to Cluster:
.\k8s-init.ps1 -Topology <your topology like xm1 or xp1> -LicenseXmlPath <license path>\license.xml -IdHost <hostname for id server> -CdHost <hostname for cd server> -CmHost <hostname for cm server> -ExternalIPAddress <Ingress controller IP> -SqlUserPassword <sql user password> -SqlUserName sa -SitecoreAdminPassword <Sitecore admin password>
ExternalIPAddress in above command can be retrieved by running:
kubectl get ingressDeploy Secrets to Cluster
kubectl apply -k ./secrets/Set Up External Services Deploy MSSQL, Solr, and Redis, which are prerequisites for Sitecore:
kubectl apply -k ./external/Run Initialization Scripts Initialize MSSQL and Solr:
kubectl apply -k ./init/kubectl wait --for=condition=Complete job.batch/mssql-init --timeout=900s
Create Storage Volumes This deploys a persistent volume claim:
kubectl apply -f ./volumes/azurefileInstall Sitecore Pods Deploy the Sitecore cd, cm, and id pods:
kubectl apply -k ./This process may take 30 minutes to an hour. Verify pod status with:
If any pod is not in a running state, troubleshoot using:
kubectl describe pod <pod name>Update Local Hosts File Map Ingress IP to the specified hostnames for cd, cm, and id servers in your hosts file:
4.175.34.228 cd.sitename.dev 4.175.34.228 cm.sitename.dev 4.175.34.228 id.sitename.dev
Conclusion
By following these steps, you should be able to successfully set up a Sitecore instance on a Kubernetes cluster. If you encounter issues, consider reaching out to a team member with Kubernetes expertise or leveraging online resources for further assistance. This guide aims to provide a comprehensive reference for developers facing similar challenges in their Sitecore and Kubernetes journey
Comments
Post a Comment