2. 3xx (Перенаправление): клиенту нужно выполнить дополнительные действия (например, 301 Moved Permanently).
3. 4xx (Ошибка клиента): ошибка в запросе клиента (например, 404 Not Found).
4. 5xx (Ошибка сервера): сервер не смог обработать запрос (например, 500 Internal Server Error).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Маска подсети (subnet mask) — это число, которое определяет, какая часть IP-адреса относится к сети, а какая — к хостам внутри этой сети.
Пример:
IP-адрес: 192.168.1.10
Маска подсети: 255.255.255.0
В двоичном виде
IP: 11000000.10101000.00000001.00001010 (192.168.1.10)
Маска: 11111111.11111111.11111111.00000000 (255.255.255.0)
Разделять сеть на логические сегменты (разделение на подсети). Определять, находятся ли два устройства в одной сети или им нужен маршрутизатор. Экономить IP-адреса, разбивая сеть на нужное количество хостов.
Если два устройства в одной подсети, они могут общаться напрямую. Если в разных — нужен маршрутизатор.
Вместо маски 255.255.255.0 можно записать /24.
Пример: 192.168.1.10/24 (означает, что первые 24 бита — это сеть).
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Кроме URL и тела (body), у HTTP-запроса есть:
- заголовки (headers) — содержат метаинформацию (тип данных, авторизация, длина и т.д.);
- метод (method) — GET, POST и т.д.;
- параметры запроса (query parameters);
- статус ответа (в ответе сервера).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💊2
Это виртуальная файловая система, предоставляющая доступ к информации о процессах и системе в реальном времени. Она не занимает место на диске, так как данные в ней формируются ядром Linux динамически. Эта файловая система называется procfs (процессная файловая система).
Предоставляет информацию о запущенных процессах, ресурсах системы и конфигурации ядра. Позволяет взаимодействовать с ядром, изменять параметры системы и получать данные о состоянии процессов.
Каждый процесс в системе имеет каталог в
/proc
, название которого соответствует его PID (Process ID). В этих каталогах содержится информация о конкретном процессе:/proc/[PID]/cmdline
: Команда, запустившая процесс./proc/[PID]/cwd
: Символическая ссылка на текущую рабочую директорию процесса./proc/[PID]/exe
: Символическая ссылка на исполняемый файл процесса./proc/[PID]/fd
: Директория с открытыми файловыми дескрипторами./proc/[PID]/status
: Детализированная информация о состоянии процесса (UID, GID, память и т.д.)./proc/cpuinfo
Информация о процессоре (модель, частота, количество ядер).
cat /proc/cpuinfo
/proc/meminfo
Информация о памяти (доступная память, кэш, использованная память).
cat /proc/meminfo
/proc/diskstats
: Статистика ввода-вывода для дисков./proc/uptime
: Время работы системы с момента загрузки./proc/loadavg
: Средняя нагрузка на систему за последние 1, 5 и 15 минут./proc/sys
: Содержит настраиваемые параметры ядра. Например, можно изменить значение максимального количества открытых файлов:echo 100000 > /proc/sys/fs/file-max
Некоторые популярные настройки
/proc/sys/net/ipv4/ip_forward
: Управление пересылкой IPv4-пакетов./proc/sys/kernel/pid_max
: Максимальный PID, который может быть назначен процессу./proc/net
:Информация о сетевых соединениях и интерфейсах.
Примеры:
/proc/net/dev
: Статистика сетевых интерфейсов./proc/net/tcp
: Состояние TCP-соединений./proc/devices
: Список всех зарегистрированных устройств (символьных и блочных)./proc/partitions
: Информация о разделах жесткого диска.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
UNIQUE:
- Применяется для гарантии уникальности значений в столбце или группе столбцов.
- Можно использовать одновременно с NULL, но NULL не считается повтором (в большинстве СУБД).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊4🔥2
В Python лямбда-выражение — это анонимная (безымянная) функция, создаваемая с помощью ключевого слова
lambda
. Синтаксис
lambda аргументы: выражение
Простая лямбда-функция
add = lambda x, y: x + y
print(add(3, 5)) # Выведет: 8
Эквивалентно обычной функции
def add(x, y):
return x + y
Лямбда внутри
map()
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, nums))
print(squares) # [1, 4, 9, 16]
Лямбда внутри
sorted()
words = ["apple", "banana", "kiwi"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words) # ['kiwi', 'apple', 'banana']
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Наиболее распространённый способ — использовать ingressClassName в ресурсе Ingress. Это современный подход с Kubernetes 1.19+. Указание через аннотации контроллера (
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
Это источник данных, с которым Grafana может взаимодействовать для построения графиков, панелей мониторинга (dashboards) и выполнения запросов. Data Source определяет, как Grafana подключается к внешним системам мониторинга, базам данных или API для получения метрик, логов или другой информации.
Grafana поддерживает множество типов источников данных, включая:
Системы мониторинга:
Prometheus
Zabbix
InfluxDB
Graphite
Лог-агрегаторы:
Loki
Elasticsearch
Splunk
Облачные сервисы:
AWS CloudWatch
Google Cloud Monitoring
Azure Monitor
Реляционные базы данных:
MySQL
PostgreSQL
API или внешние плагины:
JSON API
OpenTelemetry
Подключение: Определяет параметры для соединения с внешним хранилищем данных, такие как URL, токены аутентификации, логин/пароль. Выполнение запросов: Обеспечивает интерфейс для написания запросов к данным через встроенный редактор запросов Grafana. Форматирование данных: Конвертирует данные из формата, предоставляемого источником, в формат, понятный Grafana.
Добавление источника данных выполняется через веб-интерфейс Grafana:
Зайдите в Settings → Data Sources.
Нажмите кнопку Add data source.
Выберите нужный тип источника (например, Prometheus).
Настройте параметры подключения (например, URL, токен, порт).
Нажмите Save & Test, чтобы проверить соединение.
Для Prometheus:
rate(http_requests_total[5m])
Для MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;
Вы можете устанавливать плагины для подключения к нестандартным источникам данных. Grafana Marketplace предлагает плагины для расширения функциональности.
Один дашборд может использовать несколько источников данных, что позволяет объединять данные из разных систем.
Источники данных могут использовать глобальные параметры, такие как время (
$__timeFilter
), для унификации запросов.Поддержка различных методов аутентификации: токены, ключи API, OAuth.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍1
Донастройка контейнера может понадобиться, если:
Нужно изменить файлы конфигурации.
Установить дополнительные пакеты.
Задать переменные среды.
Подключить тома или сети.
Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD.
Если контейнер нужно модифицировать перед запуском, создаем свой
Dockerfile
на основе существующего образа. FROM nginx:latest
COPY my-nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
Собираем новый образ
docker build -t my-nginx .
docker run -d -p 80:80 my-nginx
Можно задать окружение, тома, команды.
version: '3'
services:
db:
image: postgres:15
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- ./custom-postgres.conf:/etc/postgresql/postgresql.conf
command: postgres -c config_file=/etc/postgresql/postgresql.conf
Запуск
docker-compose up -d
Если контейнер уже работает, можно внести изменения прямо в него.
docker exec -it my-container bash
apt update && apt install -y vim
Если нужно изменять файлы без пересборки образа, подключаем тома.
docker run -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx
Можно задать скрипт донастройки, который выполнится при старте контейнера.
FROM postgres:15
COPY setup.sh /docker-entrypoint-initdb.d/setup.sh
RUN chmod +x /docker-entrypoint-initdb.d/setup.sh
В
setup.sh
: #!/bin/bash
psql -U postgres -d mydb -c "CREATE TABLE test (id SERIAL PRIMARY KEY);"
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Worker-нода содержит:
- kubelet — агент, управляющий подами.
- kube-proxy — сетевое взаимодействие и балансировка.
- container runtime — Docker, containerd, CRI-O.
- Мгновенный доступ к данным.
- Уменьшение нагрузки на RDS.
- TTL для автоочистки.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
В Jenkins CI (Continuous Integration) и CD (Continuous Delivery/Deployment) можно разделять на разные стадии (stages) или отдельные пайплайны. Это повышает гибкость, упрощает отладку и делает процесс масштабируемым.
Можно использовать разные стадии (stages) в
Jenkinsfile
: Пример:
pipeline {
agent any
stages {
stage('CI: Build & Test') {
steps {
echo "📦 Сборка и тестирование кода"
sh 'mvn clean package' // Сборка
sh 'mvn test' // Юнит-тесты
}
}
stage('CI: Code Analysis') {
steps {
echo "🧐 Анализ кода (SonarQube)"
sh 'sonar-scanner'
}
}
stage('CD: Staging Deployment') {
steps {
echo "🚀 Деплой на стейджинг"
sh 'kubectl apply -f k8s/staging.yaml'
}
}
stage('CD: Production Deployment') {
when {
branch 'main' // Только для main-ветки
}
steps {
echo "🔥 Деплой в прод"
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}
Можно разделить CI и CD на разные пайплайны, используя
Jenkins Multibranch Pipeline
. CI-пайплайн (
Jenkinsfile.ci
) pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar'
build job: 'CD-Pipeline', wait: false // Запуск CD после успешного CI
}
}
}
CD-пайплайн (
Jenkinsfile.cd
) pipeline {
agent any
stages {
stage('Deploy to Staging') {
steps {
sh 'kubectl apply -f k8s/staging.yaml'
}
}
stage('Manual Approval') {
steps {
input message: "Deploy to Production?"
}
}
stage('Deploy to Production') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}
Если много пайплайнов, лучше вынести CI/CD-логику в общую библиотеку (
vars/ci.groovy
, vars/cd.groovy
). Пример CI (
vars/ci.groovy
) def call() {
pipeline {
agent any
stages {
stage('Build & Test') {
steps {
sh 'mvn clean package && mvn test'
}
}
}
}
}
Пример CD (
vars/cd.groovy
) def call() {
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}
}
Jenkinsfile с использованием библиотек
@Library('my-shared-library') _
ci() // Запуск CI
cd() // Запуск CD
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Необходимо включить автозапуск системного сервиса. Это делается через системный менеджер, применимый в современных дистрибутивах RedHat (например, systemd).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊11
Это платформа для автоматизации развертывания, масштабирования и управления приложениями в контейнерах. Контейнеры позволяют изолировать приложения и их зависимости, обеспечивая легкую переносимость и консистентность окружения. Основные принципы работы Docker включают в себя контейнеризацию, использование образов, контейнеров, оркестрацию и сетевую инфраструктуру.
Контейнеризация позволяет запускать приложения и их зависимости в изолированных окружениях. Контейнеры предоставляют легкие и эффективные среды, которые включают все необходимое для запуска приложений.
Контейнеры: Легковесные, изолированные окружения, которые работают поверх ядра хостовой операционной системы.
Namespace: Механизм ядра Linux, обеспечивающий изоляцию процессов, сети, PID, пользовательских идентификаторов и монтирования файловых систем.
Cgroups: Контрольные группы в Linux, которые ограничивают и отслеживают использование ресурсов контейнерами, включая процессорное время, память и I/O.
Образы Docker являются шаблонами для создания контейнеров. Образ включает в себя все необходимые компоненты, такие как код приложения, библиотеки, зависимости и конфигурационные файлы.
Dockerfile: Скрипт, содержащий инструкции по созданию образа. Используется для автоматизации создания образов.
Слойность: Каждый образ состоит из нескольких слоев, которые кэшируются и могут использоваться повторно, что ускоряет процесс сборки и уменьшает использование ресурсов.
Docker обеспечивает изоляцию приложений, что позволяет запускать несколько контейнеров на одном хосте без взаимного влияния.
Изоляция процессов: Каждый контейнер имеет свой собственный процессорный контекст, что исключает конфликты между приложениями.
Изоляция файловой системы: Контейнеры имеют свои собственные файловые системы, изолированные от файловой системы хостовой операционной системы.
Безопасность: Docker использует механизмы, такие как AppArmor, SELinux и seccomp, для обеспечения безопасности контейнеров.
Docker предоставляет гибкие возможности управления сетями для контейнеров, включая создание изолированных сетей и подключение контейнеров к различным сетям.
Bridge Network: Создает изолированную сеть для контейнеров на одном хосте.
Host Network: Контейнер использует сетевые интерфейсы хостовой операционной системы.
Overlay Network: Позволяет контейнерам на разных хостах взаимодействовать друг с другом.
Macvlan Network: Контейнеры получают собственные MAC-адреса и ведут себя как физические устройства в сети.
Docker поддерживает различные механизмы хранения данных для обеспечения сохранности и доступности данных контейнеров.
Volumes: Независимые от контейнеров хранилища данных, которые могут быть подключены к одному или нескольким контейнерам.
Bind Mounts: Позволяют монтировать директории хостовой файловой системы в контейнеры.
Tmpfs: Использует память хоста для хранения данных контейнера, что полезно для временных данных.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Планировщик (scheduler) — это часть ядра, отвечающая за распределение процессорного времени между задачами (процессами и потоками). Он выбирает, какой процесс будет выполняться в данный момент времени, исходя из приоритетов, политики и состояния процесса. Основные задачи — обеспечить справедливость, минимальную задержку и высокую производительность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3
Если у вас 1000 разработчиков и 2000 сервисов, то без автоматизации не обойтись.
Организация:
Каждое приложение → отдельный Pod.
Namespaces → для команд и сред (dev, stage, prod).
Helm → для удобного управления.
Манифест деплоя
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-registry.com/my-app:v1
Инструменты: GitLab CI/CD, ArgoCD
stages:
- build
- deploy
build:
script:
- docker build -t my-registry.com/my-app:$CI_COMMIT_SHA .
- docker push my-registry.com/my-app:$CI_COMMIT_SHA
deploy:
script:
- kubectl set image deployment/my-app my-app=my-registry.com/my-app:$CI_COMMIT_SHA
Prometheus + Grafana → метрики, алерты
Loki / ELK (Elasticsearch + Kibana) → логи
Запрос ошибок API:
rate(http_requests_total{status="500"}[5m])
Горизонтальный автоскейлинг (
HPA
) apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70
Разделение нагрузки между версиями:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
spec:
hosts:
- my-app.example.com
http:
- route:
- destination:
host: my-app
subset: v1
weight: 80
- destination:
host: my-app
subset: v2
weight: 20
Ограничение доступа разработчиков:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dev-access
subjects:
- kind: User
name: dev-user
roleRef:
kind: Role
name: read-only
apiGroup: rbac.authorization.k8s.io
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Все эти технологии используются для перехвата и обработки сетевого трафика:
- AF_PACKET – низкоуровневый доступ к пакетам в пространстве ядра, позволяет захватывать пакеты до их обработки IP-стеком.
- PCAP (libpcap/tcpdump) – библиотека для пользовательского пространства, позволяет фильтровать и анализировать пакеты.
- RAW socket – создаёт сокеты для работы с IP- и Ethernet-пакетами напрямую, нужен root-доступ.
- PF_RING – ускоренный механизм захвата пакетов, оптимизирован для высоких нагрузок.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1💊1
Императивный подход — это стиль программирования, где мы пошагово указываем компьютеру, что делать и как это делать. Программист описывает процесс решения задачи. Код выполняется шаг за шагом, изменяя состояние программы.
numbers = [1, 2, 3, 4, 5]
squared = []
for num in numbers:
squared.append(num ** 2) # Явно указываем, что делать на каждом шаге
print(squared) # [1, 4, 9, 16, 25]
Языки программирования: C, Java, Python (может быть и императивным, и декларативным).
Операционные системы (где важно управлять состоянием).
Автоматизация в DevOps (например, скрипты Bash).
#!/bin/bash
mkdir /backup
cp /var/log/syslog /backup/
echo "Backup создан"
Пример в DevOps (Terraform)
Императивный (Ansible, Bash)
apt update
apt install nginx
Шаги установки Nginx описаны вручную.
Декларативный (Terraform, Kubernetes)
resource "aws_instance" "web" {
ami = "ami-123456"
instance_type = "t2.micro"
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3💊2👍1
Terraform используется для инфраструктуры как кода. Он позволяет:
- описывать ресурсы облака декларативно;
- управлять зависимостями;
- автоматически создавать, обновлять и удалять инфраструктуру;
- сохранять состояние системы в одном месте.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Сейчас стандартом является использование
ingressClassName
, а аннотации kubernetes.io/ingress.class
считаются устаревшими (deprecated). Современный, удобный, поддерживается официально
Работает с
IngressClass
ресурсами Можно управлять через CRD (
IngressClass
) Все еще работает, но устарела
Нельзя контролировать
IngressClass
через CRD IngressClass
(если нужно) yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx
ingressClassName
в Ingress
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Раньше использовали аннотацию
kubernetes.io/ingress.class
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1