Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3
Роль в Ansible состоит из набора папок и файлов, которые организуют задачи, переменные, файлы конфигурации, шаблоны и другие ресурсы, необходимые для выполнения конкретной роли.
Содержит переменные по умолчанию для роли.
# roles/role_name/defaults/main.yml
some_default_variable: "default_value"
Содержит статические файлы, которые можно копировать на удаленные хосты. Пример:
roles/role_name/files/myfile.conf
Содержит хендлеры, которые можно вызывать для выполнения действий, таких как перезапуск службы.
# roles/role_name/handlers/main.yml
- name: restart nginx
service:
name: nginx
state: restarted
Содержит метаинформацию о роли, такую как зависимости от других ролей.
# roles/role_name/meta/main.yml
dependencies:
- role: another_role
Содержит основной список задач, которые выполняются при использовании роли.
# roles/role_name/tasks/main.yml
- name: Install nginx
apt:
name: nginx
state: present
Содержит шаблоны Jinja2, которые могут быть использованы для создания конфигурационных файлов с динамическими значениями.
# roles/role_name/templates/nginx.conf.j2
server {
listen 80;
server_name {{ nginx_server_name }};
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
Содержит файлы для тестирования роли.
# roles/role_name/tests/test.yml
- hosts: localhost
roles:
- role_name
Содержит переменные с высоким приоритетом, используемые в роли.
# roles/role_name/vars/main.yml
some_variable: "value"
Документация роли, содержащая информацию о том, как использовать роль, примеры и описание переменных.
defaults/main.yml
# roles/nginx/defaults/main.yml
nginx_port: 80
vars/main.yml
# roles/nginx/vars/main.yml
nginx_user: "www-data"
tasks/main.yml
# roles/nginx/tasks/main.yml
- name: Install Nginx
apt:
name: nginx
state: present
- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
- name: Start Nginx
service:
name: nginx
state: started
enabled: true
templates/nginx.conf.j2
# roles/nginx/templates/nginx.conf.j2
user {{ nginx_user }};
worker_processes auto;
events {
worker_connections 1024;
}
http {
server {
listen {{ nginx_port }};
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥6
Это интерфейс между прикладными программами и ядром операционной системы. Они позволяют программам запрашивать услуги у операционной системы, такие как управление файлами, управление процессами, сетевое взаимодействие и управление памятью.
Программы могут получить доступ к аппаратным ресурсам, таким как диски, сеть, память и устройства ввода/вывода.
Обеспечивают изоляцию между прикладными программами и аппаратными ресурсами, что повышает безопасность и стабильность системы.
Позволяют создавать, завершать и управлять процессами.
open - Открытие файла.
read - Чтение данных из файла или устройства.
write - Запись данных в файл или устройство.
fork - Создание нового процесса.
exec - Выполнение программы.
kill - Отправка сигнала процессу.
wait - Ожидание завершения дочернего процесса.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("example.txt", O_RDONLY);
if (fd == -1) {
perror("open");
return 1;
}
char buffer[100];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead == -1) {
perror("read");
return 1;
}
write(STDOUT_FILENO, buffer, bytesRead);
close(fd);
return 0;
}
Это механизмы, используемые в Unix-подобных операционных системах для уведомления процессов о различных событиях. Сигналы могут быть отправлены процессом, ядром ОС или пользователем для уведомления о системных событиях или управления процессами.
Уведомляют процессы о событиях, таких как завершение программы, ошибки, прерывания и другие.
Позволяют приостанавливать, возобновлять или завершать процессы.
Предоставляют механизм для обработки исключительных ситуаций, таких как деление на ноль или доступ к недопустимым адресам памяти.
SIGINT (2) - Прерывание (обычно отправляется при нажатии Ctrl+C в терминале).
SIGTERM (15) - Завершение процесса.
SIGKILL (9) - Немедленное завершение процесса.
SIGSTOP (19)- Приостановка процесса.
SIGCONT (18) - Возобновление приостановленного процесса.
SIGSEGV (11) - Сегментационная ошибка (доступ к несуществующей памяти).
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void handle_signal(int signal) {
if (signal == SIGINT) {
printf("Caught SIGINT, exiting...\n");
_exit(0);
}
}
int main() {
signal(SIGINT, handle_signal);
while (1) {
printf("Running...\n");
sleep(1);
}
return 0;
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Контейнеры Docker предоставляют легковесную и изолированную среду для выполнения приложений. Контейнеры включают все необходимые для работы приложения зависимости и библиотеки, обеспечивая портативность и консистентность между различными средами (разработка, тестирование, производство).
Docker образы представляют собой неизменяемые шаблоны, содержащие все, что необходимо для запуска приложения: код, библиотеки, конфигурационные файлы, настройки среды и т.д. Образы можно легко версионировать, передавать и повторно использовать.
Docker использует регистры для хранения и распространения образов. Docker Hub — это публичный регистр, предоставляемый Docker, но также можно создавать собственные приватные регистры. Это упрощает совместное использование и управление образами.
Docker использует пространства имен (namespaces) и контрольные группы (cgroups) для изоляции процессов и управления ресурсами. Это обеспечивает контейнерам высокий уровень безопасности и предотвращает конфликт между приложениями, работающими в разных контейнерах.
В отличие от виртуальных машин, контейнеры не требуют отдельной операционной системы, что делает их намного более легковесными и быстрыми. Это позволяет запускать большее количество контейнеров на одном хосте с меньшими накладными расходами.
Docker предоставляет инструменты для управления контейнерами в масштабе, такие как Docker Swarm и интеграция с Kubernetes. Эти инструменты позволяют автоматизировать развертывание, управление, масштабирование и мониторинг контейнеров в распределенных системах.
Docker упрощает создание, тестирование и развертывание приложений через контейнеры. Это способствует интеграции и непрерывной доставке (CI/CD), так как контейнеры гарантируют, что приложение будет работать одинаково во всех средах.
# Используем базовый образ
FROM ubuntu:latest
# Устанавливаем необходимые пакеты
RUN apt-get update && apt-get install -y python3
# Копируем файлы приложения в контейнер
COPY . /app
# Устанавливаем рабочую директорию
WORKDIR /app
# Определяем команду для запуска приложения
CMD ["python3", "app.py"]
docker build -t my-python-app .
docker run -d --name python-app-container my-python-app
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🤔1
Docker: Создание и запуск контейнеров.
Kubernetes: Оркестрация и управление кластерами контейнеров.
Docker: Работает с контейнерами и образами.
Kubernetes: Работает с подами, службами и другими абстракциями для управления контейнерами.
Docker: Локальное масштабирование контейнеров.
Kubernetes: Автоматическое масштабирование и управление контейнерами на кластерах.
Docker: Не отслеживает состояние контейнеров.
Kubernetes: Автоматически восстанавливает и управляет состоянием контейнеров.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5
Для настройки авторизации в кластере Kubernetes можно использовать несколько механизмов, включая роль RBAC (Role-Based Access Control), аутентификацию с использованием токенов, сертификатов, и интеграцию с внешними системами аутентификации, такими как OpenID Connect (OIDC). Рассмотрим основные шаги для настройки RBAC и аутентификации с помощью токенов.
Роли определяют, какие действия разрешены над какими ресурсами в определенном namespace (Role) или во всем кластере (ClusterRole).
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: read-pods
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
Связывание роли привязывает роль к конкретному пользователю, группе или субъекту службы (ServiceAccount).
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-pods-binding
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: read-pods
apiGroup: rbac.authorization.k8s.io
Kubernetes поддерживает несколько методов аутентификации, включая использование токенов. Один из способов — использование токенов ServiceAccount.
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: default
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: read-pods
apiGroup: rbac.authorization.k8s.io
kubectl get secret $(kubectl get serviceaccount my-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
Для интеграции с внешними системами аутентификации, такими как OpenID Connect (OIDC), нужно настроить параметры API-сервера Kubernetes.
Настройка API-сервера
Добавьте параметры конфигурации OIDC в команду запуска kube-apiserver
--oidc-issuer-url=https://accounts.google.com \
--oidc-client-id=<client-id> \
--oidc-username-claim=email \
--oidc-groups-claim=groups
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤1
`Liveness Probe` проверяет, жив ли контейнер и работает ли он корректно, перезапуская его при необходимости.
`Readiness Probe` определяет, готов ли контейнер обрабатывать запросы, и управляет включением/выключением его из баланса нагрузки.
`Startup Probe` используется для проверки успешного старта контейнера перед выполнением других Probe.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥9
Argo CD — это инструмент для непрерывной доставки (CD) на основе GitOps, который автоматизирует развертывание приложений в Kubernetes. Он позволяет синхронизировать состояние кластера с состоянием в репозитории Git, что обеспечивает декларативное управление инфраструктурой и приложениями.
Первым шагом является установка Argo CD в ваш Kubernetes кластер.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
После установки необходимо настроить доступ к интерфейсу Argo CD. Вы можете использовать
kubectl port-forward
для локального доступа: kubectl port-forward svc/argocd-server -n argocd 8080:443
Получите начальный пароль для пользователя
admin
: kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
Создайте репозиторий в Git, который будет содержать манифесты Kubernetes для вашего приложения. Репозиторий должен содержать все необходимые файлы для развертывания приложения (например, файлы Deployment, Service, ConfigMap и т.д.).
Используйте веб-интерфейс или командную строку для создания нового приложения в Argo CD, которое будет синхронизироваться с вашим Git-репозиторием.
Argo CD автоматически синхронизирует состояние вашего кластера с состоянием в Git-репозитории. Если вы включили автоматическую синхронизацию, изменения в репозитории будут автоматически развернуты в кластере.
Argo CD можно настроить для отправки уведомлений о статусе развертываний через интеграции с такими инструментами, как Slack, email, или вебхуками.
Используйте веб-интерфейс Argo CD для мониторинга состояния приложений и синхронизации. Также можно настроить метрики и мониторинг через Prometheus и Grafana для более глубокого анализа.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Он порождается непосредственно ядром как процесс с идентификатором PID 1 и отвечает за инициализацию системы, запуск всех остальных процессов и управление ними.
`init` остаётся родительским процессом для всех орфанных процессов, обеспечивая их завершение или управление.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥7
I-нода (или индексный узел, inode) в файловой системе UNIX и подобных ей (например, в Linux) является структурой данных, которая хранит информацию о файлах и каталогах. I-нода не содержит имени файла, но хранит метаданные, необходимые для управления файлом. Вот основная информация, которую хранит i-нода:
Уникальный идентификатор, по которому можно однозначно определить файл в пределах файловой системы.
Определяет, является ли объект файлом, каталогом, символической ссылкой, устройством и т.д.
Содержит информацию о правах доступа к файлу для владельца, группы и других пользователей (чтение, запись, выполнение).
Количество жестких ссылок на этот файл, то есть сколько раз этот файл упоминается в различных каталогах.
Указывает владельца файла.
Указывает группу, к которой принадлежит файл.
Размер файла в байтах.
ctime (Change Time): Время последнего изменения i-ноды (метаданных).
mtime (Modification Time): Время последнего изменения содержимого файла.
atime (Access Time): Время последнего доступа к файлу.
Прямые указатели: Указывают на блоки данных непосредственно.
Одноуровневые непрямые указатели: Указывают на блоки, которые содержат прямые указатели.
Двухуровневые непрямые указатели: Указывают на блоки, которые содержат одноуровневые непрямые указатели.
Трехуровневые непрямые указатели: Указывают на блоки, которые содержат двухуровневые непрямые указатели.
i-нод номер: 12345
Тип: Файл
Права доступа: rw-r--r--
Ссылки: 1
UID: 1000
GID: 1000
Размер: 2048 байт
ctime: 2023-07-31 12:34:56
mtime: 2023-07-31 12:00:00
atime: 2023-07-31 11:30:00
Прямые указатели: [2, 3, 4, ...]
Одноуровневый непрямой указатель: [5]
Двухуровневый непрямой указатель: [6]
Трехуровневый непрямой указатель: [7]
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Разница между Linux и Unix заключается в их происхождении, разработке, лицензировании и архитектурных особенностях. Хотя они оба являются операционными системами, основывающимися на схожих концепциях, они имеют несколько ключевых различий.
Происхождение: Unix был разработан в AT&T Bell Labs в конце 1960-х и начале 1970-х годов Кеном Томпсоном, Деннисом Ритчи и другими.
История: Unix стал основой для многих других операционных систем, включая различные коммерческие и академические версии, такие как BSD (Berkeley Software Distribution), AIX (от IBM), HP-UX (от Hewlett-Packard), Solaris (от Sun Microsystems) и другие.
Происхождение:Linux был разработан Линусом Торвальдсом в 1991 году как бесплатная и открытая альтернатива Unix.
История: Linux основан на идеях и стандартах Unix, но он не содержит исходного кода Unix. Linux стал популярным благодаря своей открытой модели разработки и поддержке со стороны сообщества.
Лицензия: Unix традиционно был коммерческой операционной системой, распространяемой по проприетарной лицензии. Каждая версия Unix имела свои собственные лицензионные условия и коммерческие модели.
Лицензия: Linux распространяется под лицензией GNU General Public License (GPL), что делает его свободным и открытым программным обеспечением. Это позволяет пользователям свободно использовать, изменять и распространять Linux.
Разработка: Разработка Unix велась различными коммерческими и академическими организациями. Каждая версия Unix разрабатывалась и поддерживалась своим собственным вендором.
Поддержка: Поддержка Unix зависела от вендора, который предоставлял коммерческую поддержку для своей версии системы.
Разработка: Linux разрабатывается сообществом разработчиков по всему миру. Основной веткой ядра Linux управляет Линус Торвальдс и его команда, но различные дистрибутивы (например, Debian, Ubuntu, Fedora, CentOS, и т.д.) добавляют свои собственные компоненты и поддержку.
Поддержка: Linux поддерживается как сообществом, так и коммерческими организациями (например, Red Hat, Canonical, SUSE), предоставляющими платную поддержку и услуги.
Архитектура: Unix системы часто следуют определенным стандартам, таким как POSIX, и имеют стабильное, проверенное временем ядро и архитектуру.
Использование: Unix традиционно используется в крупных корпоративных средах, на серверах и мейнфреймах, в научных и инженерных приложениях.
Архитектура: Linux также следует стандартам POSIX и имеет модульную архитектуру, которая позволяет пользователям и разработчикам легко добавлять новые функции.
Использование: Linux используется повсеместно — от серверов и суперкомпьютеров до встраиваемых систем и мобильных устройств (например, Android). Он также широко используется в настольных системах благодаря множеству дистрибутивов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
В операционных системах на базе Unix и Linux существует разделение между двумя важными областями памяти: пространством пользователя (user space) и пространством ядра (kernel space). Это разделение важно для обеспечения стабильности и безопасности системы.
Пространство ядра - это область памяти, в которой работает ядро операционной системы и его расширения, включая драйверы устройств. Ядро имеет полный доступ к аппаратным ресурсам системы и может выполнять привилегированные операции.
Ядро имеет прямой доступ к памяти, процессору, устройствам ввода-вывода и другим аппаратным компонентам.
Код, выполняемый в пространстве ядра, работает в привилегированном режиме процессора, что позволяет ему выполнять критически важные и потенциально опасные операции.
Ядро управляет ресурсами системы, такими как память, процессорное время, файловые системы и сетевые соединения.
Ядро обрабатывает системные вызовы от приложений, которые выполняются в пространстве пользователя. Эти вызовы включают операции ввода-вывода, управление памятью, управление процессами и другие.
Пространство пользователя - это область памяти, в которой выполняются пользовательские приложения и процессы. Это пространство изолировано от пространства ядра для обеспечения безопасности и стабильности системы.
Приложения в пространстве пользователя не имеют прямого доступа к аппаратным ресурсам. Все обращения к аппаратуре происходят через системные вызовы, которые передаются ядру.
Код, выполняемый в пространстве пользователя, работает в непривилегированном режиме процессора, что ограничивает его возможности и предотвращает выполнение опасных операций.
Процессы в пространстве пользователя изолированы друг от друга и от пространства ядра. Это предотвращает одну программу от вмешательства в работу другой и защищает ядро от потенциально вредоносных действий.
Взаимодействие между пространством пользователя и ядра происходит через системные вызовы. Когда приложение в пространстве пользователя хочет выполнить операцию, требующую привилегий ядра (например, чтение файла или создание процесса), оно выполняет системный вызов. Ядро обрабатывает этот вызов и возвращает результат в пространство пользователя.
Примером системного вызова является функция
read()
в языке программирования C, которая позволяет читать данные из файла. Тут open()
, read()
, и close()
являются системными вызовами, которые передают управление от пространства пользователя к пространству ядра для выполнения операций с файлами.#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("example.txt", O_RDONLY);
if (fd == -1) {
// Ошибка при открытии файла
return 1;
}
char buffer[128];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
if (bytesRead == -1) {
// Ошибка при чтении файла
return 1;
}
// Обработка данных
close(fd);
return 0;
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Централизованное управление и мониторинг состояния сертификатов на конечных точках (эндпойнтах) критически важно для обеспечения безопасности и соблюдения регуляторных требований. Для этой цели можно использовать различные инструменты и платформы, которые обеспечивают централизованное обновление, мониторинг и управление сертификатами.
Это мощное средство для управления секретами и сертификатами. Оно поддерживает централизованное управление сертификатами и автоматическое обновление.
Функции:
Хранение и управление сертификатами.
Автоматическое обновление и ротация сертификатов.
API для интеграции с другими системами.
Управление доступом на основе политики.
Это клиент для автоматического получения и обновления сертификатов от Let's Encrypt, бесплатного авторитета сертификации.
Функции:
Автоматическое получение и обновление SSL/TLS сертификатов.
Интеграция с веб-серверами (например, Apache, Nginx).
Скрипты и автоматизация для простоты управления.
Это платформа для защиты машинных идентификаторов, которая обеспечивает централизованное управление сертификатами.
Функции:
Централизованное управление жизненным циклом сертификатов.
Автоматическое обновление и ротация сертификатов.
Мониторинг состояния сертификатов и оповещения о проблемах.
Интеграция с различными облачными провайдерами и DevOps инструментами.
Позволяет легко управлять сертификатами в облачной инфраструктуре AWS.
Функции:
Автоматическое обновление сертификатов.
Простая интеграция с AWS сервисами (например, Elastic Load Balancing, CloudFront).
Централизованное управление сертификатами в AWS.
Azure Key Vault предоставляет возможности для централизованного управления сертификатами в облаке Microsoft Azure.
Функции:
Хранение и управление сертификатами.
Автоматическое обновление сертификатов.
Интеграция с другими сервисами Azure.
Управление доступом на основе ролей (RBAC).
Google Cloud Certificate Manager помогает управлять сертификатами в инфраструктуре Google Cloud Platform.
Функции:
Управление и обновление сертификатов.
Интеграция с Load Balancers и другими сервисами GCP.
Мониторинг и оповещения о состоянии сертификатов.
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo crontab -e
0 0 * * * /usr/bin/certbot renew --quiet --no-self-upgrade
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10