Установка helm-чартами

В инструкции ниже описывается вариант установки с помощью Docker-контейнеров. Вариант установки с помощью бинарных пакетов описан здесь.

Подготовка рабочего окружения кластера

Закрома.Хранение использует следующие компоненты, которые должны быть установлены в кластере до установки сервисов Закрома:

  • Nginx ingress
  • Cert-manager
  • Postgresql (>= 14.x.x)
  • Keycloak (>= 18.x.x)
  • Kafka (Optional) - используется для компонентов notification (вебхуки), seclog ( аудит лог), cluster

Подробнее по установке дополнительных сервисов читайте подробнее здесь.

БД в PostgreSQL

  • core
  • permission
  • seclog

БД для хранения объектов Postgresql

Для поддержания высокой производительности, база данных об объектах шардируется, каждый шард который хранит информацию об объектах. Сервис, работающий с шардом БД называется worker.

Создайте необходимое количество БД под каждый шард (по умолчанию один):

  • worker 0
  • worker 1 …
  • worker n

Установка сервисов Закрома.Хранение

  • Настройка keycloak
  • Установка zakroma-storage
  • Настройка ingress

Настройка keycloak

Смотрите Настройка keycloak.

Загрузка образов

Адрес репозитория образов: zakroma.registry.digital-spirit.ru Пример полного пути образа:

1zakroma.registry.digital-spirit.ru/spirit-cloud/admin-ui<version>-RELEASE

Адрес репозитория helm-chart:

1https://nexus.digital-spirit.ru/repository/zakroma-deb/zakroma/Rv<version>/zakroma-storage-helm-<version>.tar.gz

Установка zakroma-storage

Для установки компонентов ПО нужно выполнить Helm-чарт: zakroma-storage.

  1. Переходим в папку с Helm-чартом из состава поставки.

Создаём файл my-values.yaml на основе файла my-values.yaml

1 global: 2 config: 3 docker: 4 url: registry.local.net # Адрес registry с образами ПО 5 path: zakroma
Развернутьarrow

По умолчанию будет использоваться pullSecret под именем regcred . Необходимо создать такой pullSecret для доступа к docker image

  1. Устанавливаем Helm-чарт
1upgrade --install zakroma-storage -f my-values.yaml PATH_HELM_CHART -n zakroma

Где -n zakroma - имя namespace, в который устанавливается ПО PATH_HELM_CHART - путь к папке с распакованным helm чартом или url удаленного helm репозитория (предварительно добавив его), далее необходимо найти helm чарт командой helm search repo zakroma

**3. Настройки для работы с Keycloak с самоподписанными сертификатами **

Необходимо создать configMap с именем ca-certificates, который будет содержать ca сертификат:

1kubectl -n zakroma create configmap ca-certificates --from-file ca-certificates.crt

Добавляем в my-values.yaml параметры:

1gateway-cloud: 2 deployment: 3 volumeMounts: 4 - name: ca-certificates 5 mountPath: /etc/ssl/certs/ca-certificates.crt 6 subPath: ca-certificates.crt 7 volumes: 8 - name: ca-certificates 9 configMap: 10 name: ca-certificates 11 defaultMode: 420

Настройка ingress

Переменные

При создании ingress ниже приведены шаблоны в виде goTpl, можно использовать goTpl для формирования готовых файлов или вручную заменить {{.Varible }} на необходимые значения

config-map.json:

1#Текущие значения в коментариях указаны откуда из взять из файла my-values.yaml 2namespace: zakroma # 3baseDomain: base-domain.ru # global.config.baseDomain 4adminPrefixDomain: admin-prefix # global.config.adminConsole.domain 5gatewayPrefixDomain: gateway-prefix # global.config.gatewayCloud.domain 6psPrefix: ps # global.config.gatewayCloud.s3_endpoint.path_style.key_word 7globalWorkspaceDomainPrefix: gs # global.config.gatewayCloud.s3_endpoint.global_workspace.key_word 8 9# Optional block variables: 10# Переменные которые нужны для генерации virtual style aws s3 при обычной установке можно не заполнять, пока не потребуется отдельно настроить их, настраиваются для каждого созданного воркспейса отдельно 11workspaceName: test 12virtyalStyleDomainPrefix: vs # global.config.gatewayCloud.s3_endpoint.virtual_style.key_word
  1. Создаём Ingress для сервисов admin-ui
1 2apiVersion: networking.k8s.io/v1 3kind: Ingress 4metadata: 5 name: admin-ui-ingress 6 namespace: {{ .namespace }} 7 annotations: 8 nginx.ingress.kubernetes.io/ssl-redirect: 'true' 9 kubernetes.io/tls-acme: 'true' 10 cert-manager.io/cluster-issuer: "letsencrypt" # в данном случае используется letsencrypt 11spec: 12 ingressClassName: "nginx" 13 tls: 14 - hosts: 15 - {{.adminPrefixDomain}}.{{ .baseDomain }} #адрес консоли администратора 16 secretName: {{.adminPrefixDomain}}.{{ .baseDomain }}-tls 17 rules: 18 - host: {{.adminPrefixDomain}}.{{ .baseDomain }} #адрес консоли администратора 19 http: 20 paths: 21 - path: / 22 pathType: ImplementationSpecific 23 backend: 24 service: 25 name: admin-ui-service 26 port: 27 number: 80 28
  1. Создаём Ingress для backend части административной консоли
