Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
cherry-pick
позволяет аккуратно перенести только нужные коммиты.Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
git add <filename>
cherry-pick
git cherry-pick --continue
Если вы хотите прервать процесс
cherry-pick
, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
2. Системные сигналы: механизмы ОС для уведомления процессов о событиях, таких как завершение работы (SIGTERM) или ошибка (SIGSEGV).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее.
Чтобы явно задать код завершения функции, используется команда
return
. my_function() {
if [[ $1 -gt 0 ]]; then
return 0 # Успех
else
return 1 # Ошибка
fi
}
my_function 5
echo $? # Выведет 0 (успех)
Для передачи данных из функции (например, строки или числа) можно использовать
echo
. Вывод можно перехватить через подстановку команд $()
my_function() {
echo "Hello, $1!"
}
result=$(my_function "world")
echo "$result" # Выведет "Hello, world!"
Функция может менять значения глобальных переменных, которые затем используются за ее пределами
my_function() {
result=$(( $1 + $2 ))
}
my_function 3 7
echo $result # Выведет 10
Используется в сценариях для проверки, выполнилась ли функция успешно. Значение
0
обычно означает успех, а любое другое число — ошибку.Удобен для передачи данных из функции.
Полезно, если функция должна сохранять данные для дальнейшей обработки.
# Функция проверки файла
check_file() {
if [[ -f $1 ]]; then
echo "Файл $1 существует."
return 0
else
echo "Файл $1 не найден."
return 1
fi
}
# Вызов функции
check_file "/etc/passwd"
status=$? # Сохраняем код завершения
if [[ $status -eq 0 ]]; then
echo "Продолжаем работу..."
else
echo "Останавливаемся из-за ошибки."
fi
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
2. Под (Pod): минимальная единица деплоя в Kubernetes, содержащая один или несколько контейнеров, которые разделяют сетевые и хранилищные ресурсы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥4
Docker Compose поддерживает использование JSON-файлов вместо стандартного YAML-файла. Формат JSON полностью совместим с YAML, так как YAML является надмножеством JSON. Для этого достаточно создать JSON-файл с описанием конфигурации контейнеров и передать его с помощью опции
-f
.Файл должен содержать описание сервисов в формате JSON. Например, вместо YAML
version: "3.9"
services:
web:
image: nginx
ports:
- "80:80"
В формате JSON будет так
{
"version": "3.9",
"services": {
"web": {
"image": "nginx",
"ports": ["80:80"]
}
}
}
Используйте флаг
-f
, чтобы указать Docker Compose, какой файл использоватьdocker-compose -f docker-compose.json up
Вы можете проверить статус контейнеров, как обычно:
docker-compose -f docker-compose.json ps
JSON часто используется в API, CI/CD-пайплайнах и других инструментах, которые могут генерировать конфигурации автоматически.
JSON легко парсить программно, что может быть полезно в скриптах и интеграциях.
Некоторые команды и проекты могут предпочитать JSON как более строгий и распространенный формат.
docker-compose.json
{
"version": "3.8",
"services": {
"app": {
"image": "python:3.9",
"volumes": ["./app:/app"],
"working_dir": "/app",
"command": "python app.py"
}
}
}
docker-compose -f docker-compose.json up
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
1. Он управляет запуском, мониторингом и завершением контейнеров через взаимодействие с контейнерным рантаймом.
2. Также отвечает за регистрацию ноды в кластере и выполнение инструкций от мастера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥9
Вал (или "валидность данных") в Prometheus определяется настройками временного диапазона хранения данных. Обычно данные в Prometheus живут столько, сколько задано в параметре
--storage.tsdb.retention.time
, который устанавливает период хранения временных рядов.Если не указать параметр
--storage.tsdb.retention.time
, данные хранятся 15 дней. Это соответствует 360 часам.Вы можете настроить период хранения данных, передав значение параметра при запуске Prometheus:
CLI-параметр:
prometheus --storage.tsdb.retention.time=30d
Если Prometheus запускается как часть системы CI/CD через Docker Compose, Kubernetes или другой инструмент, параметр указывается в соответствующем разделе.
services:
prometheus:
image: prom/prometheus
command:
- '--storage.tsdb.retention.time=7d' # 7 дней (168 часов)
Большие периоды хранения требуют больше дискового пространства. Если валидация данных больше не нужна, лучше очищать старые временные ряды.
Длительное хранение может замедлить обработку запросов, особенно если используемые метрики застарелые или редко запрашиваются.
Для CI/CD-пайплайнов обычно достаточно короткого периода (например, 7–15 дней), чтобы сохранять данные релевантными и свежими.
Если вы хотите, чтобы метрики для CI/CD жили 12 часов (подходящий срок для проверки тестов и сборок), настройте
prometheus:
image: prom/prometheus
command:
- '--storage.tsdb.retention.time=12h'
Перейдите на страницу
/status
→ /status/flags
, где можно увидеть значение параметра --storage.tsdb.retention.time
.Проверьте журнал запуска Prometheus или конфигурационный файл.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
1. PVC (Persistent Volume Claim): запрос на выделение хранилища в Kubernetes, связанный с конкретным подом.
2. Full Stack: общий термин, описывающий весь стек технологий разработки, включая фронтенд, бэкенд и инфраструктуру.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27
Это три модели облачных вычислений, которые различаются уровнем предоставляемых услуг и степенью ответственности между пользователем и провайдером.
IaaS предоставляет инфраструктуру как услугу. Пользователь получает доступ к виртуализированным вычислительным ресурсам, таким как серверы, хранилища, сети и операционные системы.
Виртуальные машины, диски, сетевые ресурсы и другие элементы инфраструктуры.
AWS EC2, Google Compute Engine, Microsoft Azure VMs.
Настраивает операционные системы, устанавливает ПО, управляет сетью и обеспечивает безопасность.
Компания разворачивает свои приложения в облаке, используя виртуальные машины и настройку сети по своим потребностям.
PaaS предоставляет платформу для разработки, тестирования и развертывания приложений. Провайдер управляет инфраструктурой, а пользователь сосредотачивается на написании и запуске приложений.
Среду для разработки, включая операционную систему, базы данных, серверы приложений, инструменты разработки и т. д.
AWS Elastic Beanstalk, Google App Engine, Heroku, Microsoft Azure App Service.
Пишет код, тестирует приложения и развертывает их на платформе.
- Пример использования:
Разработчики используют платформу для быстрого развертывания веб-приложений без необходимости управления серверами и сетями.
SaaS предоставляет готовые приложения как услугу. Пользователь просто использует программное обеспечение через интернет.
Полностью готовое приложение, доступное через браузер или клиентскую программу.
Gmail, Microsoft 365, Google Drive, Salesforce, Slack.
Пользуется функциональностью приложения, не заботясь о технической стороне.
Организация использует Google Workspace для корпоративной электронной почты и совместной работы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
2. Загрузчик (GRUB, LILO): выбирает и загружает ядро ОС.
3. Ядро Linux: инициализирует устройства, монтирует корневую файловую систему.
4. Init/Systemd: запускает пользовательские процессы и сервисы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5
Права доступа по умолчанию зависят от базовых прав доступа и значения
umask
. Базовые права доступа — это значения, которые система использует для определения разрешений перед применением маски umask
.Это означает, что по умолчанию все пользователи могут читать и записывать в файл.
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.
Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение
umask
указывается в восьмеричной системе счисления. Базовые права доступа: 666
Значение
umask
: 022Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)
Базовые права доступа: 777
Значение
umask
: 022Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)
umask 0022
touch myfile
ls -l myfile
Вывод
Права доступа: 644 (rw-r--r--)
-rw-r--r-- 1 user user 0 Jul 26 12:00 myfile
umask 0027
mkdir mydir
ls -ld mydir
Вывод
Права доступа: 750 (rwxr-x---)
drwxr-x--- 2 user user 4096 Jul 26 12:00 mydir
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
#!/bin/bash
umask 027
touch file1
mkdir dir1
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
1. CI/CD: автоматизация сборки, тестирования, деплоя.
2. Тесты: юнит, интеграционные и end-to-end тесты.
3. Мониторинг: проверка производительности и логов после релиза.
4. Масштабируемость: возможность быстрого изменения и расширения инфраструктуры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6🤔3
Если вы удалили файлы, но место на диске не освободилось, это может происходить по нескольким причинам.
Если файл удален, но он открыт каким-либо процессом, его содержимое остается в памяти или файловой системе до завершения работы этого процесса. Это называется "удаление с дескриптором".
Используйте команду
lsof
(list open files), чтобы найти процессы, удерживающие файлlsof | grep deleted
Перезапустите процесс или завершите его с помощью
kill
:kill -9 <PID>
Например:
- Файл был удален внутри Docker-контейнера, но место занято в образе.
- Файл находился на смонтированном диске, и удаление произошло в другом контексте.
Убедитесь, что вы работаете в правильной файловой системе:
df -h
Убедитесь, что удаление происходит в нужной директории или файловой системе.
Если файл имеет несколько жестких ссылок, удаление одного из них не освободит место до тех пор, пока не удалены все ссылки.
Используйте команду
find
, чтобы найти оставшиеся ссылки:find / -samefile <имя_файла>
Удалите все ссылки на файл.
Если используется файловая система с ограничением (например, квоты пользователей или групп), возможно, квота пользователя исчерпана, и это мешает очистке.
Проверьте квоты:
quota -u <username>
Убедитесь, что квоты настроены правильно, или освободите больше места.
Иногда удаленные файлы остаются в виде кэша, временных данных или не удаляются из корзины.
Очистите кэш или проверьте корзину. Например, для очистки временных файлов
sudo du -sh /tmp
sudo rm -rf /tmp/*
Удалите временные файлы, очистите кэш:
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
1. Используйте команду kubectl describe node <node-name> для просмотра доступной памяти и CPU.
2. Ресурсы также можно получить через метрики (kubectl top nodes).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
После создания нового репозитория, будь то локальный или удаленный, необходимо выполнить несколько шагов для начала полноценной работы с ним. Эти шаги включают инициализацию репозитория, настройку удаленного репозитория, добавление файлов, коммит и настройку синхронизации с удаленным репозиторием.
Перейдите на GitHub и войдите в свой аккаунт. Нажмите на кнопку "New" для создания нового репозитория. Введите имя репозитория, описание (опционально), выберите публичный или приватный доступ, инициализируйте с README (если нужно). Нажмите "Create repository".
Если репозиторий уже существует на GitHub
git clone https://github.com/yourusername/your-repository.git
cd your-repository
Если вы создаете новый локальный репозиторий
mkdir your-repository
cd your-repository
git init
Создайте или добавьте файлы
echo "# Your Repository" > README.md
Добавьте файлы в индекс
git add README.md
Сделайте первый коммит
git commit -m "Initial commit"
Если вы инициализировали локальный репозиторий, вам нужно настроить удаленный репозиторий.
git remote add origin https://github.com/yourusername/your-repository.git
Отправьте ваши изменения в удаленный репозиторий
git push -u origin master
Для разработки новых функций или исправлений багов рекомендуется создавать отдельные ветки
git checkout -b feature-branch
После завершения работы в ветке создайте Pull Request на GitHub для обзора и слияния.
Добавьте файл
.gitignore
для исключения ненужных файлов из коммитов. echo "node_modules/" > .gitignore
git add .gitignore
git commit -m "Add .gitignore"
Подключите сервисы Continuous Integration/Continuous Deployment, такие как GitHub Actions, Travis CI или Jenkins, для автоматизации тестирования и развертывания.
# Пример файла .github/workflows/ci.yml для GitHub Actions
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
2. KVM: гипервизор, обеспечивающий изоляцию на уровне аппаратного обеспечения через полные виртуальные машины.
3. Docker быстрее, а KVM обеспечивает более строгую изоляцию и подходит для более сложных сред.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6❤1👾1
Развертывание приложения на Kubernetes включает несколько шагов, таких как подготовка конфигурационных файлов, настройка окружения и выполнение команд для развертывания.
Первый шаг — подготовить Docker-образ приложения. Пример Dockerfile
# Используем официальный образ Python
FROM python:3.8-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем все файлы в контейнер
COPY . /app
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Определяем команду запуска
CMD ["python", "app.py"]
Создание и загрузка Docker-образа в Docker Hub
docker build -t username/myapp:latest .
docker push username/myapp:latest
Для развертывания приложения на Kubernetes, необходимо создать манифесты для деплоя (Deployment), сервиса (Service) и других необходимых ресурсов. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: username/myapp:latest
ports:
- containerPort: 80
Service
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
Применение манифестов для создания ресурсов в кластере Kubernetes:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Проверка статуса развертывания и сервисов:
kubectl get deployments
kubectl get services
kubectl get pods
Для обеспечения высокой доступности и масштабируемости можно настроить горизонтальное авто-масштабирование:
kubectl autoscale deployment myapp-deployment --cpu-percent=50 --min=1 --max=10
Для обновления приложения необходимо изменить образ в деплойменте и применить изменения:
Обновление Docker-образа
docker build -t username/myapp:v2 .
docker push username/myapp:v2
Обновление манифеста Deployment
spec:
template:
spec:
containers:
- name: myapp
image: username/myapp:v2
Применение изменений
kubectl apply -f deployment.yaml
Пример
.gitlab-ci.yml
для автоматизации деплояstages:
- build
- push
- deploy
variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
build:
stage: build
script:
- docker build -t $DOCKER_IMAGE .
only:
- main
push:
stage: push
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker push $DOCKER_IMAGE
only:
- main
deploy:
stage: deploy
script:
- kubectl apply -f deployment.yaml
- kubectl apply -f service.yaml
only:
- main
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤1
1. Три мастера позволяют достичь кворума в распределённой системе хранения данных (etcd).
2. Это защищает от сбоев одного или двух мастеров и гарантирует стабильность кластера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8
Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами.
sudo apt update
sudo apt install postfix
Отредактируйте
/etc/postfix/main.cf
myhostname = local.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination
sudo systemctl restart postfix
echo "Test email" | mail -s "Test Subject" user@example.com
Следуйте [документации](https://docs.mattermost.com/install/self-managed-install.html).
Создайте каналы и пользователей.
Используйте веб-хуки Mattermost для уведомлений.
Следуйте [документации](https://www.zabbix.com/download).
Настройте хосты, триггеры и действия.
Медиатипы: Настройте Email и SMS. Пользователи: Создайте пользователей и уведомления.
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar xvf prometheus-2.26.0.linux-amd64.tar.gz
cd prometheus-2.26.0.linux-amd64
./prometheus --config.file=prometheus.yml
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf alertmanager-0.21.0.linux-amd64.tar.gz
cd alertmanager-0.21.0.linux-amd64
./alertmanager --config.file=alertmanager.yml
groups:
- name: example-alerts
rules:
- alert: HighCPUUsage
expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes"
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@local.example.com'
route:
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@local.example.com'
send_resolved: true
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
2. CRI (Container Runtime Interface): интерфейс взаимодействия Kubernetes с контейнерными движками.
3. CNI (Container Network Interface): стандарты сетевой интеграции контейнеров.
4. CSI (Container Storage Interface): интерфейс для подключения различных систем хранения данных.
5. SMI (Service Mesh Interface): стандарт взаимодействия между сервисами в сетях.
6. CPI (Cloud Provider Interface): взаимодействие Kubernetes с облачными провайдерами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤1