Skip to content

fogmorn/automation-t3

Repository files navigation

automation-t3

Тестовое задание по автоматизации.

Дано

Необходимо создать три веб сервера: один FrontEnd и два BackEnd.
На FrontEnd Веб страничка, запрашивающая ввести два числа, и кнопка «Посчитать».
Веб сервера на NGINX или Apache, страничка на PHP и/или Python, может что-нибудь своё, главное результат.

Задание

  1. При нажатии кнопки «Посчитать», FrontEnd сервер должен через первый BackEnd посчитать сумму чисел, а через второй их перемножение и отобразить результат.
  2. На страничке необходимо отобразить имена серверов, на которых осуществлялись вычисления, причем имя сервера должен сообщить именно BackEnd.

Условия реализации

  1. Запустить Docker образы из проекта automation-t1 в Kubernetes.
  2. Сделать по два пода на каждый бэкэнд.

Решение

Установка и настройка minikube

Для установки выполнен раздел Installation из руководства.

Запуск кластера minikube

azureuser@s01:~$ minikube start --driver=docker --insecure-registry registry.example.com:80                                                       
* minikube v1.24.0 on Ubuntu 20.04                                                                                                               
* Using the docker driver based on user configuration                                                                                             
* Starting control plane node minikube in cluster minikube                                                                                       
* Pulling base image ...                                                                                                                         
* Downloading Kubernetes v1.22.3 preload ...                                                                                                     
    > preloaded-images-k8s-v13-v1...: 501.73 MiB / 501.73 MiB  100.00% 220.58 M                                                                   
    > gcr.io/k8s-minikube/kicbase: 355.78 MiB / 355.78 MiB  100.00% 19.70 MiB p                                                                   
* Creating docker container (CPUs=2, Memory=2200MB) ...                                                                                           
* Preparing Kubernetes v1.22.3 on Docker 20.10.8 ...                                                                                             
  - Generating certificates and keys ...                                                                                                         
  - Booting up control plane ...                                                                                                                 
  - Configuring RBAC rules ...                                                                                                                   
* Verifying Kubernetes components...                                                                                                             
  - Using image gcr.io/k8s-minikube/storage-provisioner:v5
* Enabled addons: default-storageclass, storage-provisioner
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  
  
azureuser@s01:~$ docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS                    NAMES
4599e8f307fa   gcr.io/k8s-minikube/kicbase:v0.0.28   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp   minikube

Запуск minikube dashboard

minikube dashboard
# Port forwarding from local pc to remote with minikube dashboard
ssh -f -N -L 46041:localhost:46041 azureuser@137.135.200.175

Создание Docker образов

Так как в этой задаче не предполагается использование Docker-compose, то Docker файлы из проекта automation-t1 были переделаны. В Docker файлы было добавлено:

  1. Настройка портов.
  2. Запуск основной программы контейнера.
  3. Копирование файлов сайта на BackEnd контейнеры.

Запуск Docker контейнеров в Kubernetes

Сборка Docker образов и их запуск в Kubernetes осуществляется с помощью утилиты Werf.
Файл werf.yaml используется для сборки образов.
Файлы в папке .helm/templates используются для запуска контейнеров в Kubernetes.

Были созданы файлы Deployment, в которых описано имя пода, количество реплик, порты и образы для создания контейнера: front1, back1, back2. Также были созданы Service файлы для связи между подами: front1, back1, back2.

Запуск утилиты Werf

