Цей посібник надає покрокові інструкції для розгортання повнофункціонального чат-застосунку на Kubernetes за допомогою Kind, Metallb та Ingress. Він розроблений для допомоги розробникам у налаштуванні надійного Kubernetes-кластера для хостингу контейнеризованих застосунків на віртуальному приватному сервері (VPS).
Розгортання включає налаштування необхідних інструментів Kubernetes, конфігурацію балансувальника навантаження, інтеграцію SSL для забезпечення безпечної комунікації та розгортання як фронтенд, так і бекенд-сервісів. Додатково є розділи, які охоплюють моніторинг застосунку за допомогою Prometheus і Grafana для покращеної спостережуваності та відстеження продуктивності.
Незалежно від того, чи розгортаєте ви чат-застосунок для виробничого середовища, чи вивчаєте можливості Kubernetes, цей посібник стане всебічною картою, яка допоможе ефективно розгорнути ваш застосунок.
🚀 Початок роботи з k8s
Індекс завдань
📢 Попередні вимоги для реалізації цього проєкту:
[!Примітка]
мінімальні вимоги до VPS
- Оперативна пам'ять — 4GB
- Процесор — 2 ядра
- Місце на диску — 20 GB
- Один домен
🐳 Встановлення та налаштування Docker
sudo apt-get update
sudo apt-get install docker.io -y
sudo usermod -aG docker $USER && newgrp docker
📦 Встановлення та налаштування Kind і kubectl
Встановіть KIND і kubectl за допомогою наданого скрипта. Створіть файл kindkubectlconfig.yaml:
#!/bin/bash
# Для AMD64 / x86_64
[$(uname -m) = x86_64] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.26.0/kind-linux-amd64
chmod +x ./kind
sudo cp ./kind /usr/local/bin/kind
VERSION="v1.31.0"
URL="https://dl.k8s.io/release/${VERSION}/bin/linux/amd64/kubectl"
INSTALL_DIR="/usr/local/bin"
curl -LO "$URL"
chmod +x kubectl
sudo mv kubectl $INSTALL_DIR/
kubectl version --client
rm -f kubectl
rm -rf kind
echo "Встановлення kind і kubectl завершено."
./kind_kubectl_config.yaml
[!Примітка]
Якщо ваш VPS має архітектуру ARM64, використовуйте цей скрипт:
[$(uname -m) = x86_64] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.26.0/kind-linux-amd64
Запустіть цей скрипт, і він налаштує середовище kubectl і kind.
🛠️ Налаштування KIND кластера
Створіть файл kind-cluster-config.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.31.2
- role: worker
image: kindest/node:v1.31.2
- role: worker
image: kindest/node:v1.31.2
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
Створіть кластер, використовуючи конфігураційний файл:
kind create cluster --config kind-cluster-config.yaml --name my-kind-cluster
Перевірте кластер:
kubectl get nodes
kubectl cluster-info
[!Примітка]
Тут я додаю extraPortMappings для запуску Ingress.
🍏 Встановлення Metallb
[!Примітка]
Я використовую Metallb для налаштування LoadBalancer. Якщо ви використовуєте AWS/Azure/DigitalOcean або інші сервіси, які надають можливість використання Kubernetes LoadBalancer, то Metallb не потрібен. Я ж придбав VPS у місцевої компанії, яка надає одну IP-адресу для доступу до VPS.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-frr.yaml
Перевірте конфігурацію Metallb:
kubectl get all -n metallb-system
[!Примітка]
Тут service/ingress-nginx-controller показує EXTERNAL-IP, який є вашою VPS IP-адресою. Моя VPS IP-адреса — 160.191.163.33.
Це гарантує, що наш Metallb LoadBalancer працює.
🧊 Встановлення та налаштування Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Перевірка версії Helm:
helm version
🔒🌐 Встановлення та налаштування Cert Manager || SSL сертифікат
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
Встановлення cert-manager CRDs:
helm install cert-manager --namespace cert-manager --version v1.16.2 jetstack/cert-manager
Примітка: Детальніше про cert-manager
https://artifacthub.io/packages/helm/cert-manager/cert-manager
📚 Розгортання проєкту та інші налаштування
Крок 1
Клонуйте наступний проєкт на вашому VPS:
git clone https://github.com/kamruzzamanripon/k8-node-react-mongodb-app.git
Крок 2
Перейдіть у папку k8s, і ви побачите цей файл:
Крок 3
Створіть Namespace:
kubectl apply -f namespace.yaml
Крок 4
Застосуйте всі секретні файли:
kubectl apply -f backend-secret.yaml
kubectl apply -f jwt-secret.yaml
kubectl apply -f mongodb-secret.yaml
Крок 5
Оголосіть MongoDB Volumes та інші налаштування:
kubectl apply -f mongo-pv.yaml
kubectl apply -f mongo-pvc.yaml
kubectl apply -f mongodb-deployment.yaml
kubectl apply -f mongodb-service.yaml
Крок 6
Застосуйте решту файлів:
kubectl apply -f backend-deployment.yaml
kubectl apply -f backend-service.yaml
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
Крок 7
Налаштуйте SSL сертифікат для домену. Відкрийте файл ssl_certificate.yaml та редагуйте бажану доменну назву:
Застосуйте файл ssl_certificate.yaml:
kubectl apply -f ssl_certificate.yaml
Крок 8
Налаштуйте Ingress файл. Відкрийте ingress.yaml та додайте бажану доменну назву.
Застосуйте файл ingress.yaml:
kubectl apply -f ingress.yaml
Перевірка сертифікату
Перевірка Namespace
kubectl get all -n chat-app
🌐 Перегляд у браузері
🎉 Висновок
Вітаємо! Ви успішно розгорнули Full-Stack чат-застосунок. Тепер ви можете отримати доступ до вашого чат-застосунку.
💻 Моніторинг та інші функції [За бажанням]
Тепер ми додаємо додаткові функції, такі як моніторинг. Це допоможе вам дізнатися більше про сервери та застосунки.
Створіть Namespace
kubectl create namespace monitoring
[!Примітка]
Цей Namespace допоможе вам контролювати всі додатки моніторингу, такі як Prometheus, Grafana, Loki тощо.
Встановлення та налаштування Prometheus і Grafana
Встановлення:
helm install prometheus-stack prometheus-community/kube-prometheus-stack --namespace monitoring --set prometheus.service.nodePort=30000 --set grafana.service.nodePort=31000 --set grafana.service.type=NodePort --set prometheus.service.type=NodePort
Запуск Prometheus через порт
kubectl port-forward svc/prometheus-stack-kube-prom-prometheus 9090:9090 -n monitoring --address=0.0.0.0 &
Тепер ви можете отримати доступ до Prometheus через цей порт.
Як
http://160.191.163.33:9090
[!Примітка]
Змініть IP-адресу
Встановлення та налаштування Grafana
Запуск Grafana через порт:
kubectl port-forward svc/prometheus-stack-grafana 3000:80 -n monitoring --address=0.0.0.0 &
Отримання імені користувача та пароля для Grafana
Ім’я користувача:
admin
Пароль:
kubectl get secret prometheus-stack-grafana -n monitoring -o jsonpath="{.data.admin-password}" | base64 --decode
[!Примітка]
Ви можете змінити пароль
Панель інструментів Grafana.
Тут ви можете вибрати різні типи панелей для алгоритмів
Ось і все. Бажаю успіхів у навчанні 🙂 .
[Якщо це було корисно, поставте зірку репозиторію 😇]
Посилання на GitHub проєкту
https://github.com/kamruzzamanripon/k8-node-react-mongodb-app
Перекладено з: Chat App Deploy on Kubernetes Using Kind, Metallb & Ingress