Тестовое задание по автоматизации.
Необходимо создать три веб сервера: один FrontEnd и два BackEnd.
На FrontEnd Веб страничка, запрашивающая ввести два числа, и кнопка «Посчитать».
Веб сервера на NGINX или Apache, страничка на PHP и/или Python, может что-нибудь своё, главное результат.
- При нажатии кнопки «Посчитать», FrontEnd сервер должен через первый BackEnd посчитать сумму чисел, а через второй их перемножение и отобразить результат.
- На страничке необходимо отобразить имена серверов, на которых осуществлялись вычисления, причем имя сервера должен сообщить именно BackEnd.
- Запустить Docker образы из проекта automation-t1 в Kubernetes.
- Сделать по два пода на каждый бэкэнд.
Для установки выполнен раздел 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-compose, то Docker файлы из проекта automation-t1 были переделаны. В Docker файлы было добавлено:
- Настройка портов.
- Запуск основной программы контейнера.
- Копирование файлов сайта на BackEnd контейнеры.
Сборка 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 и отобразится веб страничка.




