Digital Ocean Kubernetes Services
Documentation Déploiement Kubernetes sur DigitalOcean
Ce document détaille les étapes pour configurer un cluster Kubernetes sur DigitalOcean avec doctl
, déployer une application web pour l'entreprise fictive ALPHA sur tk.skyfik.net, configurer un Service Kubernetes, un Ingress, et des certificats TLS avec cert-manager tout en utilisant le registre de conteneurs de Digital Ocean
Prérequis
Un compte DigitalOcean avec un cluster Kubernetes (
k8s-imad
) et un registre de conteneurs (imad-cr
).doctl
installé via snap.kubectl
ethelm
installés.Outils supplémentaires :
vim
,k9s
(facultatif, pour l'interface de gestion Kubernetes).Un domaine (
tk.skyfik.net
) configuré dans le DNS pour pointer vers l'adresse IP du service NGINX Ingress.
Étapes de configuration
1. Installation et configuration de doctl
doctl
Initialiser l'authentification :
doctl auth init
Fournir le token d'accès DigitalOcean.
Vérifier les comptes configurés :
doctl auth list
Obtenir les informations du compte :
doctl account get
Connexion au registre de conteneurs DigitalOcean ( si vous utiliser le registry digital ocean ) :
doctl registry login
Connecter doctl
à Docker :
doctl
à Docker :sudo snap connect doctl:dot-docker
Vérifier les secrets du registre dans Kubernetes :
kubectl get secret -n default | grep registry
Vérifie la présence du secret registry-imad-cr
.
2. Configuration du cluster Kubernetes
Créer un répertoire de travail :
mkdir DOKS && cd DOKS
Sauvegarder la configuration kubeconfig
du cluster :
kubeconfig
du cluster :doctl kubernetes cluster kubeconfig save k8s-imad
Enregistre la configuration du cluster k8s-imad
dans ~/.kube/config
.
Vérifier les nœuds du cluster :
kubectl get nodes
Lister les namespaces :
kubectl get namespaces
Utiliser k9s
pour gérer le cluster si installé(facultatif) :
k9s
pour gérer le cluster si installé(facultatif) :k9s
Ouvre l'interface k9s
pour gérer le cluster.
3. Création et déploiement de l'application web
Créer la structure de répertoires pour l'application :
mkdir -p alpha-web/html
cd alpha-web/
Créer le fichier html/index.html
:
html/index.html
:vim html/index.html
Contenu du fichier :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pagé via DOKS</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 flex flex-col items-center justify-center min-h-screen">
<div class="bg-white p-8 rounded-lg shadow-lg text-center max-w-2xl">
<img src="https://via.placeholder.com/150" alt="ALPHA Logo" class="mx-auto mb-6">
<h1 class="text-4xl font-bold text-blue-800 mb-4">Bienvenue sur cette page</h1>
<p class="text-lg text-gray-600 mb-8">Page de Test de déploiement</p>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<a href="https://cloud.skyfik.net" class="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition">Cloud</a>
<a href="https://webmail.skyfik.net" class="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition">Webmail pour employés</a>
<a href="https://sentinel.skyfik.net" class="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition">Centre de contrôle</a>
<a href="https://supervision.skyfik.net" class="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 transition">Supervision</a>
</div>
</div>
</body>
</html>
Créer un fichier Dockerfile
:
Dockerfile
:vim Dockerfile
Contenu du fichier :
FROM nginx:latest
COPY html /usr/share/nginx/html
EXPOSE 80
Construire l'image Docker :
docker build -t pa-alpha-site:latest .
Tagger l'image pour le registre DigitalOcean :
docker tag pa-alpha-site:latest registry.digitalocean.com/imad-cr/pa-alpha-site:latest
Pousser l'image vers le registre :
docker push registry.digitalocean.com/imad-cr/pa-alpha-site:latest
4. Déploiement de l'application sur Kubernetes
Créer un fichier deployment.yaml
:
deployment.yaml
:vim deployment.yaml
Contenu du fichier :
apiVersion: apps/v1
kind: Deployment
metadata:
name: alpha-web
spec:
replicas: 2
selector:
matchLabels:
app: alpha-web
template:
metadata:
labels:
app: alpha-web
spec:
imagePullSecrets:
- name: registry-imad-cr
containers:
- name: alpha-web
image: registry.digitalocean.com/imad-cr/pa-alpha-site:latest
ports:
- containerPort: 80
Créer un fichier service.yaml
:
service.yaml
:vim service.yaml
Contenu du fichier :
apiVersion: v1
kind: Service
metadata:
name: alpha-web-service
spec:
ports:
- port: 80
targetPort: 80
selector:
app: alpha-web
Appliquer les configurations :
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Vérifier le déploiement et le service :
kubectl get deployment
kubectl get services
5. Configuration de l'Ingress avec TLS
Installer le contrôleur NGINX Ingress :
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.publishService.enabled=true
Vérifier le service NGINX Ingress :
kubectl --namespace default get services -o wide -w nginx-ingress-ingress-nginx-controller
Créer un fichier certificat.yaml
pour cert-manager :
certificat.yaml
pour cert-manager :vim certificat.yaml
Contenu du fichier :
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: [email protected]
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod-private-key
solvers:
- http01:
ingress:
class: nginx
Installer cert-manager :
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.10.1 --set installCRDs=true
Appliquer le ClusterIssuer :
kubectl apply -f certificat.yaml
Créer un fichier ingress.yaml
:
ingress.yaml
:vim ingress.yaml
Contenu du fichier :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alpha-web-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- tk.skyfik.net
secretName: alpha-web-tls
rules:
- host: tk.skyfik.net
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: alpha-web-service
port:
number: 80
Appliquer l'Ingress :
kubectl apply -f ingress.yaml
Vérifier l'état des ressources :
kubectl get pods
kubectl get svc
kubectl get ingress
kubectl describe certificate alpha-web-tls
6. Configuration DNS
Configurez le domaine
tk.skyfik.net
dans votre fournisseur DNS pour pointer vers l'adresse IP publique du servicenginx-ingress-ingress-nginx-controller
.Obtenez l'IP du Load Balancer avec :
kubectl get svc nginx-ingress-ingress-nginx-controller -o wide
7. Dépannage
Vérifier les logs d'un pod :
kubectl logs -l app=alpha-web
Détailler l'Ingress :
kubectl describe ingress alpha-web-ingress
Vérifier les événements du certificat :
kubectl describe certificate alpha-web-tls
Problèmes de registre : Assurez-vous que le secret
registry-imad-cr
existe :kubectl get secret | grep registry-imad-cr
Structure des fichiers
Dans le répertoire DOKS/alpha-web/
:
imad@terraform:~/DOKS/alpha-web# sudo ls -1
Dockerfile
certificat.yaml
deployment.yaml
html
ingress.yaml
service.yaml
Architecture

[Pods (alpha-web)] --> [Service (alpha-web-service)] --> [Ingress (alpha-web-ingress)] --> [Cert-Manager (TLS)]
Conclusion
Cette configuration déploie une application web sur un cluster Kubernetes DigitalOcean, accessible via tk.skyfik.net
avec un certificat TLS fourni par Let's Encrypt. Utilisez k9s
ou kubectl
pour surveiller et gérer vos ressources.
Last updated
Was this helpful?