1apiVersion: networking.k8s.io/v1 2kind: Ingress 3metadata: 4 name: gateway-cloud-ingress 5 namespace: {{ .namespace }} 6 annotations: 7 nginx.ingress.kubernetes.io/ssl-redirect: 'true' 8 kubernetes.io/tls-acme: 'true' 9 cert-manager.io/cluster-issuer: "letsencrypt" # в данном случае используется letsencrypt 10 nginx.ingress.kubernetes.io/rewrite-target: /$1 11 12spec: 13 ingressClassName: nginx 14 tls: 15 - hosts: 16 - '{{.gatewayPrefixDomain}}.{{ .baseDomain }}' #адрес для бекенда ЗАКРОМА 17 secretName: {{.gatewayPrefixDomain}}.{{ .baseDomain }}-tls 18 rules: 19 - host: '{{.gatewayPrefixDomain}}.{{ .baseDomain }}' #адрес для бекенда ЗАКРОМА 20 http: 21 paths: 22 - path: /(.*) 23 pathType: ImplementationSpecific 24 backend: 25 service: 26 name: gateway-cloud-service 27 port: 28 number: 80
  1. Создаём Ingress для Path-Style имён бакетов в сервис gateway-cloud

Версия для Nginx ingress:
1apiVersion: networking.k8s.io/v1 2kind: Ingress 3metadata: 4 name: workspaces-ps-domain-gateway-ingress 5 namespace: {{ .namespace }} 6 annotations: 7 nginx.ingress.kubernetes.io/ssl-redirect: 'true' 8 kubernetes.io/tls-acme: 'true' 9 cert-manager.io/cluster-issuer: "letsencrypt" # в данном случае используется letsencrypt 10 nginx.ingress.kubernetes.io/client-body-buffer-size: 512k 11 nginx.ingress.kubernetes.io/configuration-snippet: | 12 more_set_input_headers "x-forwarded-path $request_uri"; 13 nginx.ingress.kubernetes.io/proxy-body-size: '0' 14 nginx.ingress.kubernetes.io/proxy-buffer-size: 512k 15 nginx.ingress.kubernetes.io/proxy-buffering: 'off' 16 nginx.ingress.kubernetes.io/proxy-request-buffering: 'off' 17 nginx.ingress.kubernetes.io/rewrite-target: /s3/$1 18spec: 19 ingressClassName: nginx 20 tls: 21 - hosts: 22 - '*.{{.psPrefix}}.{{ .baseDomain }}' #адрес для бекенда ЗАКРОМА 23 secretName: workspaces.{{.psPrefix}}.{{ .baseDomain }}-tls 24 rules: 25 - host: '*.{{.psPrefix}}.{{ .baseDomain }}' #адрес для бекенда ЗАКРОМА 26 http: 27 paths: 28 - path: /(.*) 29 pathType: ImplementationSpecific 30 backend: 31 service: 32 name: gateway-cloud-service 33 port: 34 number: 80
Версия для Openshift Ingress (Route):
1apiVersion: route.openshift.io/v1 2kind: Route 3metadata: 4 annotations: 5 haproxy.router.openshift.io/rewrite-target: /s3 6 labels: 7 app: gateway-cloud-service 8 app.kubernetes.io/managed-by: Helm 9 name: ps 10 namespace: ext-zakroma-test 11spec: 12 host: wildcard.ps.ext-zakroma-test.apps.test.ocp.rccf.ru 13 port: 14 targetPort: 8080 15 tls: 16 insecureEdgeTerminationPolicy: Redirect 17 termination: edge 18 to: 19 kind: Service 20 name: gateway-cloud-service 21 weight: 100 22 wildcardPolicy: Subdomain
  1. Создаём Ingress для Path-Style и Virtual-style для global workspace

Версия для Nginx ingress:
1apiVersion: networking.k8s.io/v1 2kind: Ingress 3metadata: 4 name: workspaces-gs-domain-gateway-ingress 5 namespace: {{ .namespace }} 6 annotations: 7 cert-manager.io/cluster-issuer: letsencrypt 8 kubernetes.io/tls-acme: 'true' 9 nginx.ingress.kubernetes.io/ssl-redirect: 'true' 10 nginx.ingress.kubernetes.io/configuration-snippet: | 11 more_set_input_headers "x-forwarded-path $request_uri"; 12 nginx.ingress.kubernetes.io/rewrite-target: /$1 13 14 nginx.ingress.kubernetes.io/proxy-body-size: '0' 15 nginx.ingress.kubernetes.io/client-body-buffer-size: 512k 16 nginx.ingress.kubernetes.io/proxy-buffer-size: 512k 17 nginx.ingress.kubernetes.io/proxy-buffering: 'off' 18 nginx.ingress.kubernetes.io/proxy-request-buffering: 'off' 19 20 21 22spec: 23 ingressClassName: nginx 24 tls: 25 - hosts: 26 - '*.{{.globalWorkspaceDomainPrefix}}.{{.baseDomain}}' 27 - {{.globalWorkspaceDomainPrefix}}.{{.baseDomain}} 28 secretName: global-workspace.{{.globalWorkspaceDomainPrefix}}.{{.baseDomain}}-tls 29 rules: 30 - host: '*.{{.globalWorkspaceDomainPrefix}}.{{.baseDomain}}' 31 http: 32 paths: 33 - path: /(.*) 34 pathType: ImplementationSpecific 35 backend: 36 service: 37 name: gateway-cloud-service 38 port: 39 number: 80 40 - host: {{.globalWorkspaceDomainPrefix}}.{{.baseDomain}} 41 http: 42 paths: 43 - path: /(.*) 44 pathType: ImplementationSpecific 45 backend: 46 service: 47 name: gateway-cloud-service 48 port: 49 number: 80
Смотрите также
Установка через ansible