Compare commits
35 Commits
qwen
..
9b5aec1c96
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b5aec1c96 | |||
| 8eae5f1a10 | |||
| 1cfe24037c | |||
| 8c8ea75d69 | |||
| 958dcab3fa | |||
| 797ad67b90 | |||
| 5f2ba688e9 | |||
| 9dcf1f829b | |||
| 5d64ae8732 | |||
| 2b2daa5117 | |||
| cf1b161794 | |||
| baf27b42bb | |||
| 6627a62853 | |||
| 348a9bbe73 | |||
| 20a1c062e3 | |||
| 7bef51f350 | |||
| a912d08482 | |||
| 4255c00ba0 | |||
| 3d8de18123 | |||
| 26203c617d | |||
| 5daef4f2d5 | |||
| 49a5c19f6c | |||
| 6668f65528 | |||
| 4e205e0eae | |||
| ebd04134bf | |||
| 89815ffe55 | |||
| 011287ba4f | |||
| ef784f00d8 | |||
| 37e0a4c2c2 | |||
| 9863bfdf7d | |||
| 3c53e9a159 | |||
| 3806c5c2cc | |||
| 28d97db7fc | |||
| 54a0fbfb8c | |||
| 32c4d7b23c |
+86
-24
@@ -1,29 +1,91 @@
|
||||
name: ci
|
||||
on:
|
||||
name: Docker Build and Push # Имя CI джобы
|
||||
|
||||
on: # Выполняется если производится push в ветку main
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
permissions:
|
||||
contents: write
|
||||
jobs:
|
||||
deploy:
|
||||
branches: [ main ]
|
||||
|
||||
env: # Переменные окружения
|
||||
REGISTRY: gitea.trastinfo.ru
|
||||
IMAGE_NAME: sailor/mkdocs
|
||||
PLATFORMS: linux/amd64,linux/arm64
|
||||
|
||||
jobs: # Список выполняемых джоб
|
||||
need-build: # джоба проверки изменений в зависимостях. Если requirements.txt был изменен, то будет выполнена сборка и пуш образа
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
src_changed: ${{ steps.need-build.outputs.src }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: dorny/paths-filter@v2
|
||||
id: need-build
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- 'requirements.txt'
|
||||
|
||||
need-deploy: # джоба проверки изменений в файлах. При изменении пулит новые файлы и перезапускает контейнер
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
src_changed: ${{ steps.need-deploy.outputs.src }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: dorny/paths-filter@v2
|
||||
id: need-deploy
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- 'docs/*'
|
||||
- 'mkdocs.yml'
|
||||
|
||||
|
||||
build: # джоба сборки и пуша образа. Выполняется если проверка изменений показала что requirements.txt был изменен
|
||||
needs: need-build
|
||||
if: needs.need-build.outputs.src_changed == 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Configure Git Credentials
|
||||
run: |
|
||||
git config user.name github-actions[bot]
|
||||
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
|
||||
- uses: actions/setup-python@v5
|
||||
- name: Login to Gitea Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
python-version: 3.x
|
||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v4
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.REGISTRY_TOKEN }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
- run: pip install -r requirements.txt
|
||||
- run: mkdocs gh-deploy --force
|
||||
ref: main
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push multi-arch image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: need-deploy
|
||||
if: needs.need-deploy.outputs.src_changed == 'true'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Deploy over SSH
|
||||
uses: appleboy/ssh-action@v0.1.6
|
||||
with:
|
||||
host: ${{ secrets.HOST }}
|
||||
username: ${{ secrets.USER }}
|
||||
key: ${{ secrets.KEY }}
|
||||
script: |
|
||||
cd /home/ubadmin/mkdocs
|
||||
git pull origin main
|
||||
sudo docker compose down
|
||||
sudo docker compose up -d --build
|
||||
@@ -1,2 +1,3 @@
|
||||
.venv
|
||||
docs/copypaste
|
||||
docs/Заметки/vault/root-token.md
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
mkdocks:
|
||||
image: gitea.trastinfo.ru/sailor/mkdocs:latest
|
||||
restart: always
|
||||
volumes:
|
||||
- ./mkdocs.yml:/mkdocs/mkdocs.yml
|
||||
- ./docs:/mkdocs/docs
|
||||
ports:
|
||||
- "8000:8000"
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
FROM gitea.trastinfo.ru/sailor/pyhton:0.1
|
||||
WORKDIR /home/ubadmin/mkdocks
|
||||
COPY ./requirements.txt .
|
||||
RUN apk add --update --no-cache --virtual .build-deps gcc musl-dev &&\
|
||||
apk add --no-cache git ca-certificates curl &&\
|
||||
pip install --no-cache-dir --requirement ./requirements.txt &&\
|
||||
apk del .build-deps &&\
|
||||
rm ./requirements.txt
|
||||
WORKDIR /mkdocs
|
||||
CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Стартовая страница
|
||||
1
|
||||
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
dashy:
|
||||
# The image to pull + version. Can use `ghcr.io/lissy93/dashy` instead
|
||||
image: lissy93/dashy:latest
|
||||
# Optional container name
|
||||
container_name: dashy
|
||||
# Port to serve on (keep container port (second one) as 8080)
|
||||
ports:
|
||||
- 8080:8080
|
||||
# Mount a directory containing your conf.yml and any other assets
|
||||
volumes:
|
||||
- ./user-data:/app/user-data
|
||||
# Add any env vars for server here, if needed
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
# Auto-start the container on boot
|
||||
restart: unless-stopped
|
||||
# Healthcheck to determine when container healthy
|
||||
healthcheck:
|
||||
test: ['CMD', 'node', '/app/services/healthcheck.js']
|
||||
interval: 1m30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
@@ -0,0 +1,41 @@
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
services:
|
||||
server:
|
||||
image: docker.gitea.com/gitea:1.26.4
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=mysql
|
||||
- GITEA__database__HOST=db:3306
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea
|
||||
restart: always
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "222:22"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: docker.io/library/mysql:8
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=gitea
|
||||
- MYSQL_USER=gitea
|
||||
- MYSQL_PASSWORD=gitea
|
||||
- MYSQL_DATABASE=gitea
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./mysql:/var/lib/mysql
|
||||
@@ -0,0 +1,40 @@
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
services:
|
||||
server:
|
||||
image: docker.gitea.com/gitea:1.26.4
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea
|
||||
restart: always
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "222:22"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: docker.io/library/postgres:14
|
||||
restart: always
|
||||
environment:
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=gitea
|
||||
- POSTGRES_DB=gitea
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- ./postgres:/var/lib/postgresql/data
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
mkdocks:
|
||||
image: gitea.trastinfo.ru/sailor/mkdocs:latest
|
||||
restart: always
|
||||
volumes:
|
||||
- ./mkdocs.yml:/mkdocs/mkdocs.yml
|
||||
- ./docs:/mkdocs/docs
|
||||
ports:
|
||||
- "8000:8000"
|
||||
@@ -0,0 +1,10 @@
|
||||
services:
|
||||
nexterm:
|
||||
image: germannewsmaker/nexterm:latest
|
||||
container_name: nexterm
|
||||
network_mode: host
|
||||
restart: always
|
||||
environment:
|
||||
- ENCRYPTION_KEY=02bdb65a028c37b2628c3727f3821530a629c40c25843b5268ceeb79a2c4033e
|
||||
volumes:
|
||||
- ./nexterm-data:/app/data
|
||||
@@ -1,17 +0,0 @@
|
||||
# Welcome to MkDocs
|
||||
|
||||
For full documentation visit [mkdocs.org](https://www.mkdocs.org).
|
||||
|
||||
## Commands
|
||||
|
||||
* `mkdocs new [dir-name]` - Create a new project.
|
||||
* `mkdocs serve` - Start the live-reloading docs server.
|
||||
* `mkdocs build` - Build the documentation site.
|
||||
* `mkdocs -h` - Print help message and exit.
|
||||
|
||||
## Project layout
|
||||
|
||||
mkdocs.yml # The configuration file.
|
||||
docs/
|
||||
index.md # The documentation homepage.
|
||||
... # Other markdown pages, images and other files.
|
||||
@@ -1,33 +0,0 @@
|
||||
# Проект по построению инфраструктуры для хостинга платформ мониторинга
|
||||
## Задачи
|
||||
### Железо
|
||||
- Расположение серверов
|
||||
- Охлаждение
|
||||
- Прокладка кабелей
|
||||
- Питание
|
||||
- Запас мощности
|
||||
### ОС
|
||||
- Установка ОС
|
||||
- Базовая настройка доступов
|
||||
- Управление и оркестрация
|
||||
### Сеть
|
||||
- Прокладка
|
||||
- Настройка оборудования
|
||||
- Настройка магистралей
|
||||
### Документирование
|
||||
- Учета железа
|
||||
- Учет ОС и конфигураций
|
||||
- Карты сети
|
||||
- Физическая схема
|
||||
- L3 схема
|
||||
- Схема подключений
|
||||
- Vlan схема
|
||||
- Таблица адресации
|
||||
- Overcloud
|
||||
### Мониторинг
|
||||
- Доступность
|
||||
- Оповещения
|
||||
- Учет потребления ресурсов
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
@startuml
|
||||
!theme bluegray
|
||||
|
||||
title Схема доступа к Vm через Proxy
|
||||
|
||||
node "Proxy" as proxy
|
||||
|
||||
node "Master-1" as m1
|
||||
node "Master-2" as m2
|
||||
node "Master-3" as m3
|
||||
|
||||
node "Worker-1" as w1
|
||||
node "Worker-2" as w2
|
||||
node "Worker-3" as w3
|
||||
|
||||
node "Docker" as d1
|
||||
|
||||
proxy -down-> m1
|
||||
proxy -down-> m2
|
||||
proxy -down-> m3
|
||||
|
||||
proxy -down-> w1
|
||||
proxy -down-> w2
|
||||
proxy -down-> w3
|
||||
|
||||
proxy -down-> d1
|
||||
@enduml
|
||||
@@ -0,0 +1,38 @@
|
||||
@startuml
|
||||
!theme bluegray
|
||||
|
||||
title Схема Кластера Кубера
|
||||
|
||||
node "Proxy" as proxy
|
||||
|
||||
node "Мастер-ноды" {
|
||||
[Master-1]
|
||||
[Master-2]
|
||||
[Master-3]
|
||||
}
|
||||
|
||||
node "Воркер-ноды" {
|
||||
[Worker-1]
|
||||
[Worker-2]
|
||||
[Worker-3]
|
||||
}
|
||||
|
||||
|
||||
|
||||
proxy --> [Master-1]
|
||||
proxy --> [Master-2]
|
||||
proxy --> [Master-3]
|
||||
|
||||
[Master-1] --> [Worker-1]
|
||||
[Master-1] --> [Worker-2]
|
||||
[Master-1] --> [Worker-3]
|
||||
[Master-2] --> [Worker-1]
|
||||
[Master-2] --> [Worker-2]
|
||||
[Master-2] --> [Worker-3]
|
||||
[Master-3] --> [Worker-1]
|
||||
[Master-3] --> [Worker-2]
|
||||
[Master-3] --> [Worker-3]
|
||||
|
||||
|
||||
|
||||
@enduml
|
||||
@@ -1,2 +0,0 @@
|
||||
#Homelab
|
||||
Для своей лабы нужен сервак, и внешний адрес через который я смогу подключать внешние сервисы.
|
||||
@@ -1,8 +0,0 @@
|
||||
#openstack
|
||||
Заметки по поводу запуска Openstack
|
||||
Для запуска использовать 2U Oracle и харды для Ceph
|
||||
Пересобрать рейды. Установить контроллер в режим JBOD или вообще убрать его и подключить бекплейн к материнке.
|
||||
Подключить сетевые карты на 10Гб\с к серверам
|
||||
Накатываем 22 убунту на все сервера.
|
||||
Для подключения используем 10 Гбс на Цеф и 1 гбс на остальное. Так же можно прокинуть внешний ip для тестов облака.
|
||||
Ставим коллу и деплоим
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
pageInfo:
|
||||
title: Home Lab
|
||||
sections: # An array of sections
|
||||
- name: Github
|
||||
items: # An array of items
|
||||
- title: GitHub
|
||||
description: Source code and documentation on GitHub
|
||||
icon: fab fa-github
|
||||
url: https://github.com/SailorUpiter/mkdocs
|
||||
- name: Services
|
||||
items:
|
||||
- title: DNS
|
||||
icon: favicon
|
||||
url: http://192.168.1.2/
|
||||
- title: Gitea
|
||||
icon: https://icon-icons.com/ru/icon/gitea/146173
|
||||
url: http://192.168.130.3:3000/
|
||||
@@ -0,0 +1,2 @@
|
||||
# Заметки по докеру
|
||||
1) Для того что бы compose перечитал файл конфигурации нужно сделать стоп, а потом старт. Рестар не перечитывает конфигурацию
|
||||
@@ -0,0 +1,29 @@
|
||||
# Альтернативный registry
|
||||
Есть 2 ситуации когда нужен альтернативный реджистри докера:
|
||||
1) требуется качать свое приложение из своего регистри
|
||||
2) Докерхаб не доступен\ограничено кол-во скачиваний\санкции
|
||||
Для решение этих проблем мы можем в конфиг файле докера указать альтернативный регистри. Данная инструкция для обычной установки докера. Если докер рутлесс, то команды будут иными
|
||||
- Открываем или создаем, если нет, файл по пути
|
||||
```
|
||||
nano /etc/docker/daemon.json
|
||||
```
|
||||
- Редактируем или вставляем в свежий файл конфиг. В данном случае используется зеркало таймвеба. Ниже будет список альтернативныйх зеркал
|
||||
```
|
||||
{
|
||||
"registry-mirrors" : [ "https://dockerhub.timeweb.cloud" ]
|
||||
}
|
||||
```
|
||||
- Перезапускаем демон докера
|
||||
```
|
||||
systemctl reload docker
|
||||
```
|
||||
# Список альтернативных зеркал
|
||||
Адрес реестра Компания-владелец
|
||||
https://mirror.gcr.io Google
|
||||
https://public.ecr.aws Amazon
|
||||
https://dockerhub.timeweb.cloud Timeweb Cloud
|
||||
https://dh-mirror.gitverse.ru GitVerse (СберБанк)
|
||||
https://dockerhub1.beget.com Beget
|
||||
https://quay.io Red Hat
|
||||
https://registry.access.redhat.com Red Hat
|
||||
https://registry.redhat.io Red Hat
|
||||
@@ -78,20 +78,20 @@ git --version
|
||||
```
|
||||
adduser \
|
||||
--system \
|
||||
--shell /bin/bash \
|
||||
--shell /bin/false \
|
||||
--gecos 'Git Version Control' \
|
||||
--group \
|
||||
--disabled-password \
|
||||
--home /home/git \
|
||||
git
|
||||
gitea
|
||||
```
|
||||
1) Создадим необходимые для работы директории и выдадим созданному юзеру права на них. Права 770 на директорию /etc/gitea выдаются только для первоначальной настройки.
|
||||
```
|
||||
mkdir -p /var/lib/gitea/{custom,data,log}
|
||||
chown -R git:git /var/lib/gitea/
|
||||
chmod -R 750 /var/lib/gitea/
|
||||
mkdir -p /mnt/data/gitea/{custom,data,log}
|
||||
chown -R gitea:gitea /mnt/data/gitea/
|
||||
chmod -R 750 /mnt/data/gitea/
|
||||
mkdir /etc/gitea
|
||||
chown root:git /etc/gitea
|
||||
chown root:gitea /etc/gitea
|
||||
chmod 770 /etc/gitea
|
||||
```
|
||||
1) Создадим системный юнит для запуска gitea как сервиса systemd. Создадим файл юнита по пути /etc/systemd/system/gitea.service
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
log:
|
||||
level: info
|
||||
|
||||
runner:
|
||||
file: .runner
|
||||
capacity: 1
|
||||
timeout: 3h
|
||||
insecure: false
|
||||
fetch_timeout: 5s
|
||||
fetch_interval: 2s
|
||||
labels: ["ubuntu-latest:docker://gitea/runner-images:ubuntu-latest", "ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04"]
|
||||
|
||||
cache:
|
||||
enabled: true
|
||||
dir: ""
|
||||
host: "192.168.1.3"
|
||||
port: 8088
|
||||
external_server: ""
|
||||
|
||||
container:
|
||||
network: ""
|
||||
privileged: false
|
||||
options:
|
||||
workdir_parent:
|
||||
valid_volumes: []
|
||||
docker_host: ""
|
||||
force_pull: false
|
||||
|
||||
host:
|
||||
workdir_parent:
|
||||
@@ -0,0 +1,15 @@
|
||||
services:
|
||||
runner-1:
|
||||
image: gitea/act_runner:nightly
|
||||
restart: always
|
||||
environment:
|
||||
- CONFIG_FILE=/config.yaml
|
||||
- GITEA_INSTANCE_URL=http://192.168.1.3:3000/
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=token
|
||||
volumes:
|
||||
- ./runner1/config.yaml:/config.yaml
|
||||
- ./runner1/data:/data
|
||||
- ./runner1/cache:/root/.cache
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
ports:
|
||||
- "8088:8088"
|
||||
@@ -0,0 +1,41 @@
|
||||
# Gitea Runner
|
||||
# Включение Actions
|
||||
Для установки и добавления раннера нужны включенные действия. Если они не включены по умолчанию, то включаем их в конфиге самой gitea
|
||||
```
|
||||
nano /etc/gitea/app.ini
|
||||
|
||||
[actions] ENABLED=true
|
||||
```
|
||||
# Где взять токен
|
||||
Нужно зайти в репозиторий -> Настройки -> Действия -> Раннеры -> Создать новый раннер
|
||||
## Установка docker
|
||||
Раннер запускается в контейнере и запускает задачи тоже в контейнере, так что нам нужен докер.
|
||||
|
||||
```
|
||||
curl -fsSL https://get.docker.com | sh -
|
||||
```
|
||||
В нужно папке создадим папку для раннеров и перейдем в нее. Если нужнго будет запускать несколько раннеров, то мы просто создадим папку со следующим номером.
|
||||
```
|
||||
mkdir -p gitea_runners/runner1
|
||||
mkdir runner-1 && cd runner-1
|
||||
```
|
||||
Создадим конфиг ранера. Описание всех настроке конфига в оф документации https://gitea.com/gitea/runner/src/branch/main/internal/pkg/config/config.example.yaml
|
||||
```
|
||||
nano config.yaml
|
||||
```
|
||||
Вернемся в общую для ранеров директорию и создадим там compose файл для запуска. В этом файле мы можем описывать сразу все раннеры
|
||||
```
|
||||
cd ..
|
||||
nano docker-compose.yaml
|
||||
```
|
||||
После всех настроек запускаем и ждем лога о том, что раннер зарегистрирован
|
||||
```
|
||||
docker compose up -d
|
||||
docker logs gitea_runners-runner-1-1 -f
|
||||
```
|
||||
## Тест
|
||||
Для теста создадим в репозитории директорию и конфиг для работы с раннером
|
||||
```
|
||||
mkdir -p ./.gitea/workflow/test.yaml
|
||||
```
|
||||
Далее запушим любое изменение и посмотрим в репозитории во вкладе действия выполнение. Первое выполнение может быть долгим, так как раннер скачивает контейнер для запуска кода.
|
||||
@@ -0,0 +1,17 @@
|
||||
name: Test Workflow
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Print environment variables
|
||||
run: |
|
||||
echo "GITHUB_REPOSITORY: $GITHUB_REPOSITORY"
|
||||
echo "GITHUB_SHA: $GITHUB_SHA"
|
||||
echo "GITHUB_REF: $GITHUB_REF"
|
||||
echo "GITHUB_ACTOR: $GITHUB_ACTOR"
|
||||
echo "PATH: $PATH"
|
||||
@@ -0,0 +1,3 @@
|
||||
# Заметки по синтаксису Markdown
|
||||
## Зачеркнуть
|
||||
Что бы сделать зачеркнутый текст поместите его в ~~ТЕКСТ~~
|
||||
@@ -0,0 +1,11 @@
|
||||
storage "file" { # Указываем что храним секреты в файле, а не БД
|
||||
path = "/mnt/vault/data" # Путь до файла с данным
|
||||
}
|
||||
listener "tcp" { # Указываем какой сервер слушаем
|
||||
address = "0.0.0.0:8200"
|
||||
# tls_cert_file = "/etc/vault/vault-cert.pem"
|
||||
# tls_key_file = "/etc/vault/vault-key.pem"
|
||||
tls_disable = 1 # Отключение https://
|
||||
}
|
||||
ui = true # Включить UI
|
||||
disable_mlock = true
|
||||
@@ -0,0 +1,37 @@
|
||||
# Инструкция по установке Vault
|
||||
Система ubuntu 22.04
|
||||
Vault 2.0.0
|
||||
## Скачивание
|
||||
Компания Hashicorp запретила скачивать свои продукты из России. Пользуемся ВПН или скачиваем с зеркала яндекса
|
||||
```
|
||||
VAULT_VERSION="2.0.0"
|
||||
wget https://hashicorp-releases.yandexcloud.net/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip
|
||||
```
|
||||
## Установка
|
||||
Установим архиватор, что бы распаковать бинарник
|
||||
```
|
||||
sudo apt-get install -y unzip
|
||||
```
|
||||
Распакуем и перенесем бинарник в папку с бинарниками
|
||||
```
|
||||
unzip vault_${VAULT_VERSION}_linux_amd64.zip
|
||||
sudo mv vault /usr/local/bin/
|
||||
```
|
||||
Проверим что работает
|
||||
```
|
||||
vault --version
|
||||
```
|
||||
Далее нужно создать системного юзера и директории для конфигов и данных
|
||||
```
|
||||
adduser \
|
||||
--system \
|
||||
--shell /bin/false \
|
||||
--gecos 'Vault user' \
|
||||
--group \
|
||||
--disabled-password \
|
||||
--no-create-home \
|
||||
vault
|
||||
```
|
||||
```
|
||||
sudo nano /etc/vault/vault.hcl
|
||||
```
|
||||
@@ -0,0 +1,29 @@
|
||||
[Unit]
|
||||
Description="HashiCorp Vault - A tool for managing secrets"
|
||||
Documentation=https://www.vaultproject.io/docs/
|
||||
Requires=network-online.target
|
||||
After=network-online.target
|
||||
ConditionFileNotEmpty=/etc/vault/config.hcl
|
||||
|
||||
[Service]
|
||||
User=vault
|
||||
Group=vault
|
||||
ProtectSystem=full
|
||||
ProtectHome=read-only
|
||||
PrivateTmp=yes
|
||||
PrivateDevices=yes
|
||||
SecureBits=keep-caps
|
||||
AmbientCapabilities=CAP_IPC_LOCK
|
||||
NoNewPrivileges=yes
|
||||
ExecStart=/usr/local/bin/vault server -config=/etc/vault/config.hcl
|
||||
ExecReload=/bin/kill --signal HUP
|
||||
KillMode=process
|
||||
KillSignal=SIGINT
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
TimeoutStopSec=30
|
||||
StartLimitBurst=3
|
||||
LimitNOFILE=65536
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1 @@
|
||||
Для того что бы использовать vault
|
||||
@@ -1,10 +0,0 @@
|
||||
Данная нейросеть развернута локально на машине ООО Трастинфо.
|
||||
Нейросеть помнит контекст во время диалога
|
||||
Она не понимает местонахождение меня.
|
||||
Старается дать развернутый ответ.
|
||||
При большом объеме информации заметны фризы и подвисания
|
||||
На задачи математических вычислений она начинает выводить код python и отвечает на английском языке при вопросе на русском, но вычисление сделаны верно. Проверено на очень простом уравнении
|
||||
После решения уравнения нейросеть в чате начала отображать выполнение кода и повторять ответ на английском языке на старый вопрос пока не скажешь прекратить
|
||||
Пишет простые функции на питоне и может их выполнить
|
||||
Воспринимает ли текст с ошибками?
|
||||
Текст с ошибками воспринимает плохо, но воспринимает и осознает контекст сообщения
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#notes #comand #linux #docker
|
||||
```
|
||||
curl -fsSL https://get.docker.com | sh -
|
||||
curl https://get.docker.com | sh -
|
||||
```
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
#cloud-init #notes #automation #мысли
|
||||
Подумать что мы можем делать с клауд инитом
|
||||
@@ -1,2 +0,0 @@
|
||||
#docker #notes #мысли
|
||||
Для автоматизации установки докера на хост скопировать скрипт установки с сайта докера, залить в локальную репу и разливать его с ансибл хоста, после клауд инита.
|
||||
@@ -1,3 +0,0 @@
|
||||
#мысли
|
||||
Определить бы какие сервера будут стетлесс а как стейтфулл
|
||||
Тогда можно будет раскидать инфру, на плейбуки и создать репы для бекапов
|
||||
@@ -1,16 +0,0 @@
|
||||
#automation #notes #мысли
|
||||
План настройки автоматизации при деплое сервисов.
|
||||
Инструменты для использования OpenTofu + Ansible
|
||||
Что мы настраиваем терраформом
|
||||
1. Параметры ВМ (CPU, Ram, disk, ip, dns)
|
||||
2. Креды (логин, пароль, ssh)
|
||||
3. Первичная настройка (hostname, iptables?, fail2ban, ssh, time)
|
||||
4. Docker?
|
||||
В принципе делаем копию официальной репы софта?
|
||||
Вид к которому я пришел
|
||||
- Деплоим вм на хост через тераформ
|
||||
- При деплое выполняются первичные настройки
|
||||
- Передаем параметры в инвентарь ансибла
|
||||
- Ансибл запускает плейбуки для настройки
|
||||
- В настройку входят: система, мониторинг, бекап файлов.
|
||||
-
|
||||
@@ -1,15 +0,0 @@
|
||||
#notes #backup #мысли
|
||||
Примерные мысли такие. Для рекавери нам нужна вм, дата и конфиги.
|
||||
Как сервер бекапов используем urbackup. С его помощью мы бекапим файлы из ВМок которые мы можем быстро востановить в случае чего, что бы уменьшить оверхед бекапа. На каждую ВМ создаем рекавери план. В основном мы имеем 3 вида файлов:
|
||||
1) БД
|
||||
2) Статика
|
||||
3) Конфиги
|
||||
На каждую ВМ делаем свою репу с бекапами. Хотелось бы все делать рестиком быстро и просто с дедупом, но сложно в управлении и не совмещаем образы ВМ и файлы. Можно написать автоматизацию для хапер ви через снапшоты, но очень много подводных. Это прям надо целый инструмент писать.
|
||||
Для урбекапа надо проверить ограничения по скорости и мультипоток.
|
||||
Настроить репы для файлов. Так же настроить репы для хранения тофу файлов.
|
||||
Подумать над автоматической раскаткой приложения. Очень много автоматизации, долго писать тяжело поддерживать.
|
||||
Примерная блок схема
|
||||
Разверстка ВМ --> Добавление провижинига в репозиторий --> Определение директорий и файлов для бекапа --> Организация бекап-репы -- > Автоматизация бекапа
|
||||
Схема говно надо переделать.
|
||||
Добавить интеграцию бекапов в автоматизацию.
|
||||
Надо сделать регистри контейнеров для наших систем.
|
||||
@@ -1,5 +0,0 @@
|
||||
#мысли
|
||||
|
||||
Маркировка осуществляется для:
|
||||
* Сетевых кабелей (медных и оптических)
|
||||
* Кабелей питания
|
||||
@@ -1,15 +0,0 @@
|
||||
#notes #мысли
|
||||
Что требуется для онбординга новичка в команде?
|
||||
Какая документация нужна для онбординга?
|
||||
Попробуем сформировать базовую подготовку
|
||||
Задачи на онбординг:
|
||||
1) Знакомство с командой. Оформление пропусков (задача начальства)
|
||||
2) Ознакомление с документами по ТБ, ОТ и остальными
|
||||
3) Заведение учетных записей.
|
||||
4) Первичный инструктаж
|
||||
5) Острова обучения
|
||||
6) Сдача предварительного среза знаний
|
||||
7) Сдача экзамена.
|
||||
* [ ] Составить список учетных записей которые нужно дать сотруднику.
|
||||
* [ ] Определить входящую в инструктаж информацию
|
||||
* [ ] Сформировать острова обучения
|
||||
@@ -1,2 +0,0 @@
|
||||
#мысли #notes
|
||||
Нетбокс будет являться эталонным хостом для систем. НА основе его сделаем документацию и отработаем алгоритм развертывания. Так же эталонными хостами будут сервисные хосты (мониторинг, логи, бекап.)
|
||||
@@ -1,12 +0,0 @@
|
||||
|
||||
Здравствуйте. Для организации высокопроизводительного хранилища базы данных мониторинга электропотребления PDU требуется закупить SSD диски и SFP модули. Высокопроизводительное хранилище требуется так как текущее хранилище не справляется с возросшей нагрузкой, что в дальнейшем может привести к потере данных.
|
||||
|
||||
Для организации отказоустойчивости требуется что бы каждый сервер в количестве 8 штук был оснащен SSD дисками. Минимальное количество дисков 2-шт на сервер.
|
||||
|
||||
Таким образом требуется 16 дисков SSD Samsung PM1643a <MZILT1T9HBJR> или аналогичных.
|
||||
|
||||
Для организации высокоскоростного подключения к хранилищу базы данных системы мониторинга PDU требуется SFP модули. Для обеспечения отказоустойчивости, совместимости и взаимозаменяемости серверов требуется закупить:
|
||||
|
||||
24 модуля SFP ASF-10G-T 10Gteck или аналогичные
|
||||
|
||||
16 модулей SFP Lenovo AFBR-709SMZ-ib8, ARISTA XVR-00001-02, Huawei LTF8501-BC+ 02310MNW или аналогичных
|
||||
@@ -1,4 +0,0 @@
|
||||
Надо портов 15 + 2 аплинка
|
||||
Адресов надо штук 50-100
|
||||
Стойка 2.5 метра. Между стойками 3 метра. лоток пол метра с каждой стойки.
|
||||
Итого 2.5 +1 +3 = 6.5 метров
|
||||
@@ -1,25 +0,0 @@
|
||||
Идея такая - сделать скрипт который будет создавать рейд, потом запускать тесты и записывать результаты в файл. После рейд удаляется и создается с другим страйпом. После всех тестов создается рейд с включенным кешем. и аналогично запускаются тесты
|
||||
|
||||
Тестирование будет осуществляться в два этапа без кеша и с кешем. Для каждого страйпа будет проверятся нагрузка в (1,4) потока, блоками (4,8,64,4096) К, с глубиной очереди (1,8,32,64,128).
|
||||
Размер файла неизвестен. Тестирование настроено на время. Время тестирование 10 сек каждый конфиг.
|
||||
Элементы программы:
|
||||
Статические данные:
|
||||
- Список страйпов для рейд контроллера, список потоков, список очереди, размер блока. +
|
||||
Функции ОС:
|
||||
- Функция создания рейда +
|
||||
- Функция создания ФС +
|
||||
- Функция монтирования +
|
||||
- Функция отмонтирования +
|
||||
- Функция удаления ФС +
|
||||
- Функция удаления рейда +
|
||||
- Функция включения кеша
|
||||
Тестирование:
|
||||
- Функция генерации конфиг файлов +
|
||||
- Функция перебора конфигов
|
||||
- Функция тестирования и записи в файл результатов
|
||||
- Парсинг файлов и вывод только нужных данных в таблицу
|
||||
|
||||
|
||||
Реализация на питоне. Запускаем большой цикл с вложенным циклом.
|
||||
Выполнение выглядит так:
|
||||
Генерим конфиги -> Начали цикл создаем RAID 0 из 1-ого диска со страйпом 8 -> создаем ФС -> Монтируем ФС -> Начало цикла тестирования -> Начало цикла парсинга -> Завршение парсинга - > Завершение цикла тестирования -> Отмонтируем диск -> Удаляем ФС -> Удаляем рейд 0 со страйпом 8 -> Завершаем Цикл тестирования.
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
|
||||
Что требуется для сдачи юнита стойки в аренду
|
||||
1) Стойка 1U + розетка
|
||||
2) Питание + резерв -> проблема управления питанием и мониторинга его потребления (Сколько максимальный объем питания на 1 БП? На 1 сервер?)
|
||||
3) Охлаждение
|
||||
4) IP Адреса -> Проблема подключения и портов (сколько ip адресов? Сколько портов подключения? Какой гарантированный канал? Порт IPMI дается ли? какой у него канал? )
|
||||
5) Контроль доступа ?
|
||||
6) Суммарный трафик?
|
||||
7) Топология сети?
|
||||
8) Автоматизация?
|
||||
9) Биллинг?
|
||||
@@ -1,5 +0,0 @@
|
||||
#мысли
|
||||
Ну какую то сверх очевидную базу я знаю.
|
||||
Темы которые следует поизучать подробнее это ВПН, маршрутизация, БГП
|
||||
БГП вообще 10 раз читал ниче не понял
|
||||
С впном пока надо повременить и отрисовать архитектуру
|
||||
@@ -1,81 +0,0 @@
|
||||
#note #network #sfp
|
||||
У нас все оборудование цисковсвкое. Кароточки тоже хуй пойми какие.
|
||||
Посчитаем сколько всего надо:
|
||||
6 серверов RJ45 (2 порта) 24
|
||||
2 сервера SFP+ (2 порта) 8
|
||||
1 СХД SFP+ (4 порта) 8
|
||||
Подключение идет с 2-х сторон
|
||||
Итого:
|
||||
24 RJ4 Пример ASF-10G-T 10Gteck
|
||||
16 SFP+
|
||||
|
||||
Пересчет
|
||||
6 серверов RJ45 по 2 порта = 12 штук
|
||||
5 серверов SFP+ по 2 порта =20 штук
|
||||
1 схд 4 портов rj45 = 4 штуки (4 было в комплекте они уже есть)
|
||||
Запас? 4 RJ45
|
||||
Итого
|
||||
16 RJ45
|
||||
24 SFP+
|
||||
|
||||
|
||||
Чисто теоретически заведутся все СФП. Практически а хуй его знает.
|
||||
|
||||
Точно рабочие
|
||||
ASF-10G-T 10Gteck
|
||||
|
||||
Lenovo AFBR-709SMZ-ib8
|
||||
ARISTA XVR-00001-02
|
||||
Huawei LTF8501-BC+ 02310MNW
|
||||
Текст письма
|
||||
|
||||
Здравствуйте. Для организации высокоскоростного подключения к хранилищу базы данных системы мониторинга PDU требуется SFP модули. Для обеспечения отказоустойчивости и совместимости серверов требуется закупить:
|
||||
24 модуля SFP ASF-10G-T 10Gteck или аналогичные
|
||||
16 модулей SFP Lenovo AFBR-709SMZ-ib8, ARISTA XVR-00001-02, Huawei LTF8501-BC+ 02310MNW или аналогичных
|
||||
|
||||
|
||||
|
||||
Отчет о своместимости SFP
|
||||
HPE 10GB SR SFP+ 455885-001
|
||||
SN 7CR909N16K
|
||||
Ядро сети Работает
|
||||
HP NIC Работает
|
||||
Eonstore DS1012 Работает
|
||||
|
||||
Lenovo AFBR-709SMZ-ib8
|
||||
pn\sn 46c3448 Y050UC0C6FD0
|
||||
(Хпшеная в ленову работает)
|
||||
Ядро сети (Работает)
|
||||
from core to HP DL360G9 SFP+ card Работает
|
||||
Eonstore DS1012 Работает
|
||||
HP NIC (работает)
|
||||
|
||||
ARISTA XVR-00001-02
|
||||
Sn XAP1114T3654
|
||||
Ленова в аристу работает
|
||||
Ариста в Хп работает
|
||||
Ядро сети (Работает)
|
||||
HP NIC (работает)
|
||||
Eonstore DS1012 Работает
|
||||
|
||||
Huawei LTF8501-BC+ 02310MNW
|
||||
Sn J265A000290
|
||||
Ядро сети (Работает)
|
||||
Хуавей в аристу работает
|
||||
Хуавей в ленову +
|
||||
Хуавей в ХП +
|
||||
HP NIC (работает)
|
||||
Eonstore DS1012 Работает
|
||||
|
||||
Оптические трансиверы
|
||||
СХД 8 Шт
|
||||
Сервера HP 8 Шт
|
||||
Сервера оракл 12 Шт
|
||||
Rj45 трансиверы 16 ШТ
|
||||
|
||||
|
||||
Карточки куда идет
|
||||
деллы BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller (rev 01)
|
||||
ХП rj54 Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
|
||||
SFP+ карточки HP NC550SFP Dual Port 10Gbe Server adapter
|
||||
Лезвие ядра сети Cisco C6800-32P10G
|
||||
@@ -1,144 +0,0 @@
|
||||
|
||||
конфиг
|
||||
[fiotest]
|
||||
rw=write
|
||||
name=fiotest
|
||||
blocksize=8k
|
||||
filename=/mnt/pve/test/write
|
||||
size=1g
|
||||
ioengine=libaio
|
||||
iodepth=128
|
||||
numjobs=1
|
||||
runtime=60
|
||||
direct=1
|
||||
|
||||
Результат
|
||||
fiotest: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
|
||||
fio-3.28
|
||||
Starting 1 process
|
||||
fiotest: Laying out IO file (1 file / 1024MiB)
|
||||
^Cbs: 1 (f=1): [W(1)][33.3%][w=1001KiB/s][w=250 IOPS][eta 00m:40s]
|
||||
fio: terminating on signal 2
|
||||
|
||||
fiotest: (groupid=0, jobs=1): err= 0: pid=2515: Sat May 3 00:11:44 2025
|
||||
write: IOPS=306, BW=1227KiB/s (1257kB/s)(24.2MiB/20224msec); 0 zone resets
|
||||
slat (nsec): min=9129, max=61388, avg=11072.73, stdev=2469.71
|
||||
clat (usec): min=1575, max=237505, avg=3247.15, stdev=5187.99
|
||||
lat (usec): min=1585, max=237546, avg=3258.36, stdev=5188.33
|
||||
clat percentiles (usec):
|
||||
| 1.00th=[ 1745], 5.00th=[ 1909], 10.00th=[ 2008], 20.00th=[ 2180],
|
||||
| 30.00th=[ 2311], 40.00th=[ 2442], 50.00th=[ 2573], 60.00th=[ 2737],
|
||||
| 70.00th=[ 2966], 80.00th=[ 3294], 90.00th=[ 4228], 95.00th=[ 5866],
|
||||
| 99.00th=[ 11994], 99.50th=[ 16319], 99.90th=[ 90702], 99.95th=[103285],
|
||||
| 99.99th=[238027]
|
||||
bw ( KiB/s): min= 672, max= 1888, per=99.49%, avg=1221.60, stdev=244.70, samples=40
|
||||
iops : min= 168, max= 472, avg=305.40, stdev=61.18, samples=40
|
||||
lat (msec) : 2=9.88%, 4=78.65%, 10=9.69%, 20=1.50%, 50=0.10%
|
||||
lat (msec) : 100=0.11%, 250=0.08%
|
||||
cpu : usr=0.17%, sys=0.29%, ctx=6206, majf=0, minf=12
|
||||
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
|
||||
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
issued rwts: total=0,6205,0,0 short=0,0,0,0 dropped=0,0,0,0
|
||||
latency : target=0, window=0, percentile=100.00%, depth=1
|
||||
|
||||
Run status group 0 (all jobs):
|
||||
WRITE: bw=1227KiB/s (1257kB/s), 1227KiB/s-1227KiB/s (1257kB/s-1257kB/s), io=24.2MiB (25.4MB), run=20224-20224msec
|
||||
|
||||
Disk stats (read/write):
|
||||
dm-0: ios=54/8018, merge=0/0, ticks=636/27836, in_queue=28472, util=97.85%, aggrios=54/7434, aggrmerge=0/861, aggrticks=638/24232, aggrin_queue=24906, aggrutil=97.59%
|
||||
sda: ios=54/7434, merge=0/861, ticks=638/24232, in_queue=24906, util=97.59%
|
||||
|
||||
Конфиг
|
||||
[fiotest]
|
||||
rw=write
|
||||
name=fiotest
|
||||
blocksize=8k
|
||||
filename=/mnt/pve/test/write
|
||||
size=1g
|
||||
ioengine=libaio
|
||||
iodepth=32
|
||||
numjobs=1
|
||||
runtime=60
|
||||
direct=1
|
||||
|
||||
Результат
|
||||
fiotest: (g=0): rw=write, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=32
|
||||
fio-3.28
|
||||
Starting 1 process
|
||||
Jobs: 1 (f=1): [W(1)][100.0%][w=11.0MiB/s][w=1409 IOPS][eta 00m:00s]
|
||||
fiotest: (groupid=0, jobs=1): err= 0: pid=3588: Sat May 3 00:16:19 2025
|
||||
write: IOPS=1530, BW=12.0MiB/s (12.5MB/s)(718MiB/60022msec); 0 zone resets
|
||||
slat (usec): min=3, max=141739, avg=94.73, stdev=1480.44
|
||||
clat (msec): min=2, max=262, avg=20.81, stdev=14.28
|
||||
lat (msec): min=2, max=262, avg=20.91, stdev=14.27
|
||||
clat percentiles (msec):
|
||||
| 1.00th=[ 4], 5.00th=[ 8], 10.00th=[ 12], 20.00th=[ 14],
|
||||
| 30.00th=[ 16], 40.00th=[ 17], 50.00th=[ 18], 60.00th=[ 20],
|
||||
| 70.00th=[ 23], 80.00th=[ 26], 90.00th=[ 33], 95.00th=[ 40],
|
||||
| 99.00th=[ 69], 99.50th=[ 95], 99.90th=[ 203], 99.95th=[ 226],
|
||||
| 99.99th=[ 247]
|
||||
bw ( KiB/s): min= 5584, max=17216, per=99.85%, avg=12226.15, stdev=2529.45, samples=119
|
||||
iops : min= 698, max= 2152, avg=1528.27, stdev=316.18, samples=119
|
||||
lat (msec) : 4=1.24%, 10=6.83%, 20=52.96%, 50=36.68%, 100=1.86%
|
||||
lat (msec) : 250=0.43%, 500=0.01%
|
||||
cpu : usr=0.48%, sys=1.47%, ctx=68734, majf=0, minf=10
|
||||
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
|
||||
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
|
||||
issued rwts: total=0,91862,0,0 short=0,0,0,0 dropped=0,0,0,0
|
||||
latency : target=0, window=0, percentile=100.00%, depth=32
|
||||
|
||||
Run status group 0 (all jobs):
|
||||
WRITE: bw=12.0MiB/s (12.5MB/s), 12.0MiB/s-12.0MiB/s (12.5MB/s-12.5MB/s), io=718MiB (753MB), run=60022-60022msec
|
||||
|
||||
Disk stats (read/write):
|
||||
dm-0: ios=126/98119, merge=0/0, ticks=3940/1857428, in_queue=1861368, util=99.31%, aggrios=126/96396, aggrmerge=0/2709, aggrticks=3928/1803591, aggrin_queue=1807713, aggrutil=99.23%
|
||||
sda: ios=126/96396, merge=0/2709, ticks=3928/1803591, in_queue=1807713, util=99.23%
|
||||
|
||||
конфиг
|
||||
[fiotest]
|
||||
rw=write
|
||||
name=fiotest
|
||||
blocksize=8k
|
||||
filename=/mnt/pve/test/write
|
||||
size=1g
|
||||
ioengine=libaio
|
||||
iodepth=1
|
||||
numjobs=1
|
||||
runtime=60
|
||||
direct=1
|
||||
|
||||
Результат
|
||||
fiotest: (g=0): rw=write, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=1
|
||||
fio-3.28
|
||||
Starting 1 process
|
||||
Jobs: 1 (f=1): [W(1)][100.0%][w=1632KiB/s][w=204 IOPS][eta 00m:00s]
|
||||
fiotest: (groupid=0, jobs=1): err= 0: pid=3616: Sat May 3 00:18:47 2025
|
||||
write: IOPS=282, BW=2258KiB/s (2312kB/s)(132MiB/60002msec); 0 zone resets
|
||||
slat (usec): min=6, max=42146, avg=91.13, stdev=759.96
|
||||
clat (usec): min=1609, max=285038, avg=3450.64, stdev=5465.66
|
||||
lat (usec): min=1617, max=285046, avg=3541.91, stdev=5565.78
|
||||
clat percentiles (usec):
|
||||
| 1.00th=[ 1778], 5.00th=[ 1909], 10.00th=[ 2008], 20.00th=[ 2147],
|
||||
| 30.00th=[ 2278], 40.00th=[ 2409], 50.00th=[ 2573], 60.00th=[ 2802],
|
||||
| 70.00th=[ 3130], 80.00th=[ 3916], 90.00th=[ 5407], 95.00th=[ 6980],
|
||||
| 99.00th=[ 11338], 99.50th=[ 16581], 99.90th=[ 83362], 99.95th=[124257],
|
||||
| 99.99th=[238027]
|
||||
bw ( KiB/s): min= 656, max= 3552, per=100.00%, avg=2266.08, stdev=760.91, samples=119
|
||||
iops : min= 82, max= 444, avg=283.26, stdev=95.11, samples=119
|
||||
lat (msec) : 2=9.96%, 4=70.89%, 10=17.68%, 20=1.12%, 50=0.21%
|
||||
lat (msec) : 100=0.08%, 250=0.06%, 500=0.01%
|
||||
cpu : usr=0.12%, sys=0.26%, ctx=17491, majf=0, minf=12
|
||||
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
|
||||
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
|
||||
issued rwts: total=0,16936,0,0 short=0,0,0,0 dropped=0,0,0,0
|
||||
latency : target=0, window=0, percentile=100.00%, depth=1
|
||||
|
||||
Run status group 0 (all jobs):
|
||||
WRITE: bw=2258KiB/s (2312kB/s), 2258KiB/s-2258KiB/s (2312kB/s-2312kB/s), io=132MiB (139MB), run=60002-60002msec
|
||||
|
||||
Disk stats (read/write):
|
||||
dm-0: ios=220/23472, merge=0/0, ticks=2652/93376, in_queue=96028, util=97.68%, aggrios=220/21785, aggrmerge=0/2623, aggrticks=2622/79363, aggrin_queue=82138, aggrutil=97.58%
|
||||
sda: ios=220/21785, merge=0/2623, ticks=2622/79363, in_queue=82138, util=97.58%
|
||||
@@ -1 +0,0 @@
|
||||
Замеры производительности дисков DC600M Enterprise. Диски подключены в сервер HP DL360 G9 в рейд контроллер P440ar и собраны в одиночный RAID 0 без включения кеша контроллера.
|
||||
@@ -1,20 +0,0 @@
|
||||
#note #storage #disk
|
||||
Для базы данных нам требуется быстрые диски. Не столько важна пропускная способность сколько IO диска. Так как мы часто выполняем и чтение и запись маленьким блоком.
|
||||
Обязательное условие это Энтерпрайз диски для ДЦ так как содержат конденсаторы.
|
||||
Мы можем установить не более 4-х дисков на сервер (sas) и 8-и дисков (sata), так как упремся в пропускную способность интерфейса, а кеши медленные. Можно купить переходник для NVME дисков, но есть подводные на количество линий и возможности бифуркации PCI-e слота. Чисто теоретически можно заказать U.2 HBA модуль для линий 16x на 4 диска и протянуть кабеля до бекплейна, а потом приколхозить их. Тогда мы упираемся в производительность сети. Джае 10ГБ\с канал не покроет мощность NVME дисков
|
||||
|
||||
Желаемый диск 2Тб
|
||||
SSD Samsung PM1643a <MZILT1T9HBJR>
|
||||
|
||||
Возможный бомж вариант 2Тб
|
||||
SSD Samsung PM897 <MZ7L31T9HBNA-00A07>
|
||||
|
||||
Альтернативный вендор 2Тб
|
||||
SSD Intel D3-S4620 <SSDSC2KG019TZ01>
|
||||
|
||||
Текст письма
|
||||
Здравствуйте. В связи с проблемами производительности хранилища для базы данных мониторинга электропотребления PDU, требуется закупить SSD диски
|
||||
|
||||
Здравствуйте. Для организации высокопроизводительного хранилища базы данных мониторинга электропотребления PDU требуется закупить SSD диски. Высокопроизводительное хранилище требуется так как текущее хранилище не справляется с возросшей нагрузкой.
|
||||
Для организации отказоустойчивости требуется что бы каждый сервер в количестве 8 штук был оснащен SSD дисками. Минимальное количество дисков 2-шт на сервер.
|
||||
Таким образом требуется 16 дисков SSD Samsung PM1643a <MZILT1T9HBJR> или аналогичных.
|
||||
@@ -1 +0,0 @@
|
||||
Тест -> Поменять местами жилы на флюке -> F2
|
||||
@@ -1,14 +0,0 @@
|
||||
#dock
|
||||
Маркировка - это нанесение на кабель или устройство отличительного знака, который поможет опознать его.
|
||||
Маркировка применяется для однотипных вещей например сетевых кабелей или серверов, так как в ЦОДе этого добра навалом. Для инженера требуется уметь читать и наносить маркировку.
|
||||
|
||||
|
||||
Маркировка существует двух видов:
|
||||
|
||||
Порты маркируем в соответствии со стандартом ОТКУДА Стойка Юнит Порт - КУДА Стойка Юнит Порт
|
||||
Для блейд серверов и маршрутизаторов добавляется обозначение B (Bay) оно же лезвие. Номер лезвия указывается на корзине и на маркировке
|
||||
Порты считаем слева направо сверху вниз если не указаны специальные обозначения
|
||||
3 5 7
|
||||
1 2 4 6 8
|
||||
Если специальные обозначение есть (тип LAN1 или ETH1) то ориентируемся по ним
|
||||
Порты IPMI (ilo, iDRAC, Irmc) не считаем и указываем их как менеджмент порты отдельно
|
||||
+2
-3
@@ -18,11 +18,10 @@ theme:
|
||||
icon:
|
||||
repo: fontawesome/brands/github
|
||||
features:
|
||||
- content.code.copy
|
||||
- navigation.instant
|
||||
- navigation.instant.progress
|
||||
- navigation.sections
|
||||
# - navigation.tabs
|
||||
# - navigation.tabs.sticky
|
||||
- navigation.path
|
||||
- navigation.top
|
||||
- navigation.prune
|
||||
@@ -34,7 +33,7 @@ extra:
|
||||
provider: google
|
||||
property: G-WJRFTNJP0B
|
||||
site_author: g.ryzhov
|
||||
copyright: Trustinfo.ru, 2025
|
||||
copyright: Sailor.lab, 2026
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.details
|
||||
|
||||
Reference in New Issue
Block a user