This guide explains how to set up a local Kubernetes environment (Docker Desktop Kubernetes) to run an application with:
- HashiCorp Vault for secrets management
- NGINX Ingress Controller for HTTP routing
- Jenkins for CI/CD automation
- Helm for deployments
- Docker Desktop with Kubernetes enabled
- kubectl and helm installed
helm repo add hashicorp https://helm.releases.hashicorp.comkubectl create namespace vault`helm install -n vault vault hashicorp/vault --set "server.dev.enabled=true"
kubectl exec -it vault-0 -n vault -- vault auth enable kuberneteskubectl exec -it vault-0 -n vault -- sh -c 'vault write auth/kubernetes/config \`
`kubernetes_host=https://$KUBERNETES_PORT_443_TCP_ADDR:443'kubectl exec -it vault-0 -n vault -- vault kv put secret/infrastore-app DJANGO_SUPERUSER_PASSWORD=secret123kubectl create namespace ingress-nginxhelm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.publishService.enabled=true \
--set controller.replicaCount=1 \
--set controller.service.type=LoadBalancerhelm repo add jenkins https://charts.jenkins.io
helm repo updatekubectl create namespace jenkinshelm upgrade --install jenkins jenkins/jenkins \
--namespace jenkins \
--set controller.serviceType=ClusterIP \
--set controller.ingress.enabled=true \
--set controller.ingress.hostName=jenkins.local \
--set controller.ingress.annotations."nginx\.ingress\.kubernetes\.io/rewrite-target"=/ \
--set controller.ingress.path=/ \
--set controller.admin.username=admin \
--set controller.admin.password=admin123 \
--set persistence.enabled=false \
--set controller.ingress.ingressClassName=nginxkubectl create serviceaccount jenkins-sa -n jenkinskubectl create clusterrolebinding jenkins-sa-binding \
--clusterrole=cluster-admin \
--serviceaccount=jenkins:jenkins-saThis Helm chart (infrastore) is used to deploy the application into a Kubernetes cluster using Jenkins.
It integrates with HashiCorp Vault for secret management and supports PVCs for persistent storage.
testapp
├── jenkinsfile # Jenkinsfile for deployment
├── README.md
└── infrastore
├── Chart.yaml # Chart metadata
├── charts
├── templates
│ ├── _helpers.tpl
│ ├── deployment.yaml # Deployment manifest
│ ├── hpa.yaml # Horizontal Pod Autoscaler
│ ├── ingress.yaml # App Ingress resource
│ ├── NOTES.txt
│ ├── pvc.yaml # PersistenceVolumeClaims for media and DB
│ ├── secret.yaml # K8 secret for Django password
│ ├── service.yaml # Service to expose app
│ ├── serviceaccount.yaml # ServiceAccount for the app
│ └── tests
│ └── test-connection.yaml
└── values.yaml # Default Values for chart configuration
helm upgrade --install testapp infrastore \
--namespace appns --create-namespace \
--set-string secret.DJANGO_SUPERUSER_PASSWORD="$DJANGO_PASSWORD"