в Kubernetes - Част 2: Инсталиране на Redmine
Това е втората част от серията за разгръщане на Redmine в Kubernetes. В тази статия ще предоставим инструкции за разгръщане на надеждна инсталация на Redmine.

Преброяване Част 1
До този момент вече трябва да се радвате на инсталирането на Redmine в Kubernetes. Все пак, за това идвате, нали?
В Redmine в Kubernetes - Част 1: Подготовка на средата инсталирахме Ingress Controller, компонент, който пренасочва интернет заявките вътре във вашия кластер, и създадохме DNS домейн, redminek8s.ddns.net. Сега ни остава само да конфигурираме HTTPS и ще бъдем готови да разгърнем Redmine.
HTTPS с cert-manager
Въпреки че можем да запазим Redmine като HTTP, HTTPS стана стандарт за уебсайтове, толкова че повечето браузъри предупреждават за проблем със сигурността, когато HTTPS не се използва от уебсайт.
Обикновено активирането на HTTPS не е лесна задача, тъй като трябва да закупите сертификат и да го качите на сайта си, да го подновявате след определено време и да повтаряте процеса. Cert-manager автоматизира всичко това, включително подновяването на сертификати и дори получава безплатни сертификати. Можете да видите повече информация на тяхния сайт, но ще обясня всичко, което трябва да знаете по-долу.
Инсталиране на cert-manager
Изпълнете следните стъпки, за да инсталирате cert-manager във вашия кластер:
helm repo add jetstack https://charts.jetstack.io && helm repo update
helm install cert-manager jetstack/cert-manager --set installCRDs=true
Първо добавете хранилището, където се намира cert-manager, и след това инсталирайте най-новата му версия.
Свързване с Certificate Authority
Сега трябва да научим cert-manager да се свърже с Certificate provider на наш избор. Ще използваме LetsEncrypt, безплатен Certificate authority. Първо създайте този файл (не забравяйте да замените <your-email-address> с реален имейл адрес) и го наименувайте cluster-issuer.yaml
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: <your-email-address>
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
След това го приложете към вашия кластер с
kubectl apply -f cluster-issuer.yaml
Поздравления! Файлът по-горе е първата конфигурация на Kubernetes, която пишем и прилагаме във вашия кластер. Може да сте забелязали, че той показва как да се свържете с LetsEncrypt, но също така описва и Ingress Controller, който създадохме в Част 1 (Клас: nginx в края) Този тип конфигурация има някои редове с интервали, за да покаже зависимост на някои свойства от други. Запазете тези интервали, както са показани, за да се гарантира, че файла ще бъде прочетен и приложен правилно.
Сега вашият кластер е с активиран HTTPS. Всяка пътища, когато инсталираме приложение, можем да му кажем да работи с HTTPS и voilà! Целият процес на получаване на сертификата ще бъде извършен автоматично зад кулисите.
Инсталиране на Redmine
Това е това, което всички чакахме. Можем да инсталираме Redmine по няколко начина, но най-удобният е да използваме Helm. Както вече направихме преди, първо добавяме хранилището, където е Redmine
helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
Но този път вместо да инсталираме веднага, ще създадем конфигурационен файл, за да посочим някои персонализирани настройки, които искаме да има Redmine.
Ще разделим всички конфигурации в отделни секции, но ще ги сложим всички в един файл, една след друга. Нека го наречем values.yaml.
Всички приложения на Helm имат файл values.yaml с всички възможни конфигурации, които могат да бъдат направени за приложението. Когато създадем нашия собствен values.yaml, определяме промените, които искаме. Всяка стойност, която не включим в нашия файл, ще бъде оставена както е във файла по подразбиране.
Всички стойности по подразбиране могат да бъдат намерени и на страницата на приложението на Helm, https://hub.helm.sh/charts/bitnami/redmine. Отидете и проверете всички конфигурации.
Първи администраторски потребител
RedmineUsername: adminUser
RedminePassword: <my-password>
Този стъпка е толкова необходима, колкото лесна за разбиране. Това е нашият първи потребител в Redmine, който ще използваме за първи път за влизане в системата.
Когато Redmine е инсталиран, ще можете да го достъпите с този потребител, за да конфигурирате вашата чисто нова инсталация.
База данни PostgreSQL
По подразбиране нашата инсталация на Helm ще изисква да бъде създадена база данни mariadb. Вместо това ще конфигурираме нашата инсталация да използва PostgreSQL. Трябва да добавите поне една парола за достъп до тази база данни, както можете да видите по-долу
databaseType: postgresql
mariadb:
enabled: false
postgresql:
enabled: true
postgresqlDatabase: Redmine
postgresqlUsername: Redmine
postgresqlPassword: <some-safe-password>
Трябва ясно да кажем на нашата инсталация, че не искаме да бъде инсталирана MariaDB заедно с конфигурацията за базата данни PostgreSQL.
Конфигурация на DNS име
Конфигурацията по-долу е другата страна на DNS конфигурацията, която направихме в Част 1. Както можете да видите, ние активираме TLS, протокола зад HTTPS, и задаваме името на хоста, който използвахме при създаването на DNS записа:
ingress:
enabled: true
certManager: true
hostname: redminek8s.ddns.net
tls: true
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt
Също така в последните два реда свързваме нашето приложение с Ingress Controller и с Cluster Issuer, който създадохме преди това.
Сега можем да разгърнем Redmine с нашата персонализирана конфигурация:
helm install Redmine -f values.yaml bitnami/redmine
Този ред е подобен на други редове за инсталиране на Helm, които използвахме преди, но този път предоставяме персонализиран values.yaml. Това е начинът за персонализиране на всяко приложение на Helm.
Все още се нуждаем от малко търпение, тъй като създаването на приложението отнема време. Можете да изпълните тази команда, за да проверите статуса на контейнерите на вашето приложение:
kubectl get pods --watch
Командата ще върне нещо подобно на това:
NAME READY STATUS RESTARTS AGE
. . .
redmine-999c68dd9-x7h2k 1/1 Running 0 6m40s
redmine-postgresql-0 1/1 Running 0 6m40s
Трябва да изчакате, докато статусът на двата контейнера е Running и всички са готови 1/1, което в моя случай отне около 6 минути.
Сега всичко е готово да отворите браузъра и да отидете на нашето ново разгръщане:
Redmine е готов
Заключение
Kubernetes е сложен инструмент за разгръщане на приложения, но ние се справихме с тази сложност с помощта на Helm (без да има игра на думи) и разгърнахме надеждна инсталация на Redmine.
Можете да намерите резюме на това ръководство в следния git repo: https://github.com/lcofre/redmine-on-k8s. Не се колебайте да сравните с вашите файлове, ако се застъпите.
Оставихме някои концепции извън дискусията, защото бяха сложни или обяснението им беше специфично за облака. Сред тях са Liveness и Readiness на вашето приложение, конфигурация на входящи писма и мащабиране за обработка на повече товар. Моля, кажете ни по-долу какво ви интересува най-много, за да можем да го обсъдим в бъдещо ръководство.

Най-доброто ъпгрейд на Redmine? Лесно.
Получете всички мощни инструменти за перфектно планиране, управление и контрол в един софтуер.