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 с ошибкой