-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
168 lines (122 loc) · 11.7 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
1. Название виртуальной сети у каждого стенда должно быть своё (vagrant)
2. Конф. файл для gitlab-runner должен генерироваться
3. Настройка для docker (/etc/docker/...) должен генерироваться
4. /etc/hosts (для доступа к внутренним машинам)
или DNS внутри ВМ? посмотреть, что это https://github.com/aacebedo/dnsdock
5. Наличие модуля charbridge внутри ВМ (загрузка в /etc/modules и создание устройств)
6. На этапе разворачивания стенда, нужно залить или собрать образы для контрллеров и GUI
и залить из в локальный docker-регистр (vagrant?)
7. Имя gitlab-runner-а при регистрации в gitlab, должно включать в себя (название проекта)
8. Подумать насчёт генерировать "скелет" для gitlab-ci.yml
9. Сейчас образы для сборки x64. Надо сделать и для i586 (докер образы)
10. Продумать как будет осуществляться запуск нескольких стендов.
Может стоит запускать несколько стендов и распределять pipeline между ними
(надо проверить все одинаковые runner-ы запускают задачи или только один из них)
11. Возможно надо делать несколько попыток устанавливать пакеты в Dockerfile (было пару раз, когда был недоступен ftp)
13. Стоит ли сделать отдельную поддержку запуска сервисов (возможно через serv, чтобы работало и в init и в systemd)
run_services:
- serv1
- serv2
- serv3
14. Продумать насчёт периодического запуска по cron "docker prune" для чистки ненужных или промежуточных образов
(пока что включил просто в gitlab-ci стадия cleanup).
17. daas admin hosts --confile project.yml - генерирование hosts файла
18. daas init gitlab-ci --confile project.yml - генерирование скелета конф. файла для gitlab-ci
19. daas init [projectname] - генерирование шаблонного файла для проекта
22. Продумать скрипт архивирующий образ указанного узла (или всех). Со всеми Dockerfile и т.п.
Смысл в том, что потом можно было взять этот "срез" образов конкретного коммита и развернуть где-нибудь ещё.
Другой вариант, это архивировать только исходные данные и конф. файлы необходимые для поднятия "стенда".
Хотя формально это сейчас уже и так сохраняется в artefacts (gitlab-ci).
Попутно здесь можно сделать команду "запушить" в docker-registry текущий образы по специальными именами
(например передавать скрипту COMMIT_SHA в качестве уникального префикса или постфикса).
23. Продумать линтер для конф. файла
daas check project.yml
24. Подумать насчёт объединить конфиги "vnc.d" и "logdb.d" для nginx в одну папку "project-name.d"
25. Продумать возможность использовать в файле проекта "переменные" типа {{project_name}},{{vstand_hostname}}, etc
26. Специальные контейнеры logdb и nginx в целом похожи на обчные узлы. Надо подумать об унификации их инициализации.
Т.е. чтобы они были как обычные узлы (входили в список project['nodes']), просто дополнительно конфигурировались
отдельными функциями (свой dockerfile, свои доп. файлы).
27. daas ssh config - генерирование config для ~/.ssh/config
28. Разделить Dockerfile-шаблоны (tpl) на базовую часть и дополнительные. Используя возможности "include"
в системе jinja2. Тогда docker сможет использовать закешированные слои если у всех будут одинаковые части.
29. Если у узла skip_compose: yes нужно ли тогда требовать наличие свойства 'ip'.
Похоже 'ip' можно сделать не обязательным и не включать тогда узел в сеть.
Тоже самое можно продумать на тему "обязательности" секции network
(для проектов где только один узел или все skip_compose). Правда тогда непонятно зачем использовать daas
30. Продумать может сделать для 'nginx' возможность настраивать проброс прямо в файле проекта,
чтобы по нему генерировалась конфигурация для nginx.
Что-то типа
nginx:
backends:
myname:
# на какой порт пробрасывать
port: 4444
# на какой host
host: mybackend.host
# по какому пути обрабатывать запросы в nginx
locaction: /mybackend/
myname2:
port: 4445
host: mybackend2.host
locaction: /mybackend2/
При этом сейчас уже есть секция 'any' позволяющая указать готовые файлы подключаемые при старте nginx.
nginx:
any:
- myconf.location
- myconf.upstream
Но удобство секции 'backends' в том, что конфигурация генерируется "сама".
31. Подумать, может в настройках стенда создавать несколько runner-ов для сборки
(т.к. она может идти параллельно) и специальный runner для тестов - который будет выполнять
только одно задание за раз. Тогда стадии которые можно собирать параллельно будут собираться параллельно.
А конфликтующие (последовательные стадии) можно будет настраивать на этот "спец. runner".
Потому-что сейчас есть только два runner-а:
- сборщик в docker
- просто runner на стенде (который и готовит контейнеры и запускает тесты и всё остальное)
33. Команда для разворачивания (на подумать):
daas gitlab create - создание и запуск gitlab-сверера в docker
daas vstand init - подготовка стендовой машины
(установка vargant в docker, установка ansible, подготовка ВМ, создание пользователя и выдача нужных прав).
Подразумевается разворачивание на "новенькой" пустой машине с ALT.
34. Нужно ли дать возможность в настройках сети добавлять свои дополнительные hosts
network:
extra_hosts:
- "myextnode1 myext: 127.0.0.1"
- "myextnode2 myext2: 192.168.0.1"
35. Подумать насчёт всё-таки переименовать 'image:' в 'template:' в файле проекта
36. Подумать насчёт генерировать пустые файлы указанные как env_file-ы (если они не существуют),
чтобы docker-compose в любом случае запускался, а не ругался на их отсутсвие.
39 Всякие способы чистки
docker images | grep -e '[23] weeks ago' | grep -v regis | awk '{print $1}' | xargs docker image rm
# Самый крутой! Удаляет почти всё что можно..
docker system prune
но он не включает volumes, которые могут занимать значительное место, но чистяться отдельно
docker volume prune
40. можно так же сделать обработку параметров из командной строки (--env param.sub.sub2.val=xx)
41. При развёртывании стендов можно сделать сценарии запрашивающие параметры (и пароли)
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_prompts.html
https://github.com/ansible/ansible-examples/blob/master/language_features/prompts.yml
42. Расставить теги в сценариях, чтобы можно было вызывать частично
43. В качестве работы с DNS
https://docs.ansible.com/ansible/2.5/modules/nsupdate_module.html
44. Посмотреть на использование Consul (он может выступать как DNS!)
45. Рассмотреть необходимость прикрутить Allure
46. Consul, Valut, Consul-Templates, Registrator, https://github.com/hashicorp/envconsul
А так же посмотреть на это: https://github.com/mantl/consul-cli
И может на это: https://github.com/ncbi/consul-announcer
https://hub.docker.com/r/progrium/consul/
официальный образ consul: https://hub.docker.com/_/consul/
На тему registrator:
https://ru.stackoverflow.com/questions/712148/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BD%D0%B0%D1%8F-%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8-docker-consul-consul-template-%D0%B8-%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80
https://apm-linux.blogspot.com/2015/09/consul-registrator-docker.html
запуск регистратора
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest -internal consul://localhost:8500
запуск consul как сервиса
docker run --rm -e 'CONSUL_ALLOW_PRIVILEGED_PORTS=' consul agent -dns-port=53 -recursor=8.8.8.8 -server -ui -client=0.0.0.0
docker container run --rm --net host --name node1 -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' -e CONSUL_BIND_INTERFACE='wlo1' consul agent -server -client 0.0.0.0 -bootstrap-expect 1 --bootstrap=1 -ui -datacenter dc1
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest -internal consul://localhost:8500 --restart always
GET IP:
curl -s http://docker:8500/v1/catalog/service/pv-test | jq '.[].ServiceAddress'
docker network create --driver=bridge --subnet=192.168.44.0/24 --ip-range=192.168.44.0/24 --gateway=192.168.44.1 rx-net
docker-compose:
- поддержка hostname
- поддерка переменных в названии (hostname)