Diplom

0

Описание

Языки

  • HCL67,3%
  • Jinja29,7%
  • Smarty2,1%
  • HTML0,6%
  • Dockerfile0,3%
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
7 месяцев назад
README.md

Создание облачной инфраструктуры.

  1. Создал сервисный аккаунт с помощью terraform. D-1-1.png
  2. Передал креды сервисного аккаунта в output для дальнейшего использования.
  3. Создал backet с помощью terraform. D-1-3.png
  4. С помощью следующей команды передал креды от сервисного аккаунта в переменные окружения.
terraform output -json | jq -r 'to_entries[] | .key + "=" + (.value.value | tostring)' | while read -r line ; do echo export "$line"
  1. Инициализировал терраформ для создания инфраструктуры следующей командой, для того чтобы terraform.tfstate хранить в s3 backet.
terraform init -backend-config="access_key=$access_key" -backend-config="secret_key=$secret_key"
  1. Создал подсети в трёх зонах доступности. D-1-3.png
  2. Создал в первом приближении 4 вм для кластека k8s. D-1-6.png

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

  1. Кластер Kubernetes разворачивал с помощью kubespray.
  2. Сделал через terraform генерацию insentory для kubspray, а так же запуск playbook для установки кластера.
  3. В файле ~/.kube/config находятся данные для доступа к кластеру. D-2-1.png
  4. Команда kubectl get pods --all-namespaces отрабатывает без ошибок. D-2-2.png

Создание тестового приложения.

  1. Создал Dockerfile простого приложения nginx со статической страничкой. D-3-1.png
    D-3-2.png
  2. Создан Yandex Container Registry с помощью terraform.
  3. В реестр помещён образ приложения. D-3-3.png

Подготовка cистемы мониторинга и деплой приложения.

  1. Написал ansible роли для установки (эта роль из ansible-galaxy) helm, деплоя чарта kube-prometheus-stack, так же деплой своего приложения. Образ приложения берётся из яндекс реестра.
  2. Доступ к графане и приложению организован по 80 порту, через ingress: D-4-1.png
    D-4-2.png
  3. Скрины из графаны - ресурсы кластера и сети кластера:
    D-4-3.png
    D-4-4.png

Установка и настройка CI/CD

Выбрал для использования gitlab. Написал pipline .gitlab-ci.yml:

stages: - build - deploy variables: DOCKER_REGISTRY: "cr.yandex/crprfm6ra9ig2st28ao1/diplom-web" # Указываем репозиторий docker-build: image: docker:latest stage: build services: - docker:dind before_script: - echo "$key_ci_cd" | base64 -d > key_ci.json #Ключ сервисного аккаунта - cat key_ci.json | docker login --username json_key --password-stdin $DOCKER_REGISTRY #Логинимся в репозиторий rules: #Тут делаем проверку, если есть тег ставим его, если нет ставим latest - if: '$CI_COMMIT_TAG != null' variables: TAG: '${CI_COMMIT_TAG}' - if: '$CI_COMMIT_BRANCH != null && $CI_COMMIT_TAG == null' variables: TAG: 'latest' script: - docker build -t $DOCKER_REGISTRY:$TAG . - docker push $DOCKER_REGISTRY:$TAG deploy-k8s: stage: deploy only: - tags # Выполняется только при появлении нового тега image: name: alpine/kubectl:latest entrypoint: ["/bin/sh", "-c"] script: - export KUBECONFIG=${KUBECONFIG} #Логинимся в k8s - kubectl set image deployment/app app=$DOCKER_REGISTRY:${CI_COMMIT_TAG}

Для теста изменим index.html. И комитим изменения:
D-5-1.png
D-5-4.png
Работа выполненна, изменённый образ залит в реестр, но не деплоится в кластере k8s, т.к. нет тега.
D-5-2.png
На страничке соответственно изменений нет: D-5-3.png
Добавляем тег: v2. Теперь происходит деплоймент: D-5-5.png
D-5-6.png
И изменилась наша страничка:
D-5-7.png