Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
selectel-internship
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ильин Владимир Александрович
selectel-internship
Commits
9a910bca
Commit
9a910bca
authored
Mar 04, 2026
by
Ильин Владимир Александрович
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Тестовое задание
parent
c878f04a
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63370 additions
and
1 deletion
+63370
-1
README.md
README.md
+150
-1
access.log
test-assignment/access.log
+63218
-0
ex1.sh
test-assignment/ex1.sh
+2
-0
No files found.
README.md
View file @
9a910bca
...
@@ -2,5 +2,154 @@
...
@@ -2,5 +2,154 @@
[
Резюме pdf
](
./cv/Ilin_Vladimir_System_administrator.pdf
)
[
Резюме pdf
](
./cv/Ilin_Vladimir_System_administrator.pdf
)
[
Резюме tex
](
./cv/Ilin_Vladimir_System_administrator.tex
)
## Тестовое задание
### Задание 1
```
sh
awk
'{data[$1] += $10} END {for (ip in data) print data[ip], "bytes for", ip}'
access.log
```
### Задание 2
```
sh
lsof
-iTCP
-sTCP
:ESTABLISHED
```
### Задание 3
Время недоступности сервера 13:00 по настоящее.
Судя по графику, в 13:00 создалось множество подключений к БД до достижения максимума и они не закрылись, при этом
количество запросов к самой БД (Questions) упало минимума. Так же, судя по графику Thread Cache ничего не кешируется.
Итого, я бы предположил что в 13:00 поступил либо ОЧЕНЬ не оптимальный запрос, либо AFTER INSERT trigger модифицирует таблицу на
которой он находится или допущена подобная логическая ошибка с циклами.
### Задание 4
```
doickerfile
FROM ubuntu:latest
MAINTAINER MyCompany
COPY . /var/www/html
RUN apt-get update -y
RUN apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
```
*
Я бы выбрал образы на основе alpine из за меньшего потребления ресурсов. Или уже готовый, официальный образ nginx.
*
И, возможно, конкретную версию для большей стабильности при воспроизведении сервиса.
*
Инструкция MAINTAINER устарела, рекомендуется использовать LABEL.
*
Так же имеет смысл указать почту или любые другие контактные данные.
*
COPY до
*apt-get update*
и установки необходимого ПО делают переиспользование слоев невозможным
*
В данном случае не получится использовать уже обновленный образ для создания других образов.
*
*apt-get update*
без
*apt-get upgrade*
имеет смысл при использовании конкретной версии базового образа, но не при теге latest.
*
Нету инструкции
*EXPOSE*
, она не обязательна, но рекомендована.
Предлагаемый мной Dockerfile:
```
Dockerfile
FROM nginx:1.29-alpine
#если критично необходимы свежие пакеты то
# FROM nginx:latest
LABEL maintainer="MyCompany Ltd maintainer@mycompany.org" \
title="Nginx backend X" \
version="0.1-beta" \
description="Nginx based backend for service X"
# RUN apk add nginx-mod-http-perl ...
COPY . /var/www/html
EXPOSE 80
#EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
```
Так-же стоит добавить .git
\*
,
\*
.md, в .dockerignore.
### Задание 5
0.
Проверить веб-сервер самому, ping и/или подключится к серверу.
1.
Сохранить логи.
2.
Попробовать перезапустить веб-сервер.
*
При неудаче, если недавно была изменена конфигурация/обновлен контейнер итд, откатить изменения и попробовать перезапустить снова.
3.
Вне зависимости от исхода шага 2 проверить логи до (и после перезапуска).
4.
Диагностировать ошибку через логи и исправить.
### Задание 6
Я использовал
*minikube*
.
После установки
*minikube*
и
*kubectl*
1.
Запустить кластер
```
sh
minikube start
```
2.
Создать манифест
*deployment.yaml*
```
yaml
apiVersion
:
apps/v1
kind
:
Deployment
metadata
:
name
:
my-app
spec
:
replicas
:
3
# Увеличить для масштабирования
selector
:
matchLabels
:
app
:
my-app-deployment
template
:
metadata
:
labels
:
app
:
my-app
spec
:
containers
:
-
name
:
my-app
image
:
my-app-image
ports
:
-
containerPort
:
80
# Перезапускается при падении по умолчанию
3. Создать манифест *service.yaml*
```
yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: NodePort
selector:
app: my-app
ports:
-
port: 80
targetPort: 80
nodePort: 30080 # Открыть порт
```
4. Применить манифесты
```
sh
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
```
5. Получить доступ к сервису в контейнере
```
sh
curl
`minikube ip`
:30080
```
* Временно увеличить количество реплик
```
sh
kubectl scale deployment my-app-deployment --replicas=5
```
ИЛИ изменить ```
replicas: 3
```
в
*deployment.yaml*
.
### Задание 7
1.
Уточнить "Что конкретно не работает?"
*
Параллельно, при возможности, проверить самому логи или попросить их.
2.
При наличии недавних изменений попробовать откатить в рабочее состояние.
3.
Диагностировать ошибку через логи.
*
Поддерживать связь с заказчиком.
4.
По возможности исправить проблему или объяснить ситуацию и назвать примерные сроки исправления.
test-assignment/access.log
0 → 100644
View file @
9a910bca
This diff is collapsed.
Click to expand it.
test-assignment/ex1.sh
0 → 100755
View file @
9a910bca
#!/bin/sh
awk
:
'{data[$1] += $10} END {for (ip in data) print data[ip], "bytes for", ip}'
$1
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment