Редмайн в Кубернетесі - Частина 1: Підготовка середовища

6/22/2020
6 minutes
Лукаш Беньа.

У цій двочастинній серії ми розгорнемо Redmine в Kubernetes. Ми використовуватимемо рекомендовані інструменти та практики з метою розгортання стійкого екземпляру Redmine через HTTPS.

Ми розділили цей посібник на дві частини, щоб спочатку сфокусуватися на встановленні інструментів та компонентів, які будуть використовуватися для розгортання Redmine. Але не хвилюйтеся про складність. Навіть якщо ви новачок у Kubernetes, це буде зрозуміле пояснення.

Цей посібник був написаний з метою бути незалежним від хмари, тому ми спеціально не згадували жодної хмари, яку ми використовували. Залиште коментар, якщо можете вгадати, яку хмару ми використовували, та розкажіть нам, який деталь це підказало. Ми рекомендуємо використовувати службу Kubernetes, яку пропонує ваша хмара, оскільки вона добре інтегрована з іншими службами, які також надає ваша хмара.

Середовища, такі як microk8s або minikube, тут не розглядаються, оскільки вони потребують деякої додаткової конфігурації, яка виходить за межі цього посібника. Зокрема, наша конфігурація HTTPS потребує, щоб наш кластер мав публічну IP-адресу.


Використовуймо Helm

Kubernetes - це складний інструмент для оркестрування контейнерів. Є багато концепцій, які нам потрібно вивчити, щоб почати. На щастя, є проект під назвою Helm, який надає рівень абстракції, який нам потрібен. За їхніми словами: «Якщо ми все зробили правильно, користувачі можуть встановлювати Helm і вже через кілька хвилин встановлювати компоненти готові до використання виробництва».

Залишаючи осторонь причини їхніх назв (все це розповідає історію метафори, Helm, Kubernetes та контейнерів), helm дійсно спрощує встановлення, дозволяючи при цьому налаштовувати компонент під наші потреби. Ми використовуватимемо Helm 3, їхню останню та ще простішу версію.

Якщо ви використовуєте оболонку хмар

Встановіть контролер Ingress

Це перший компонент, який ми встановимо в нашому кластері, і також перше поняття Kubernetes, яке ми побачимо. Контролер Ingress знаходиться на вході до вашого кластера, отримує всі веб-запити та перенаправляє їх до внутрішнього компонента, відповідального за відповідь на запит. Спочатку ніхто не буде готовий відповідати, але коли ми встановимо Redmine, він буде доданий як призначення для запитів.

Kubernetes надає контролер Ingress NGINX, який ми використовуватимемо. У їхній документації пояснюється, як його встановити за допомогою Helm:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && helm repo update

helm install ingress-controller ingress-nginx/ingress-nginx

Перша команда додає репозиторій додатків, де знаходиться контролер Ingress, тоді як друга встановлює його в вашому кластері. Після завершення команда надрукує деяку інформацію для початку роботи, включаючи те, як отримати публічну IP-адресу, призначену для контролера:

kubectl get services --watch

Результат буде щось схоже на це:

NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE

nginx-controller       LoadBalancer   10.0.115.117   89.68.23.33   80/TCP,443/TCP   5m22s

controller-admission   ClusterIP      10.0.135.226   <none>           443/TCP          5m22s

kubernetes             ClusterIP      10.0.0.1       <none>           443/TCP          44h

Запишіть EXTERNAL-IP, оскільки нам знадобиться це в наступному кроці. Можливо, замість IP значення, яке ви отримаєте там, буде <pending>. Це займає деякий час для хмари отримати публічний IP та призначити його вашому кластеру. Просто зачекайте ще кілька секунд, і IP має бути доступним.


Створення запису DNS A

Тепер, коли у вас є IP-адреса, ви можете перейти до браузера та перевірити, як ваш кластер відповідає. Звичайно, оскільки жодна програма ще не встановлена, ваш кластер буде відповідати помилкою "404 Not Found". Ми створимо домен DNS, який ми можемо пов'язати з цим IP-адресою, сподіваємося, що це буде легше запам'ятати, ніж список чисел та крапок.

Спосіб створення інтернет-домену для вашого Redmine значно залежить від вашого провайдера доменів, але в будь-якому випадку ви створюєте запис DNS A, який пов'язує ім'я домену з вашим IP. Дивіться наступний знімок екрана від провайдера DNS no-ip.com як посилання на довідку.

Створення нашого запису DNS A

Дані, які потрібно заповнити, як ви могли очікувати, це ім'я DNS та IP-адреса. No-IP - саме те, що нам потрібно, щоб проілюструвати створення домену, але ви, напевно, виберете іншого провайдера DNS. Процес досить схожий у всіх них.

На створення нового запису потрібен час для розповсюдження, тому ви можете використовувати ping, щоб перевірити, коли IP-адреса буде правильно розрішена:

ping redminek8s.ddns.net


Наступні кроки

Тепер, коли у нас є контролер входу та домен DNS, єдине, що залишилося, це налаштувати HTTPS для нашого сайту та встановити Redmine. Ми використовуватимемо PostgreSQL як нашу базу даних, але ви побачите, наскільки легко налаштувати все за допомогою Helm.

Залишайтеся на зв'язку для Redmine in Kubernetes Part 2: Installing Redmine.

Оновлення Redmine на вищий рівень? Легко.

Отримайте всі потужні інструменти для ідеального планування, управління та контролю проектів в одному програмному забезпеченні.

Спробуйте Easy Redmine у 30-денній безкоштовній пробній версії

Повнофункціональний, захищений SSL, щоденне резервне копіювання, у вашій геолокації