azureuser@s01:~/automation-t3$ werf converge --repo registry.example.com:80/automation-t3                                                          
Version: v1.2.53                                                                                                                                   
Using werf config render file: /tmp/werf-config-render-1990110385
<some lines skipped>
┌ ⛵ image back2                                                                                                                                 
│ ┌ Building stage back2/dockerfile                                                                                                               
│ │ back2/dockerfile  Sending build context to Docker daemon  43.01kB                                                                             
│ │ back2/dockerfile  Step 1/15 : FROM nanoninja/php-fpm:latest                                                                                  
│ │ back2/dockerfile   ---> 975daeead3d0                                                                                                         
│ │ back2/dockerfile  Step 2/15 : COPY ./back2/php-fpm.conf /usr/local/etc/                                                                       
│ │ back2/dockerfile   ---> Using cache
│ │ back2/dockerfile   ---> 8743ee13e16c
│ │ back2/dockerfile  Step 3/15 : COPY ./back2/site.conf /usr/local/etc/php-fpm.d/
│ │ back2/dockerfile   ---> Using cache
│ │ back2/dockerfile   ---> b161497edabb
│ │ back2/dockerfile  Step 4/15 : COPY ./site_static/multiply.php /var/www/html/site/
<some lines skipped>
│ │ ┌ Store stage into registry.example.com:80/automation-t3
│ │ └ Store stage into registry.example.com:80/automation-t3 (0.60 seconds)
│ ├ Info
│ │      name: registry.example.com:80/automation-t3:e6d15dc6b103b7be825f307dcf6f870b74d199d2a73176d04aa91950-1641665715991
│ │        id: 715ab520d3ec
│ │   created: 2022-01-08 18:15:15 +0000 UTC
│ │      size: 230.9 MiB
│ └ Building stage back2/dockerfile (33.49 seconds)
└ ⛵ image back2 (34.11 seconds)
<some lines skipped>
┌ Waiting for release resources to become ready                                                                                                   
│ ┌ Status progress                                                                                                                               
│ │ DEPLOYMENT                                                                        REPLICAS       AVAILABLE        UP-TO-DATE                 
│ │ back1                                                                             2/2            1                2                           
│ │ │   POD                            READY      RESTARTS       STATUS               ---                                                         
│ │ ├── 857d8cc657-5nz4x               0/1        0              ContainerCreating    Waiting for: available 1->2                                 
│ │ └── 857d8cc657-mkxl4               1/1        0              Running                                                                         
│ │ back2                                                                             2/2            2                2                           
│ │ │   POD                            READY      RESTARTS       STATUS                                                                           
│ │ ├── 57bb69b58f-kccpn               1/1        0              Running                                                                         
│ │ └── 57bb69b58f-shs9d               1/1        0              Running                                                                         
│ │ front1                                                                            1/1            0                1                           
│ │ │   POD                            READY      RESTARTS       STATUS               ---                                                         
│ │ └── 5b956ff4c5-8jzkb               0/1        0              ContainerCreating    Waiting for: available 0->1                                 
│ └ Status progress                                                                                                                               
│                                                                                                                                                 
│ ┌ Status progress                                                                                                                               
│ │ DEPLOYMENT                                                                        REPLICAS       AVAILABLE        UP-TO-DATE                 
│ │ back1                                                                             2/2            1->2             2                           
│ │ │   POD                            READY      RESTARTS       STATUS                                                                           
│ │ ├── 857d8cc657-5nz4x               1/1        0              ContainerCreating                                                               
│ │ │                                                            -> Running                                                                       
│ │ └── 857d8cc657-mkxl4               1/1        0              Running                                                                         
│ │ back2                                                                             2/2            2                2                           
│ │ │   POD                            READY      RESTARTS       STATUS                                                                          
│ │ ├── 57bb69b58f-kccpn               1/1        0              Running                                                                         
│ │ └── 57bb69b58f-shs9d               1/1        0              Running                                                                         
│ │ front1                                                                            1/1            0->1             1                           
│ │ │   POD                            READY      RESTARTS       STATUS                                                                           
│ │ └── 5b956ff4c5-8jzkb               1/1        0              ContainerCreating                                                               
│ │                                                              -> Running           
│ └ Status progress
└ Waiting for release resources to become ready (5.13 seconds)

Release "automation-t3" has been upgraded. Happy Helming!
NAME: automation-t3
LAST DEPLOYED: Sat Jan  8 17:02:38 2022
NAMESPACE: automation-t3
STATUS: deployed
REVISION: 3
TEST SUITE: None
Running time 7.02 seconds

Посмотреть, что получилось, можно следующей командой (и также в dashboard):

azureuser@s01:~$ kubectl get all -n automation-t3                                                                                                  
NAME                          READY   STATUS    RESTARTS   AGE
pod/back1-857d8cc657-5nz4x    1/1     Running   0          22s                                                                                   
pod/back1-857d8cc657-mkxl4    1/1     Running   0          22s                                                                                   
pod/back2-57bb69b58f-kccpn    1/1     Running   0          22s                                                                                   
pod/back2-57bb69b58f-shs9d    1/1     Running   0          22s                                                                                   
pod/front1-5b956ff4c5-8jzkb   1/1     Running   0          21s                                                                                   
  
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/back1    ClusterIP   10.110.189.203   <none>        9000/TCP   22s
service/back2    ClusterIP   10.97.9.129      <none>        9001/TCP   22s
service/front1   ClusterIP   10.104.231.86    <none>        80/TCP     22s
                                                                                                                                                 
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE                                                                                     
deployment.apps/back1    2/2     2            2           22s                                                                                     
deployment.apps/back2    2/2     2            2           22s                                                                                     
deployment.apps/front1   1/1     1            1           22s            
                                                                         
NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/back1-857d8cc657    2         2         2       22s                                                                               
replicaset.apps/back2-57bb69b58f    2         2         2       22s
replicaset.apps/front1-5b956ff4c5   1         1         1       22s

Перенаправление портов

Команда для перенаправления 9080 порта сервера K8s на порт 80:

kubectl port-forward --address 0.0.0.0 pod/front1-8b494ffc6-v2kjq 9080:80 --namespace=automation-t3

Теперь можно обратиться к FrontEnd по адресу http://<IP сервера>:9080 и отобразится веб страничка.

Конечный результат

Веб страничка с вычислениями Web_page_automation-t3
Kubernetes Dashboard - Pods K8s_pods_list
Kubernetes Dashboard - Deployments K8s_deployments_list
Kubernetes Dashboard - Replicas K8s_replicas_list
Kubernetes Dashboard - Services K8s_services_list

About

Используется Docker, Kubernetes (Minikube), Werf.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors