Мое решение разворачивает веб-приложение в Kubernetes с использованием:
- Kind — для создания локального Kubernetes-кластера с одной control-plane нодой.
- Ansible — для автоматизированного развертывания кластера, установки Ingress-контроллера и деплоя приложения.
- Helm — для удобного управления релизами и развертывания приложения в кластере.
Перед началом работы установите: Docker, Kind, Ansible, Helm
git clone https://github.com/jeorji/hello-k8s.git
cd hello-k8s
ansible-galaxy install -r ansible/requirements.yml
ansible-playbook ansible/playbook.yml -e cluster_state=present
Так как в Kind настроены порты, а Ingress-контроллер работает в режиме NodePort
, можно проверить доступность приложения:
curl -H "Host: hello.local" localhost
Пример ответа:
<!DOCTYPE html>
<html>
<head>
<title>Hello, Kubernetes!</title>
</head>
<body>
<h1>Hello, Kubernetes!</h1>
</body>
</html>
kubectl get all -n hello-k8s
Пример вывода:
NAME READY STATUS RESTARTS AGE
pod/hello-k8s-backend-6bb84f4988-s6nqn 1/1 Running 0 26m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-k8s-backend ClusterIP 10.96.246.39 <none> 80/TCP 26m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-k8s-backend 1/1 1 1 26m
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-k8s-backend-6bb84f4988 1 1 1 26m
kubectl logs -l app=hello-k8s-backend -n hello-k8s
Пример вывода:
2025/02/27 19:40:50 [notice] 1#1: start worker process 36
10.244.0.6 - - [27/Feb/2025:19:41:17 +0000] "GET / HTTP/1.1" 200 131 "-" "curl/8.4.0" "172.22.0.1"
10.244.0.6 - - [27/Feb/2025:20:05:31 +0000] "GET / HTTP/1.1" 200 131 "-" "curl/8.4.0" "172.22.0.1"
kubectl logs -l app.kubernetes.io/name=ingress-nginx -n ingress-nginx
Пример вывода:
I0227 19:41:27.532588 12 event.go:377] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"hello-k8s", Name:"nginx-ingress"}): type: 'Normal' reason: 'Sync' Scheduled for sync
172.22.0.1 - - [27/Feb/2025:20:05:31 +0000] "GET / HTTP/1.1" 200 131 "-" "curl/8.4.0" 74 0.006 [hello-k8s-hello-k8s-backend-80] [] 10.244.0.8:80 131 0.006 200
kubectl get ingress -n hello-k8s
kubectl describe ingress nginx-ingress -n hello-k8s
ansible-playbook ansible/playbook.yml -e cluster_state=absent