Мова: Українська
Цей посібник допоможе вам розгорнути автономний сервер ActivityInfo в Azure Kubernetes Service (AKS), використовуючи керований диск Premium SSD v2. Він призначений для ІТ-фахівців, які знайомі з Kubernetes та Microsoft Azure.
Використовуйте це розгортання, коли затримка в мережі спільної файлової системи обмежує продуктивність бази даних. Для простішого варіанту, що використовує Azure Files, дивіться Розгортання як веб-додаток Azure.
Перед початком
Автономний сервер ActivityInfo зберігає свої дані в базі даних SQLite. Це визначає все розгортання:
- Запускайте одну репліку. Сервер призначений для вертикального, а не горизонтального масштабування: щоб підтримувати більше одночасних користувачів, надайте поду більше ядер ЦП та пам'яті, а не додавайте репліки.
- Використовуйте довговічне блочне сховище. Керований диск Premium SSD v2 забезпечує затримку, близьку до локального диска, з можливістю налаштування IOPS та пропускної здатності. Оскільки це керований диск, підключений до мережі, його дані реплікуються у сховищі та витримують втрату вузла: диск від'єднується і знову приєднується до вузла, на якому переплановується под.
Цей посібник завершується доступом до сервера з вашого комп'ютера за допомогою переадресації портів. Надання доступу до сервера користувачам через HTTPS розглядається за посиланнями в кінці цього посібника.
Передумови
Встановіть Azure CLI та kubectl, а потім увійдіть:
az login
Встановіть змінні
RESOURCE_GROUP=activityinfo-rg
LOCATION=westeurope
CLUSTER=activityinfo-aks
Створіть кластер
Створіть групу ресурсів та кластер AKS. Драйвер Azure Disk CSI, який надає керовані диски, встановлюється за замовчуванням. Диски Premium SSD v2 є зональними, тому пул вузлів повинен працювати в зоні доступності; --zones 1 розміщує його в зоні 1. Одного вузла достатньо, оскільки ActivityInfo працює як один под. Додайте другий вузол у тій самій зоні, якщо ви хочете, щоб под переплановувався швидше під час збою або оновлення вузла.
az group create --name $RESOURCE_GROUP --location $LOCATION
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER \
--node-vm-size Standard_D4s_v5 \
--node-count 1 \
--zones 1 \
--generate-ssh-keys
Підключіть kubectl до нового кластера:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER
Створіть клас сховища
Вбудовані класи сховищ використовують старіші типи дисків. Визначте клас сховища для Premium SSD v2. Збережіть наступне у файл storageclass.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: activityinfo-premium-v2
provisioner: disk.csi.azure.com
parameters:
skuName: PremiumV2_LRS
cachingMode: None
DiskIOPSReadWrite: "3000"
DiskMBpsReadWrite: "125"
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
WaitForFirstConsumer створює диск у тій самій зоні, що й под, який його використовує. reclaimPolicy: Retain зберігає диск, якщо заявку буде видалено, щоб база даних не була випадково втрачена. Збільште DiskIOPSReadWrite та DiskMBpsReadWrite вище безкоштовного базового рівня 3000 IOPS та 125 МБ/с, якщо ваше навантаження потребує більше. Застосуйте його:
kubectl apply -f storageclass.yaml
Розгорніть ActivityInfo
Збережіть наступне у файл activityinfo.yaml. Він визначає StatefulSet з однією реплікою, який запитує диск Premium SSD v2 з класу сховища і монтує його в /data. fsGroup у контексті безпеки робить змонтований диск доступним для запису контейнером, який працює від імені користувача без прав root. Service відкриває доступ до контейнера на порту 80 всередині кластера.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: activityinfo
spec:
serviceName: activityinfo
replicas: 1
selector:
matchLabels:
app: activityinfo
template:
metadata:
labels:
app: activityinfo
spec:
securityContext:
fsGroup: 1000
containers:
- name: activityinfo
image: activityinfo/activityinfo:5.0.0
ports:
- containerPort: 8081
env:
- name: ACTIVITYINFO_DATA_DATA_DIRECTORY
value: /data
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: activityinfo-premium-v2
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: activityinfo
spec:
selector:
app: activityinfo
ports:
- port: 80
targetPort: 8081
Застосуйте маніфест:
kubectl apply -f activityinfo.yaml
Доступ до сервера
Дочекайтеся, поки под буде готовий, а потім перенаправте локальний порт на Service:
kubectl rollout status statefulset/activityinfo
kubectl port-forward service/activityinfo 8081:80
Поки команда виконується, відкрийте http://localhost:8081, де вам буде запропоновано створити перший обліковий запис адміністратора. Натисніть Ctrl+C, щоб зупинити переадресацію.
Відкриття доступу до сервера в Інтернеті
Переадресація портів забезпечує доступ до сервера лише з вашого комп'ютера. Щоб зробити ActivityInfo доступним для користувачів, відкрийте доступ до Service та обслуговуйте його через HTTPS. ActivityInfo може отримувати та оновлювати власний сертифікат через Let's Encrypt, або ви можете завершити TLS на контролері вхідного трафіку. Наступні ресурси описують можливі варіанти:
- Автоматичне налаштування SSL — вбудована підтримка Let's Encrypt в ActivityInfo.
- Режим HTTPS-проксі — коли TLS завершується на контролері вхідного трафіку або зворотному проксі.
- Використання загальнодоступного балансувальника навантаження в AKS — відкриття доступу до сервісу за допомогою загальнодоступної IP-адреси.
- Керований NGINX ingress в AKS — додаток для маршрутизації додатків.
Резервне копіювання бази даних
Керований диск витримує втрату вузла, але не захищає від катастроф, таких як пожежа в центрі обробки даних. Робіть регулярні знімки тому диска або копіюйте вміст /data до довговічного сховища, наприклад Azure Blob Storage, за розкладом. Зберігайте резервні копії за межами кластера, щоб мати змогу відновити дані після повної втрати кластера.
Наступні кроки
Дотримуйтесь посібника з Конфігурації, щоб налаштувати Доставку емейлів та Єдиний вхід через веб-інтерфейс.