Giter VIP home page Giter VIP logo

helmsdeep's Introduction

Helm Charts Repo

В этом репозитории находятся экспериментальные чарты для ядерных сервисов платформы RBK.money. Структура каталога следующая:

  • services - чарты сервисов, по каталогу на сервис
  • config - настройки чартов, по каталогу на сервис
  • libraries - чарты вспомогательных библиотек, по каталогу на библиотеку
  • docs - документация
  • tools - вспомогательные скрипты для миникуба

Требования

Для работы с сервисами требуется Helm 3.2.1+, Helmfile v0.116.0, kubectl, minikube и VirtualBox. Без VirtualBox можно обойтись если запускать миникуб с другим драйвером, но этот сценарий - за рамками ридми. Для запуска всего стека рекомендуется выделить на minikube 4 CPU, 10GB RAM, 40GB Disk

Запуск

Холодный старт (~20 минут)

$ ./tools/cold_reset.sh && helmfile sync --concurrency 2

Быстрый резет без повторного скачивания образов (~7 минут)

$ ./tools/quick_reset.sh && helmfile sync --concurrency 2

Пример запуска сервисов:

$ helmfile sync
Building dependency release=zookeeper, chart=services/zookeeper
...
UPDATED RELEASES:
NAME         CHART                   VERSION
machinegun   ./services/machinegun     0.1.0
kafka        ./services/kafka         0.21.2
riak         ./services/riak           0.1.0
consul       ./services/consul         3.9.5
zookeeper    ./services/zookeeper      2.1.3

После этого можно убедиться, что запущенные сервисы живы. Например, проверим machinegun

$ helmfile --selector name=machinegun test
Testing machinegun
Pod machinegun-test-connection pending
Pod machinegun-test-connection pending
Pod machinegun-test-connection succeeded
NAME: machinegun
LAST DEPLOYED: Sun May 1 13:22:20 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE:     machinegun-test-connection
Last Started:   Sun May 1 13:27:14 2020
Last Completed: Sun May 1 13:27:18 2020
Phase:          Succeeded
NOTES:
You can use machinegun:8022 to connect to the machinegun woody interface.

Работа с Vault

Волт запускается в dev режиме, то есть сразу инициированный и unseal. Референс для работы с секретами в доке vault

Здесь немного комментов к тому, что происходит автоматом при запуске пода vault
# kubectl exec -ti vault-0 -- sh
#Включим движки:
vault auth enable kubernetes
vault secrets enable database

#Укажем адрес kube-api, к которому стоит обращаться для проверки токен сервис аккаунта приложения:
vault write auth/kubernetes/config \
       token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
       kubernetes_host=https://${KUBERNETES_PORT_443_TCP_ADDR}:443 \
       kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

#Создадим роль, которая позволит перечисленным в `bound_service_account_names` сервисаккаунтам получать доступы к БД:

vault write auth/kubernetes/role/db-app \
    bound_service_account_names="*" \
    bound_service_account_namespaces=default \
    policies=db-app \
    ttl=1h

#теперь настраиваем подключение к постгресу:
vault write database/config/mydatabase \
    plugin_name=postgresql-database-plugin \
    allowed_roles="*" \
    connection_url="postgresql://{{username}}:{{password}}@postgres-postgresql.default:5432/?sslmode=disable" \
    username="postgres" \
    password="H@ckM3"

vault write database/roles/db-app \
    db_name=mydatabase \
    creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
        GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
    default_ttl="1h" \
    max_ttl="24h"

Чтобы зайти в вебку волта нужно получить себе новый токен:

kubectl exec vault-0 -- vault token create

включить портфорвард на локалхост

kubectl port-forward vault-0 8200:8200 &

и с полученым токеном идти в браузере на http://127.0.0.1:8200

Для того, чтобы приложение получило свои секретный логины-пароли к БД нужно добавить к описанию сервиса аннотации, а тут смотреть целый манифест deployments:

      annotations:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/db-app"
        vault.hashicorp.com/agent-inject-template-db-creds: |
          {{- with secret "database/creds/db-app" -}}
          "db_connection": "postgresql://{{ .Data.username }}:{{ .Data.password }}@postgres-postgresql:5432/?sslmode=disable"
          {{- end }}
        vault.hashicorp.com/role: "db-app"

После этого в поде с сервисом будет лежать файл /vault/secrets/db-creds со строкой подключения к БД

Как включить сбор метрик

  • Настроить сервис таким образом, чтобы метрики в формате Prometheus отдавались:
    • на /metrics с порта api для erlang-приложения
    • на /actuator/prometheus с порта management для java-приложения
  • Повесить на соответствующий сервис label:
    • prometheus.metrics.erlang.enabled: "true" для erlang-приложения
    • prometheus.metrics.java.enabled: "true" для java-приложения

Для получения доступа к веб-интерфейсу Prometheus на http://localhost:31337:

kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-prometheus 31337:9090

Доступ к логам в kibana

docs reference our name is "rbk" not "quickstart"

Use kubectl port-forward to access Kibana from your local workstation:

kubectl port-forward service/rbkmoney-kb-http 5601

Open https://localhost:5601 in your browser. Your browser will show a warning because the self-signed certificate configured by default is not verified by a known certificate authority and not trusted by your browser. You can temporarily acknowledge the warning for the purposes of this quick start but it is highly recommended that you configure valid certificates for any production deployments.

Login as the elastic user. The password can be obtained with the following command:

kubectl get secret rbk-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo

Доступ к grafana и синк dashboards

Используем kubectl port-forward

kubectl -n monitoring port-forward <grafana-pod> 3000

grafana доступна в браузере https://localhost:3000. Получить пароль для входа:

kubectl get secret --namespace monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

helmsdeep's People

Contributors

vilorij avatar ciiol avatar kpy3 avatar ex01tus avatar a-a-abramov avatar 0x42 avatar ggmaleva avatar amalgamm avatar yak-zuk-zop avatar ilyatrub avatar tolkonepiu avatar alexminder avatar kehitt avatar keinasylum avatar teadrim avatar vitaxa avatar d-baykov avatar pospolitanv avatar aenglisc avatar ndiezel0 avatar strug avatar wwwcool avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.