263 lines
6.2 KiB
Markdown
263 lines
6.2 KiB
Markdown
# Kubernetes Deployment Guide
|
|
|
|
This repository contains a shared Helm chart (`app-chart`) that can be used to deploy multiple applications with the same architecture pattern.
|
|
|
|
## Repository Structure
|
|
|
|
```
|
|
.
|
|
├── app-chart/ # Shared Helm chart template
|
|
│ ├── Chart.yaml
|
|
│ ├── values.yaml # Default values
|
|
│ ├── README.md # Detailed documentation
|
|
│ └── templates/ # Kubernetes manifests templates
|
|
├── tasko/ # Tasko application overrides
|
|
│ ├── values.yaml # Tasko-specific values
|
|
│ └── cname.yaml # DNS configuration
|
|
├── my-recipes/ # My-Recipes application overrides
|
|
│ ├── values.yaml # My-Recipes-specific values
|
|
│ └── cname.yaml # DNS configuration
|
|
└── my-recipes-chart/ # Old my-recipes chart (deprecated)
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Deploy Tasko Application
|
|
|
|
```bash
|
|
# Install
|
|
helm install tasko ./app-chart -f tasko/values.yaml -n my-apps --create-namespace
|
|
|
|
# Upgrade
|
|
helm upgrade tasko ./app-chart -f tasko/values.yaml -n my-apps
|
|
|
|
# Uninstall
|
|
helm uninstall tasko -n my-apps
|
|
```
|
|
|
|
### Deploy My-Recipes Application
|
|
|
|
```bash
|
|
# Install
|
|
helm install my-recipes ./app-chart -f my-recipes/values.yaml -n my-apps --create-namespace
|
|
|
|
# Upgrade
|
|
helm upgrade my-recipes ./app-chart -f my-recipes/values.yaml -n my-apps
|
|
|
|
# Uninstall
|
|
helm uninstall my-recipes -n my-apps
|
|
```
|
|
|
|
## Application URLs
|
|
|
|
### Tasko
|
|
- Frontend: https://tasko.dvirlabs.com
|
|
- Backend API: https://api-tasko.dvirlabs.com
|
|
|
|
### My-Recipes
|
|
- Frontend: https://my-recipes.dvirlabs.com
|
|
- Backend API: https://api-my-recipes.dvirlabs.com
|
|
|
|
## Adding a New Application
|
|
|
|
1. **Create application directory**:
|
|
```bash
|
|
mkdir <app-name>
|
|
```
|
|
|
|
2. **Create `<app-name>/values.yaml`**:
|
|
```yaml
|
|
global:
|
|
namespace: my-apps
|
|
|
|
backend:
|
|
image:
|
|
repository: harbor.dvirlabs.com/my-apps/<app-name>-backend
|
|
tag: "latest"
|
|
service:
|
|
port: 8000
|
|
targetPort: 8000
|
|
ingress:
|
|
hosts:
|
|
- host: api-<app-name>.dvirlabs.com
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
tls:
|
|
- secretName: api-<app-name>-tls
|
|
hosts:
|
|
- api-<app-name>.dvirlabs.com
|
|
|
|
frontend:
|
|
image:
|
|
repository: harbor.dvirlabs.com/my-apps/<app-name>-frontend
|
|
tag: "latest"
|
|
env:
|
|
VITE_API_URL: "https://api-<app-name>.dvirlabs.com"
|
|
ingress:
|
|
hosts:
|
|
- host: <app-name>.dvirlabs.com
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
tls:
|
|
- secretName: <app-name>-tls
|
|
hosts:
|
|
- <app-name>.dvirlabs.com
|
|
|
|
postgres:
|
|
user: <app-name>_user
|
|
password: <secure-password>
|
|
database: <app-name>_db
|
|
```
|
|
|
|
3. **Create `<app-name>/cname.yaml`**:
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: <app-name>-cname
|
|
namespace: my-apps
|
|
data:
|
|
frontend: <app-name>.dvirlabs.com
|
|
backend: api-<app-name>.dvirlabs.com
|
|
```
|
|
|
|
4. **Deploy**:
|
|
```bash
|
|
helm install <app-name> ./app-chart -f <app-name>/values.yaml -n my-apps
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Each application can override the base configuration by providing custom values in their `values.yaml` file. Common overrides include:
|
|
|
|
- Image repository and tags
|
|
- Resource limits and requests
|
|
- Environment variables
|
|
- Ingress hostnames
|
|
- Database credentials
|
|
- Replica counts
|
|
|
|
See `app-chart/README.md` for detailed configuration options.
|
|
|
|
## Prerequisites
|
|
|
|
- Kubernetes cluster (1.19+)
|
|
- Helm 3.0+
|
|
- Traefik Ingress Controller installed
|
|
- cert-manager installed (for automatic TLS certificates)
|
|
- kubectl configured to access your cluster
|
|
|
|
## DNS Configuration
|
|
|
|
Configure DNS records to point to your ingress controller:
|
|
|
|
```
|
|
<app-name>.dvirlabs.com CNAME/A <ingress-loadbalancer-ip>
|
|
api-<app-name>.dvirlabs.com CNAME/A <ingress-loadbalancer-ip>
|
|
```
|
|
|
|
## Monitoring Deployments
|
|
|
|
```bash
|
|
# Check all deployments
|
|
kubectl get all -n my-apps
|
|
|
|
# Check specific application
|
|
kubectl get pods -n my-apps -l app.kubernetes.io/instance=tasko
|
|
|
|
# View logs
|
|
kubectl logs -n my-apps -l component=backend --tail=100 -f
|
|
kubectl logs -n my-apps -l component=frontend --tail=100 -f
|
|
|
|
# Check ingress
|
|
kubectl get ingress -n my-apps
|
|
```
|
|
|
|
## Database Management
|
|
|
|
### Access PostgreSQL
|
|
|
|
```bash
|
|
# Port forward to access database locally
|
|
kubectl port-forward -n my-apps svc/tasko-db 5432:5432
|
|
|
|
# Connect using psql
|
|
psql postgresql://tasko_user:tasko_password@localhost:5432/tasko_db
|
|
```
|
|
|
|
### Backup Database
|
|
|
|
```bash
|
|
# Backup
|
|
kubectl exec -n my-apps tasko-db-0 -- pg_dump -U tasko_user tasko_db > backup.sql
|
|
|
|
# Restore
|
|
kubectl exec -i -n my-apps tasko-db-0 -- psql -U tasko_user tasko_db < backup.sql
|
|
```
|
|
|
|
## CI/CD Integration
|
|
|
|
The chart works seamlessly with CI/CD pipelines. Example with Woodpecker CI:
|
|
|
|
```yaml
|
|
steps:
|
|
deploy:
|
|
image: alpine/helm:3.12.0
|
|
commands:
|
|
- helm upgrade --install tasko ./app-chart
|
|
-f tasko/values.yaml
|
|
--set backend.image.tag=${CI_COMMIT_SHA}
|
|
--set frontend.image.tag=${CI_COMMIT_SHA}
|
|
-n my-apps
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Pod not starting
|
|
```bash
|
|
kubectl describe pod -n my-apps <pod-name>
|
|
kubectl logs -n my-apps <pod-name>
|
|
```
|
|
|
|
### Database connection issues
|
|
```bash
|
|
# Check if database is running
|
|
kubectl get pods -n my-apps -l component=database
|
|
|
|
# Test connection from backend pod
|
|
kubectl exec -n my-apps <backend-pod> -- env | grep DB_
|
|
```
|
|
|
|
### Ingress not working
|
|
```bash
|
|
# Check ingress configuration
|
|
kubectl describe ingress -n my-apps <app-name>-backend
|
|
kubectl describe ingress -n my-apps <app-name>-frontend
|
|
|
|
# Check cert-manager certificates
|
|
kubectl get certificate -n my-apps
|
|
kubectl describe certificate -n my-apps <app-name>-tls
|
|
```
|
|
|
|
## Migration from Old Chart
|
|
|
|
If migrating from the old `my-recipes-chart`:
|
|
|
|
1. **Backup your data**
|
|
2. **Update DNS** if hostnames changed
|
|
3. **Deploy with new chart**:
|
|
```bash
|
|
helm uninstall my-recipes # Old release
|
|
helm install my-recipes ./app-chart -f my-recipes/values.yaml -n my-apps
|
|
```
|
|
|
|
## Support
|
|
|
|
For detailed documentation, see:
|
|
- `app-chart/README.md` - Complete chart documentation
|
|
- `helm/README.md` - Docker image building and deployment
|
|
|
|
For issues and questions, please open an issue in the repository.
|