Ce guide explique comment déployer une application Rust sur Google Cloud Run. Cloud Run est un service de calcul sans serveur qui permet d'exécuter des conteneurs sur une plateforme gérée. Il prend en charge les conteneurs Docker et les déploie automatiquement sur une infrastructure sans serveur.
- Créez un projet Google Cloud Platform (GCP) en utilisant la console GCP.
- Installez le SDK Google Cloud (gcloud) sur votre machine locale.
- Installez Docker sur votre machine locale.
- Installez Rust sur votre machine locale.
- Initialisez le SDK: gcloud init et suivez les instructions pour vous connecter et sélectionnez le projet.
- Activer les API nécessaires:
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable containerregistry.googleapis.com
- Configurer l'authentification Docker pour Container Registry:
gcloud auth configure-docker
Il est nécessaire de créer un fichier Dockerfile à la racine du projet pour définir l'image Docker.
Remplacez <IMAGE_NAME> par le nom de votre image (par exemple, dyno_code) et <PROJECT_ID> par votre ID de projet Google Cloud.
gcloud builds submit --tag gcr.io/<PROJECT_ID>/<IMAGE_NAME>
Remplacez <SERVICE_NAME> par le nom de votre service Cloud Run (par exemple, dyno-code-service) et <IMAGE_NAME> par le nom de votre image.
gcloud run deploy <SERVICE_NAME> --image gcr.io/<PROJECT_ID>/<IMAGE_NAME> --platform managed --allow-unauthenticated --region europe-west1
--allow-unauthenticated
permet d'accéder au service sans authentification. Environnement de production, envisagez de gérer l'accès via IAM ou des mécanismes d'authentification.
--region europe-west1
spécifie la région de déploiement. Choisissez la région la plus proche de vos utilisateurs.
- Créez un cluster Kubernetes:
```bash
gcloud container clusters create \
--machine-type n1-standard-2 \
--num-nodes 2 \
--zone us-east1-c \
--cluster-version latest \
dyno-code-kube
- Configurez kubectl pour utiliser le cluster:
gcloud beta container node-pools create user-pool \
--machine-type n1-standard-2 \
--num-nodes 0 \
--enable-autoscaling \
--min-nodes 0 \
--max-nodes 3 \
--node-labels hub.jupyter.org/node-purpose=user \
--node-taints hub.jupyter.org_dedicated=user:NoSchedule \
--zone us-east1-c \
--cluster dyno-code-kube
- Obtenir les informations d'accès au cluster :
gcloud container clusters get-credentials dyno-code-kube --zone us-east1-c
- Vérifiez que kubectl est configuré pour utiliser le cluster:
kubectl config view
kubectl config current-context
cat ~/.kube/config
- Vérifiez que le cluster est prêt:
kubectl get services
kubectl get service dyno-code-service
- Build l'image Docker et la pousser vers Google Container Registry (GCR):
docker build -t dyno_code_api/dyno-code:latest .
docker tag dyno_code_api/dyno-code:latest gcr.io/pa2024-421814/dyno-code:latest
docker push gcr.io/pa2024-421814/dyno-code:latest
docker build -f Dockerfile.executor -t gcr.io/pa2024-421814/executor:latest .
docker push gcr.io/pa2024-421814/executor:latest
- Déployez l'application sur le cluster:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f role_binding.yaml
kubectl apply -f ingress.yaml
- Si vous avez mis a jour le docker latest, vous pouvez mettre a jour l'image du pod:
kubectl set image deployment/dyno-code-deployment dyno-code=gcr.io/pa2024-421814/dyno-code:latest
- Redeployez l'application:
kubectl rollout restart deployment/dyno-code-deployment
- Pour voir les logs:
kubectl logs -f deployment/dyno-code-deployment
- Pour voir les pods:
kubectl get pods -l app=dyno-code
- Pour voir les logs d'un pod:
kubectl logs -f <pod_name>
- Pour les derniers logs:
kubectl logs -l app=dyno-code --tail=1
- Créez un ingress controller si vous n'en avez pas:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
- Créez l'ingress:
kubectl apply -f ingress.yaml
- Pour voir les ingress:
kubectl get ingress
- Installer helm:
helm repo add jetstack https://charts.jetstack.io
helm repo update
- Installer cert-manager:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.14.5/cert-manager.crds.yaml
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.14.5
- Créez un cluster issuer:
kubectl apply -f cluster-issuer.yaml
- Pour voir les cluster issuers:
kubectl get clusterissuers
- Pour être sur que le cluster issuer est bien installé:
kubectl describe clusterissuer letsencrypt-prod