Применяется команда, которая показывает маршрут пакетов через промежуточные узлы от источника до цели. Это помогает отследить, где возникает задержка или потеря связи.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊39🤔11🔥2
В Python типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменить их содержимое после создания.
Это те, содержимое которых можно менять после создания объекта, не создавая новый объект.
Списки (
list
)my_list = [1, 2, 3]
my_list.append(4) # Добавляем элемент
print(my_list) # [1, 2, 3, 4]
Словари (
dict
)my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3 # Добавляем ключ-значение
print(my_dict) # {'a': 1, 'b': 2, 'c': 3}
Множества (
set
)my_set = {1, 2, 3}
my_set.add(4) # Добавляем элемент
print(my_set) # {1, 2, 3, 4}
Неизменяемые типы данных нельзя изменить после их создания. Любая операция, изменяющая объект, приводит к созданию нового объекта.
Кортежи (
tuple
)my_tuple = (1, 2, 3)
# my_tuple[0] = 0 # Ошибка: TypeError
print(my_tuple) # (1, 2, 3)
Строки (
str
)my_string = "Hello"
# my_string[0] = "h" # Ошибка: TypeError
new_string = my_string.replace("H", "h")
print(new_string) # "hello"
Числа (
int
, float
, complex
)x = 42
x += 1 # Создается новый объект
print(x) # 43
Неизменяемые множества (
frozenset
)my_frozenset = frozenset([1, 2, 3])
# my_frozenset.add(4) # Ошибка: AttributeError
print(my_frozenset) # frozenset({1, 2, 3})
Неизменяемые объекты могут использоваться многократно без создания новых копий.
Неизменяемые объекты защищены от изменений, что важно для многопоточных программ.
Неизменяемость — основа для предсказуемого поведения кода.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊3
Переменные из playbook (определенные в vars) имеют более высокий приоритет, чем переменные из defaults внутри роли. defaults используются для значений по умолчанию, которые могут быть переопределены в других местах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Если под (Pod) в Kubernetes не пройдет readiness-пробу (readiness probe), он будет считаться не готовым для обработки запросов.
Readiness-проба используется для определения того, готов ли контейнер в поде обрабатывать входящие запросы. Если проба не проходит, Kubernetes исключает этот под из списка доступных для обслуживания запросов (например, через Service).
Kubernetes автоматически исключает под из группы Endpoints для соответствующего сервиса. Другие компоненты системы, обращающиеся к сервису, не будут направлять запросы в этот под.
Под не будет удален или перезапущен. Kubernetes продолжит проверять его состояние readiness-пробой до тех пор, пока он не станет готовым.
Если readiness-проба не проходит, это не влияет на liveness-пробу. Под будет работать, пока не нарушена его "жизнеспособность".
Если под зависнет или будет не в состоянии обработать запросы, но при этом не нарушит liveness-пробу, он останется запущенным, но не будет получать трафик.
Пример readiness-пробы
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: my-container
image: nginx
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
После создания пода Kubernetes ждет
initialDelaySeconds
(5 секунд) перед выполнением первой проверки. Если /
не отвечает на HTTP-запрос, под считается не готовым.Kubernetes исключает под из группы доступных эндпоинтов. Под остается запущенным, и проба выполняется каждые
periodSeconds
(10 секунд), пока под не станет готовым.Если под — единственный в сервисе: Запросы к сервису вернут ошибку (например, 503 Service Unavailable), так как ни один под не готов.
Если подов несколько: Трафик перенаправляется на другие поды, готовые обрабатывать запросы.
Под начинает обрабатывать трафик только после полной инициализации.
В случае проблем с подом система перенаправляет запросы на другие экземпляры.
Во время обновления подов через Deployment новые поды добавляются в пул доступных только после успешного прохождения readiness-проб.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Для вставки данных используется оператор INSERT в виде INSERT INTO table_name (column1, column2) VALUES (value1, value2);. Для выборки данных используется SELECT, например: SELECT column1, column2 FROM table_name WHERE condition;. Можно добавлять сортировку через ORDER BY, фильтры через WHERE, объединения через JOIN, и группировку с GROUP BY.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6
Firewall (брандмауэр) — это общее понятие, означающее систему фильтрации сетевого трафика.
iptables — это конкретный инструмент (утилита) для управления брандмауэром в Linux.
Firewall (брандмауэр) — это система фильтрации трафика, которая пропускает или блокирует пакеты на основе правил.
Аппаратным (Cisco ASA, FortiGate, Palo Alto).
Программным (UFW, firewalld, iptables).
Облачным (AWS Security Groups, Azure Firewall).
iptables
— это утилита для настройки брандмауэра в Linux. Ключевая особенность:
iptables
работает на основе **таблиц и цепочек правил. Пример команды iptables
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Разрешить SSH (22 порт)
iptables -A INPUT -p tcp --dport 80 -j DROP # Заблокировать HTTP (80 порт)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Горизонтальное масштабирование означает добавление новых копий сервисов, тогда как вертикальное — это увеличение объёма ресурсов у уже существующего инстанса. Первый тип обеспечивает отказоустойчивость, второй ограничен ресурсами машины.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Развертывание приложения на 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
👍12
Роли в Ansible позволяют:
- Структурировать код по компонентам (nginx, db, app)
- Переиспользовать код между проектами
- Хранить переменные, задачи, шаблоны отдельно
- Упрощают поддержку и читаемость плейбуков
Каждая роль — это изолированный модуль, что делает инфраструктуру более модульной и расширяемой.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить.
Сначала смотрим, работает ли под вообще
kubectl get pods
Если под запустился, но работает странно, смотрим логи:
kubectl logs pod-name
Если в поде несколько контейнеров:
kubectl logs pod-name -c container-name
Если под перезапускается, а нам нужны старые логи:
kubectl logs pod-name --previous
Смотрим подробную информацию о поде:
kubectl describe pod pod-name
Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы:
kubectl exec -it pod-name -- /bin/sh
Если в контейнере есть только
bash
: kubectl exec -it pod-name -- /bin/bash
Полезные команды внутри контейнера:
ps aux # Смотрим запущенные процессы
netstat -tulnp # Проверяем открытые порты
env # Проверяем переменные окружения
cat /etc/resolv.conf # Проверяем DNS
Если под ведёт себя странно, можно посмотреть его полное описание:
kubectl get pod pod-name -o yaml
Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (
node
): kubectl describe node node-name
Если проблема с ресурсами, будет что-то вроде:
Warning FailedScheduling insufficient memory
Если под не может достучаться до сервиса, тестируем сеть:
kubectl exec -it pod-name -- nslookup service-name
kubectl exec -it pod-name -- ping 8.8.8.8
kubectl exec -it pod-name -- curl http://service-name:8080
Если под не стартует, можно запустить дебажный контейнер
kubectl debug pod-name -it --image=busybox
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Unix — это семейство операционных систем, разработанное как многозадачная, многопользовательская система. Он стал основой для многих других ОС (Linux, BSD, macOS) и задал стандарты в системной архитектуре и командной строке.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊9👍2
Это три модели облачных вычислений, которые различаются уровнем предоставляемых услуг и степенью ответственности между пользователем и провайдером.
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
👍2💊1
- Вынести кэш в Redis/Memcached;
- Реплицировать базу и направить SELECT-запросы на слейвы;
- Использовать шардинг;
- Оптимизировать запросы и индексы;
- Перевести тяжёлые отчёты в async-процессы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6💊2
Чтобы мониторить Docker-контейнеры, нужно отслеживать ключевые метрики, которые помогут определить нагрузку, утечки памяти, падения контейнеров и проблемы с сетью.
CPU (Нагрузка на процессор)
Memory (Использование памяти)
Network (Сетевой трафик)
Disk I/O (Диск и файловая система)
Container Lifecycle (Состояние контейнеров)
% использования CPU контейнером
% CPU в системе и пользователе
Throttling (ограничение CPU)
docker stats --format "table {{.Name}}\t{{.CPUPerc}}"
Метрика в Prometheus (cadvisor)
rate(container_cpu_usage_seconds_total{name="my-container"}[5m]) * 100
RSS (реальная память, используемая процессами)
Cache (используемая кэшированная память)
OOM (Out of Memory kills)
docker stats --format "table {{.Name}}\t{{.MemUsage}}"
Метрика в Prometheus
container_memory_usage_bytes{name="my-container"}
Rx/Tx Bytes (входящий и исходящий трафик)
Количество соединений
docker stats --format "table {{.Name}}\t{{.NetIO}}"
Метрика в Prometheus
rate(container_network_transmit_bytes_total{name="my-container"}[5m])
Количество операций чтения/записи
Объем данных, записанных/прочитанных контейнером
docker stats --format "table {{.Name}}\t{{.BlockIO}}"
Метрика в Prometheus
rate(container_fs_writes_bytes_total{name="my-container"}[5m])
Перезапуски контейнера (Restart Count)
Состояние контейнера (Running, Exited, Dead)
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Restarts}}"
Метрика в Prometheus
container_start_time_seconds{name="my-container"}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
- total — общее количество памяти;
- used — занято (включая кеши и буферы);
- free — физически свободно;
- shared — используется совместно;
- buff/cache — используется системой под буферы и кэш;
- available — сколько реально доступно для новых программ без вытеснения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Коды ответа (HTTP status codes) от веб-сервера представляют собой числовые коды, которые отправляются клиенту (обычно веб-браузеру) в ответ на его запрос. Эти коды помогают клиенту понять, что произошло с его запросом: был ли он успешен, произошла ли ошибка, требуется ли дополнительное действие и т.д.
Запрос принят, продолжается обработка.
100 Continue: Сервер получил начальную часть запроса, и клиент должен продолжать.
101 Switching Protocols: Сервер принимает запрос на изменение протокола.
Запрос успешно обработан.
200 OK: Запрос успешно обработан, и сервер возвращает запрошенные данные.
201 Created: Запрос успешно выполнен, и в результате создан новый ресурс.
202 Accepted: Запрос принят для обработки, но обработка еще не завершена.
204 No Content: Запрос успешно выполнен, но сервер не возвращает никакого содержимого.
Для завершения обработки запроса требуется дальнейшее действие со стороны клиента.
301 Moved Permanently: Запрашиваемый ресурс был перемещен на новый постоянный URL.
302 Found: Запрашиваемый ресурс временно доступен по другому URL.
304 Not Modified: Запрашиваемый ресурс не изменился со времени последнего доступа (кэширование).
307 Temporary Redirect: Запрашиваемый ресурс временно доступен по другому URL. Клиент должен использовать исходный метод для нового запроса.
Ошибка в запросе клиента.
400 Bad Request: Сервер не может обработать запрос из-за неверного синтаксиса.
401 Unauthorized: Запрос требует аутентификации.
403 Forbidden: Сервер понял запрос, но отказывается его выполнять.
404 Not Found: Запрашиваемый ресурс не найден на сервере.
405 Method Not Allowed: Метод, указанный в запросе, не разрешен для запрашиваемого ресурса.
409 Conflict: Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса.
Ошибка на стороне сервера при попытке обработки запроса.
500 Internal Server Error: Общая ошибка сервера. Сервер не может выполнить запрос.
501 Not Implemented: Сервер не поддерживает функциональность, необходимую для выполнения запроса.
502 Bad Gateway: Сервер, действуя как шлюз или прокси, получил неверный ответ от вышестоящего сервера.
503 Service Unavailable: Сервер временно недоступен, обычно из-за перегрузки или технического обслуживания.
504 Gateway Timeout: Сервер, действуя как шлюз или прокси, не дождался ответа от вышестоящего сервера.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Для определения размера узла (node) в кластере Kubernetes необходимо собрать информацию о различных ресурсах, таких как количество процессоров (CPU), объем оперативной памяти (RAM) и объем дискового пространства, доступные на узле. Эти данные можно получить с помощью команды
kubectl
.Для начала необходимо получить список узлов в кластере:
kubectl get nodes
Для каждого узла из списка можно получить подробную информацию о ресурсах с помощью команды
kubectl describe node <node-name>
:kubectl describe node <node-name>
Чтобы получить информацию о ресурсах узлов в удобном для обработки формате (JSON или YAML), можно использовать команду
kubectl get node <node-name> -o json
или kubectl get node <node-name> -o yaml
:kubectl get node <node-name> -o json
Пример вывода команды
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "node1"
},
"status": {
"capacity": {
"cpu": "4",
"memory": "16384000Ki",
"ephemeral-storage": "100Gi"
},
"allocatable": {
"cpu": "4",
"memory": "16334000Ki",
"ephemeral-storage": "98Gi"
}
}
}
- CPU: Количество процессоров.
- Memory: Объем оперативной памяти (в Ki, где 1 Ki = 1024 байт).
- Ephemeral Storage: Объем временного дискового пространства.
Допустим, узел имеет следующие ресурсы:
- CPU: 4
- Memory: 16334000Ki (примерно 15.58 GiB)
- Ephemeral Storage: 98Gi
Память в Kubernetes часто указывается в КиБ (Kibibytes). Для конвертации в гигабайты (GiB) используется следующая формула:
\text{Memory (GiB)} = \frac{\text{Memory (KiB)}}{1024 \times 1024}
Пример:
\text{Memory (GiB)} = \frac{16334000}{1024 \times 1024} \approx 15.58
В результате, размер узла можно представить как:
CPU: 4
Memory: 15.58 GiB
Ephemeral Storage: 98 GiB
Если необходимо собрать и обработать данные для всех узлов в кластере, можно использовать скрипт. Например, на bash с использованием
jq
для обработки JSON:#!/bin/bash
nodes=$(kubectl get nodes -o json | jq -r '.items[].metadata.name')
for node in $nodes; do
echo "Node: $node"
kubectl get node $node -o json | jq '.status.capacity, .status.allocatable'
echo ""
done
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊2
Нет, не рекомендуется. terraform.tfstate не должен храниться в Git или системах контроля версий, потому что:
- Он может содержать чувствительные данные (пароли, IP, токены).
- Возможны конфликты при одновременной работе.
- Отсутствует блокировка (lock) на время операций.
Рекомендуемые варианты:
- Terraform Cloud / Enterprise
- Remote backends: S3 с DynamoDB для блокировки, Azure Blob, GCS
- Использование lock-механизмов и шифрования
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Это архитектурная модель, разработанная Docker для управления сетями контейнеров. Она описывает, как создаются, управляются и взаимодействуют сетевые компоненты в Docker-контейнерах. CNM служит основой для организации сетей Docker и позволяет подключать контейнеры к различным сетевым средам, обеспечивая гибкость, масштабируемость и безопасность.
Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил.
Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network.
Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker:
bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте.
host: Контейнеры используют сетевой стек хоста без изоляции.
none: Сеть отключена; контейнер полностью изолирован.
overlay: Распределенная сеть для связи контейнеров на разных хостах.
macvlan: Контейнеры получают прямой доступ к физической сети.
Создается Sandbox, где настраиваются сетевые параметры контейнера.
Создается Endpoint, который подключает контейнер к выбранной сети.
Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами.
Легко подключать контейнеры к различным типам сетей.
Обеспечивает безопасность, изолируя сетевые пространства контейнеров.
CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel).
Позволяет контролировать настройки сети через команды Docker.
docker network create my_bridge
docker run --network my_bridge -d nginx
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM