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).doctlinstallé via snap.kubectlethelminstallé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
doctlInitialiser l'authentification :
doctl auth initFournir le token d'accès DigitalOcean.
Vérifier les comptes configurés :
doctl auth listObtenir les informations du compte :
doctl account getConnexion au registre de conteneurs DigitalOcean ( si vous utiliser le registry digital ocean ) :
doctl registry loginConnecter doctl à Docker :
doctl à Docker :sudo snap connect doctl:dot-dockerVérifier les secrets du registre dans Kubernetes :
kubectl get secret -n default | grep registryVérifie la présence du secret registry-imad-cr.
2. Configuration du cluster Kubernetes
Créer un répertoire de travail :
mkdir DOKS && cd DOKSSauvegarder la configuration kubeconfig du cluster :
kubeconfig du cluster :doctl kubernetes cluster kubeconfig save k8s-imadEnregistre la configuration du cluster k8s-imad dans ~/.kube/config.
Vérifier les nœuds du cluster :
kubectl get nodesLister les namespaces :
kubectl get namespacesUtiliser k9s pour gérer le cluster si installé(facultatif) :
k9s pour gérer le cluster si installé(facultatif) :k9sOuvre 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.htmlContenu 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 DockerfileContenu du fichier :
FROM nginx:latest
COPY html /usr/share/nginx/html
EXPOSE 80Construire 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:latestPousser l'image vers le registre :
docker push registry.digitalocean.com/imad-cr/pa-alpha-site:latest4. Déploiement de l'application sur Kubernetes
Créer un fichier deployment.yaml :
deployment.yaml :vim deployment.yamlContenu 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: 80Créer un fichier service.yaml :
service.yaml :vim service.yamlContenu du fichier :
apiVersion: v1
kind: Service
metadata:
name: alpha-web-service
spec:
ports:
- port: 80
targetPort: 80
selector:
app: alpha-webAppliquer les configurations :
kubectl apply -f deployment.yaml
kubectl apply -f service.yamlVérifier le déploiement et le service :
kubectl get deployment
kubectl get services5. 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=trueVérifier le service NGINX Ingress :
kubectl --namespace default get services -o wide -w nginx-ingress-ingress-nginx-controllerCréer un fichier certificat.yaml pour cert-manager :
certificat.yaml pour cert-manager :vim certificat.yamlContenu 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: nginxInstaller 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=trueAppliquer le ClusterIssuer :
kubectl apply -f certificat.yamlCréer un fichier ingress.yaml :
ingress.yaml :vim ingress.yamlContenu 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: 80Appliquer l'Ingress :
kubectl apply -f ingress.yamlVérifier l'état des ressources :
kubectl get pods
kubectl get svc
kubectl get ingress
kubectl describe certificate alpha-web-tls6. Configuration DNS
Configurez le domaine
tk.skyfik.netdans 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-webDétailler l'Ingress :
kubectl describe ingress alpha-web-ingressVérifier les événements du certificat :
kubectl describe certificate alpha-web-tlsProblèmes de registre : Assurez-vous que le secret
registry-imad-crexiste :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.yamlArchitecture

[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?