Giter Site home page Giter Site logo

test-task's Introduction

Тестовое задание DevOpsCamp Cloud.ru

1. Ansible playbook

Написать Ansible playbook, который выполняет следующие шаги:

  1. Создать нового пользователя cloudru с паролем cloudpass
  2. Разрешить авторизацию через ssh по ключу
  3. Запретить логин по ssh от root
  4. Скопировать публичный ключ для пользователя cloudru
  • Для написания и проверки плейбука использовалась UTM c ОС Ubuntu Server 22.04.3.
  • Пароль пользователя был захэширован через mkpasswd с использованием SHA-512.
  • Данные пользователя были занесены в playbook/users.json, что при желании позволило бы легко расширить область действия плейбука на нескольких пользователей.

2. Deploy web-app

Приложение

Веб-приложение на Python, слушает порт 8000 и в реализует 3 метода:

  • GET /hostname - имя хоста, на котором запущено приложение
  • GET /author - начение переменной окружения $AUTHOR
  • GET /id - возвращает значение переменной окружения $UUID

Так же был добавлен еще один метод /health для осуществления Readiness-пробы.

Dockerfile

Написать Dockerfile для приложения в соответствии с best-practice.

Было создано два image, которые были выгружены на DockerHub, откуда их забирает kubernetes:

  • 1-ый для архитектуры AMD64 (x86_64).
  • 2-ой для архитектуры ARM64 (AArch64).

Kubernetes manifest

Написать манифест для запуска приложения в Kubernetes.

Требования:

  • Отдельный namespace
  • Deployment с 3 репликами
  • Сервис типа ClusterIP
  • Readiness- и Liveness- пробы
  • Переменная UUID должна содержать uid пода в кластере

Сервис типа ClusterIP предполагает что доступ к подам будет только внутри кластера. Для проверки работоспособности внутри, удобно использовать curl:

# Чтобы узнать ClusterIP
$ kubectl get svc

# Попадаем внутрь VM (кластер поднимался локально на minikube)
$ minikube ssh

$ curl "<cluster-ip>:<service-port>/author"
# или напрямую к поду:
$ сurl "<pod-ip>:<pod-port>/id"

Для доступа к кластеру извне, необходимо либо сменить тип сервиса на nodePort / LoadBalancer, либо использовать Ingress.

Helm chart

Написать Helm чарт, в котором через values.yaml можно задать:

  • Имя образа, запускаемого в поде
  • Количество реплик приложения
  • Значение переменной AUTHOR

Также были добавлены переменные для изменения порта приложения и для изменения имени namespace.

test-task's People

Contributors

nyuuuukie avatar

Watchers

 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.