README.md

Репозиторий инфраструктуры

В данном репозитории хранится инфраструктурная часть проекта “Пельменная №2”.

Ссылка на репозиторий с приложением пельменной

Оглавление

Cтруктура репозитория

├── k8s                      - Компоненты инфраструктуры
│   ├── argocd               - Декларативный GitOps-инструмент непрерывной доставки
|   ├── helm                 - Чарты и манифесты для momo-store
│   ├── acme-issuer.yaml     - Для получения сертификата в Let's Encrypt
│   └── service-account.yaml - Сервисный аккаунт с которого будем работать
├── terraform                - Манифесты IaC (также папка с картинками, которые загружаются в S3 при развертывании)
└── README.md

Подготовка инфраструктуры

Подключаемся к Я.Облаку (https://yandex.cloud/ru/) и перейдём в консоль. 1. Создаём каталог для нашего проекта 2. Создадим сервистный аккаунт. 3. Создадим авторизованный ключ для сервисного аккаунта и запишем его файл

Шаги 2 и 3 выполняются по инструкции Я.Облака на любой машине или ВМ в Я.Облаке или любом другом сервисе. https://cloud.yandex.ru/ru/docs/iam/quickstart-sa#create-sa

  1. Добавим аутентификационные данные в переменные окружения:
export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID=$(yc config get cloud-id)
export YC_FOLDER_ID=$(yc config get folder-id)

Где:

  • YC_TOKEN — IAM-токен.
  • YC_CLOUD_ID — идентификатор облака.
  • YC_FOLDER_ID — идентификатор каталога.

Подготовка к созданию кластера в Я.Облаке

Создавать K8s кластер будем при помощи Terraform. Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций.

Предварительно создадим ACCESS_KEY_ID и SECRET_ACCESS_KEY для подключения backend terraform и S3 хранилищу для сохранения состония работы terraform

  1. Выполним команды:
export AWS_ACCESS_KEY_ID="<идентификатор_ключа>"
export AWS_SECRET_ACCESS_KEY="<секретный_ключ>"
  1. При создании хранилища в конслоя Я.Облака для хранилища нужно задать имя “dumplingbucket”

Создание кластера

  1. Скачаем все файлы из этого репозитория на машину, на которой выполняется натройка инфраструктуры:
git clone https://gitlab.praktikum-services.ru/std-016-008/infra-dumpling.git
  1. Перейдём в папку terraform и выполним следующие команды:
terraform init
terraform validate
terraform apply

Настройка доступа подключения к k8s

  1. Получаем ID кластера.
yc managed-kubernetes cluster list
  1. Выполним команды, взяв ID кластера из предыдушего пункта.
CLUSTER_ID=$<ID_кластера>
yc managed-kubernetes cluster get-credentials --id <ID_кластера> --external
  1. Проверим, что кластер доступен.
kubectl cluster-info
  1. Переходим в папку k8s и выполняем команду:
kubectl apply -f service-account.yaml
  1. Подготовим токен объекта ServiceAccount
SA_TOKEN=$(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep admin-user-token | awk '{print $1}') -o json | jq -r .data.token | base64 --d)
  1. Получим IP-адрес кластера:
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
  --format json | \
  jq -r .master.endpoints.external_v4_endpoint)
  1. Дополним файл конфигурации:
kubectl config set-cluster sa-test2 \
  --certificate-authority=$var_crt_k8s \
  --server=$MASTER_ENDPOINT \
  --kubeconfig=config
  1. Добавим информацию о токене для admin-user в файл конфигурации:
kubectl config set-credentials admin-user \
  --token=$SA_TOKEN \
  --kubeconfig=config
  1. Добавим информацию о контексте в файл конфигурации:
kubectl config set-context default \
  --cluster=sa-test2 \
  --user=admin-user \
  --kubeconfig=config
  1. Теперь конфиг из ~/.kube/config может быть помещён на машине с установленным kubectl в папку .kube, чтобы сразу работать с kubernetes кластером.

Установка Nginx ingress controller и менеджера пакетов Kubernetes Helm

  1. Для установки Helm-чарта с Ingress-контроллером NGINX выполним команду:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && \
helm repo update && \
helm install ingress-nginx ingress-nginx/ingress-nginx
  1. Выполним команду, чтобы узнать внешний IP нашего Load Balancer.
kubectl get svc | grep ingress

Результат команды:

NAME                                      TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                      AGE
ingress-nginx-controller                  LoadBalancer   10.96.255.56    158.160.122.131   80:30223/TCP,443:32637/TCP   3d7h
  1. Данный EXTERNAL-IP необходимо сопоставить с адресом магазина https://dumpling.telnor.ru/, сделано это в личном кабинете регистратора NETHOUSE (https://domains.nethouse.ru/)

Установка менеджера сертификатов

  1. Выполним команду:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.1/cert-manager.yaml
  1. В папке k8s этого репозитория есть гужный нам манифест acme-issuer.yaml, при необходимости в нём нужно сменить mail на актуальный. Выполним команду:
kubectl apply -f acme-issuer.yaml

Установка ArgoCD

Доступ к ArgoCD можно получить сделав kubectl port-forward svc/argocd-server -n argocd 8080:443, сервис не выставлен наружу для большей безопасности, можно задеплоить ingress в папке argocd, тогда доступ появится

  1. Для установки ArgoCD в отдельный namespace выполним следующие команды:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f ingress.yml
kubectl apply -n argocd -f app.yaml ## реализация методологии GitOps, argo смотрит на k8s/helm 
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "ClusterIP"}}'    #локально
  1. Для безопасности доступ к ArgoCD осуществляется локально на машине, на которой выполняется настройка инфраструктуры. Для этого нужно выполнить команду:
kubectl port-forward svc/argocd-server -n argocd 8080:443
  1. После проброса портов ArgoCD будет доступен по адресу https://localhost:8080

  2. Для получения паролья от УЗ admin нужно выполнить команду:

kubectl get secrets -n argocd argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
  1. Необходимо довить данный репозиторий в ArgoCD в Settings/Repositories.

  2. На основании добавленого репозитория создать Application и наслаждаться работой магазина.

Правила версионирования

  1. Изменения вносятся в репозитории https://gitlab.praktikum-services.ru/std-016-008/dumpling-store

  2. Версия приложения формируется из переменной VERSION в пайплайне - 1.0.${CI_PIPELINE_ID}

  3. Контейнеры фронтенда и бэкенда собираются и публикуются в отдельных пайплайнах, при сборке каждый образ получает тег с номером версии приложения.

  4. После тестирования образа, образ тегируется как latest.

  5. Образы публикуются в GitLab Container Registry.

Мониторинг, логирование и дашборд

  1. Минимальный мониторинг и чтение логов доступно в ArgoCD.

  2. Более серьёзная система логгирования и мониторинга в разработке.

Описание
Дипломный проект "Пельменная №2" курса Яндекс.Практикум "DevOps для эксплуатации и разработки". В репозитории содержится terraform и helm чарты для магазина https://gitflic.ru/project/telnor/dumpling-store-diplom
Конвейеры
0 успешных
0 с ошибкой
Разработчики