Anonymous Quiz
5%
Система управления логами
86%
Пакетный менеджер для Kubernetes
4%
Инструмент для мониторинга
4%
Инструмент для тестирования
👍3
Prometheus — это открытая система мониторинга и оповещения, которая широко используется для сбора метрик с различных целевых объектов, таких как серверы, виртуализированные контейнеры и приложения, в режиме реального времени. Она была создана в компании SoundCloud в 2012 году и с тех пор стала частью Cloud Native Computing Foundation, что подчеркивает её популярность и признание в индустрии.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Anonymous Quiz
3%
Практика создания инфраструктуры вручную
2%
Методика управления версиями кода
95%
Автоматизация управления и создания инфраструктуры с помощью кода
0%
Мониторинг и логирование
Контейнер — это изолированная среда выполнения, которая упаковывает приложение и его зависимости, обеспечивая его консистентное выполнение независимо от окружения. Контейнеры обычно создаются с использованием технологий, таких как Docker, и включают:
- Приложение.
- Библиотеки и зависимости.
- Средства управления.
Пример Dockerfile для создания контейнера:
FROM python:3.8-slim
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
Контейнеры обеспечивают изоляцию приложений и их зависимостей, но в контексте Kubernetes, контейнеры управляются и организуются в более высокоуровневые сущности, называемые подами.
Под — это наименьшая и самая базовая единица развертывания в Kubernetes. Под включает один или несколько контейнеров, которые совместно используют:
- Сетевое пространство: Все контейнеры в поде имеют общий IP-адрес и порты.
- Файловую систему: Общие тома для хранения данных между контейнерами.
- Сетевые ресурсы: Контейнеры в поде могут общаться друг с другом через localhost.
Основные характеристики пода:
- Один или несколько контейнеров: Обычно в поде размещается один контейнер, но можно разместить несколько контейнеров, которые должны работать вместе.
- Жизненный цикл: Поды создаются, управляются и удаляются Kubernetes. Они могут быть перезапущены в случае отказа.
- Общее пространство: Контейнеры в поде совместно используют сетевое пространство и могут взаимодействовать друг с другом через localhost.
Пример манифеста пода (YAML):
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage:latest
ports:
- containerPort: 80
- Контейнер — это отдельная изолированная среда выполнения приложения.
- Под — это абстракция Kubernetes, объединяющая один или несколько контейнеров.
- Контейнеры не делятся сетевым пространством и томами по умолчанию.
- Контейнеры в поде делят сетевое пространство и могут обмениваться данными через общие тома.
- Контейнеры управляются такими инструментами, как Docker.
- Поды управляются Kubernetes, который заботится об их создании, масштабировании, перезапуске и удалении.
- Контейнеры могут существовать независимо от Kubernetes.
- Поды управляются и контролируются Kubernetes, и они могут быть перезапущены или перемещены на другие узлы.
- Контейнер — изолированная среда выполнения для приложения и его зависимостей.
- Под — базовая единица развертывания в Kubernetes, содержащая один или несколько контейнеров с общими ресурсами (сеть, тома).
- Контейнеры в поде делят сетевые и файловые ресурсы и управляются Kubernetes для обеспечения высокой доступности и масштабируемости.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Anonymous Quiz
5%
Jenkins
1%
Git
93%
Kubernetes
0%
Selenium
👍2
Использование секретов в Kubernetes (Kubernetes Secrets) — это важная практика для безопасного управления конфиденциальными данными, такими как пароли, токены доступа, ключи API и другие чувствительные данные. Вот как можно использовать секреты в Kubernetes:
Секреты в Kubernetes могут быть созданы различными способами, включая использование командной строки
kubectl
, файлов YAML или напрямую через API.kubectl
Команда
kubectl create secret
позволяет создать секреты из текстовых значений или файлов.Пример создания секрета с именем
mysecret
из текстового значения:kubectl create secret generic mysecret --from-literal=username=myuser --from-literal=password=mypassword
Пример создания секрета из файла:
kubectl create secret generic mysecret --from-file=path/to/secret/file
Секреты можно описать в YAML-файле и применить с помощью команды
kubectl apply
.Пример секрета, описанного в YAML:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: bXl1c2Vy # base64-encoded value of "myuser"
password: bXlwYXNzd29yZA== # base64-encoded value of "mypassword"
Чтобы создать секрет из этого файла, необходимо применить его
kubectl apply -f secret.yaml
Секреты могут быть использованы в подах несколькими способами:
Пример манифеста пода с использованием секретов как переменных окружения:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage:latest
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
Пример манифеста пода с использованием секретов как тома:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage:latest
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: mysecret
В этом примере секреты будут смонтированы в поде в виде файлов в каталоге
/etc/secret
.Секреты можно обновить с помощью команды
kubectl apply
или kubectl create secret
с флагом --dry-run=client -o yaml
для генерации YAML, который затем можно изменить и применить.- Создание: Секреты можно создавать с помощью
kubectl
или YAML-файлов.- Использование: Секреты можно использовать как переменные окружения или тома в подах.
- Обновление и безопасность: Обновляйте секреты безопасно и ограничивайте доступ к ним с помощью RBAC и шифрования.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Anonymous Quiz
19%
Автоматическое развертывание кода в тестовую среду
77%
Автоматическое развертывание каждого изменения кода в продуктивную среду
1%
Ежеквартальное развертывание кода
3%
Ручное развертывание кода
👍1
kubelet — это важный компонент в архитектуре Kubernetes, который отвечает за выполнение подов на каждом узле (Node) кластера. Он управляет жизненным циклом контейнеров и гарантирует, что они работают в соответствии с определенными спецификациями.
При запуске kubelet регистрирует узел в API-сервере Kubernetes, предоставляя информацию о ресурсах узла, таких как количество процессоров, объем памяти и состояние дисков.
kubelet регулярно обращается к API-серверу, чтобы получить обновления о желаемом состоянии подов, которые должны быть запущены на узле. Эти инструкции включают информацию о том, какие поды создавать, какие удалять и какие обновлять.
На основе полученных инструкций kubelet взаимодействует с контейнерным рантаймом для создания, удаления и управления контейнерами. Он также монтирует тома, устанавливает сети и выполняет другие необходимые действия для настройки подов.
kubelet периодически проверяет состояние подов и контейнеров, используя механизмы, такие как liveness и readiness пробы. Если какой-либо контейнер или под не работает должным образом, kubelet пытается перезапустить его или уведомляет API-сервер о проблеме.
kubelet собирает метрики и логи контейнеров и отправляет их в систему мониторинга и логирования (например, Prometheus, ELK Stack), чтобы администраторы могли отслеживать состояние приложений и инфраструктуры.
Конфигурация kubelet обычно задается через параметры командной строки или с использованием файла конфигурации. Пример простого файла конфигурации kubelet:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
port: 10250
authentication:
anonymous:
enabled: false
webhook:
enabled: true
x509:
clientCAFile: "/etc/kubernetes/pki/ca.crt"
authorization:
mode: Webhook
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
failSwapOn: false
cgroupDriver: cgroupfs
runtimeRequestTimeout: "15m"
- address: IP-адрес, на котором kubelet слушает запросы.
- port: Порт для связи с kubelet.
- authentication: Настройки аутентификации.
- authorization: Настройки авторизации.
- clusterDNS: Адреса DNS-серверов кластера.
- clusterDomain: Доменное имя кластера.
- failSwapOn: Остановка kubelet, если включен swap.
- cgroupDriver: Драйвер cgroup для контейнеров.
- runtimeRequestTimeout: Тайм-аут запросов к контейнерному рантайму.
kubelet — это агент на каждом узле кластера Kubernetes, отвечающий за запуск и управление подами, мониторинг их состояния, взаимодействие с контейнерными рантаймами и сбор метрик. Он играет ключевую роль в обеспечении работоспособности и согласованности состояния приложений в кластере Kubernetes.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
96%
Управление конфигурацией и автоматизация задач
2%
Мониторинг и логирование
2%
Контроль версий кода
0%
Разработка приложений
👍1
Понимание этих двух терминов поможет нам различить их предназначение и использование в контексте Kubernetes и программного обеспечения.
PVC (Persistent Volume Claim) — это объект в Kubernetes, который позволяет пользователям запрашивать выделение постоянного хранилища для подов. PVC абстрагирует детали физического хранилища, позволяя разработчикам и администраторам фокусироваться на объеме и типе хранилища, необходимого для приложения, без необходимости управлять деталями самого хранилища.
Пример PVC в YAML:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard
Full Stack — это термин, используемый для описания разработчиков или инженеров, которые обладают навыками и знаниями для работы со всеми уровнями разработки программного обеспечения, от фронтенда до бэкенда, включая базы данных, серверы и даже DevOps практики.
- Фронтенд: React, Redux, Webpack, Sass
- Бэкенд: Node.js, Express, Python, Django
- Базы данных: PostgreSQL, MongoDB
- DevOps: Docker, Kubernetes, Jenkins, Terraform
- Сетевые технологии: Nginx, REST API
- PVC (Persistent Volume Claim): Объект в Kubernetes, запрашивающий выделение постоянного хранилища для подов. Он абстрагирует детали физического хранилища и обеспечивает постоянное хранилище для приложений.
- Full Stack: Термин, описывающий разработчиков, обладающих навыками работы со всеми уровнями разработки программного обеспечения, от фронтенда до бэкенда, включая базы данных и DevOps практики.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯8👀4
Anonymous Quiz
4%
Инструмент для управления конфигурацией
94%
Система мониторинга и оповещения
1%
Инструмент для контейнеризации
0%
Платформа для разработки
👍2
Загрузка Linux включает несколько ключевых этапов, начиная от включения питания до полной готовности операционной системы. Важно понимать эти этапы для диагностики и устранения неполадок на ранних стадиях загрузки. Основные этапы загрузки включают:
BIOS (Basic Input/Output System) или UEFI (Unified Extensible Firmware Interface) — это первый этап загрузки системы. Они выполняют следующие функции:
- POST (Power-On Self Test): Проверка аппаратного обеспечения на наличие ошибок.
- Поиск загрузочного устройства: Определение устройства, с которого будет загружена операционная система (жесткий диск, SSD, CD/DVD, USB и т.д.).
После того как BIOS/UEFI определяет загрузочное устройство, управление передается на первый сектор диска — MBR (Master Boot Record) или GPT (GUID Partition Table), в зависимости от типа разметки диска.
- Первый сектор диска (512 байт) содержит загрузочную запись и таблицу разделов.
- Содержит код начальной загрузки, который загружает основной загрузчик (например, GRUB).
- Используется на более современных системах, поддерживает большее количество разделов и большие объемы дисков.
- Содержит защитный MBR и несколько копий таблицы разделов для повышения надежности.
GRUB (GRand Unified Bootloader) — самый распространенный загрузочный менеджер в Linux, хотя существуют и другие, такие как LILO и Syslinux.
Функции GRUB:
- Отображение меню загрузки, где пользователь может выбрать операционную систему или ядро для загрузки.
- Загрузка выбранного ядра в память и передача ему управления.
Пример конфигурационного файла GRUB (
/boot/grub/grub.cfg
):menuentry 'Ubuntu' {
set root='(hd0,1)'
linux /vmlinuz root=/dev/sda1 ro quiet splash
initrd /initrd.img
}
Когда ядро загружено в память, оно выполняет следующие действия:
- Аппаратная инициализация: Настройка аппаратных компонентов системы.
- Монтаж корневой файловой системы: Ядро монтирует корневую файловую систему в режиме только для чтения.
- Запуск initramfs: Временная файловая система, содержащая необходимые драйверы и утилиты для монтирования основной корневой файловой системы.
Система инициализации — это первый процесс, который запускается ядром после завершения его инициализации. Самые распространенные системы инициализации:
- systemd: Современная система инициализации, используемая в большинстве современных дистрибутивов Linux.
- SysVinit: Старая система инициализации, до сих пор используемая в некоторых дистрибутивах.
- Upstart: Разработана Canonical для Ubuntu, используется в некоторых старых версиях.
Функции системы инициализации:
- Запуск фоновых служб (демонов).
- Настройка среды пользователя.
- Управление процессами и службами в системе.
Пример systemd unit файла (
/etc/systemd/system/example.service
):[Unit]
Description=Example Service
[Service]
ExecStart=/usr/bin/example
[Install]
WantedBy=multi-user.target
Знание этих этапов помогает эффективно диагностировать и устранять проблемы, возникающие на различных стадиях загрузки операционной системы Linux.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
Anonymous Quiz
3%
Непрерывная интеграция
5%
Непрерывное развертывание
83%
Непрерывное обучение
9%
Непрерывное тестирование
Идеальный конвейер для разработки, тестирования и развертывания приложений должен быть надежным, автоматизированным, масштабируемым и обеспечивать быструю обратную связь. Вот ключевые компоненты и этапы, которые должны быть включены в такой конвейер:
- Git (с репозиториями на GitHub, GitLab, Bitbucket)
- Branching Strategy: Использование стратегий ветвления (например, Git Flow, GitHub Flow) для управления разработкой функций, исправлений и релизов.
- Code Reviews: Обязательные проверки кода (code review) перед слиянием веток.
- Jenkins, GitLab CI/CD, GitHub Actions, Travis CI, CircleCI
- Сборка на каждом коммите: Автоматическая сборка проекта при каждом коммите или pull request.
- Управление зависимостями: Установка и управление зависимостями проекта (например, с использованием Maven, Gradle, npm, pip).
- SonarQube, ESLint, Pylint, Checkstyle
- Линтинг и форматирование: Автоматический анализ кода на соответствие стилю и выявление потенциальных ошибок.
- Quality Gates: Определение порогов качества, которые код должен пройти перед слиянием.
- JUnit, Selenium, PyTest, JUnit, Mocha
- Unit Tests: Автоматическое выполнение модульных тестов для проверки отдельных компонентов.
- Integration Tests: Проверка взаимодействия различных частей системы.
- End-to-End Tests: Тестирование приложения как целого, имитируя реального пользователя.
- Docker, Jenkins Artifactory, Nexus Repository
- Создание артефактов: Создание исполняемых файлов, Docker-образов и других артефактов после успешного прохождения тестов.
- Артефакт-репозиторий: Хранение артефактов в централизованном репозитории.
- Kubernetes, Helm, Ansible, Terraform
- Инфраструктура как код (IaC): Определение инфраструктуры в виде кода для автоматизации развертывания.
- Автоматическое развертывание: Автоматизация развертывания на различных средах (development, staging, production).
- Canary Releases и Blue-Green Deployment: Подходы для минимизации рисков при развертывании новых версий.
- Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana), Splunk
- Мониторинг метрик: Сбор и анализ метрик производительности и состояния системы.
- Алертинг: Настройка алертов для уведомления команды о проблемах в реальном времени.
- Slack, JIRA, Confluence
- Обратная связь: Быстрая обратная связь от системы мониторинга и тестирования.
- Интеграция с таск-трекерами: Автоматическое создание задач и уведомлений при обнаружении проблем.
- Отчеты и аналитика: Регулярные отчеты о состоянии системы и качестве кода для улучшения процессов.
stages:
- build
- test
- lint
- package
- deploy
- monitor
variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
build:
stage: build
script:
- ./build.sh
test:
stage: test
script:
- ./run-tests.sh
lint:
stage: lint
script:
- ./lint.sh
package:
stage: package
script:
- docker build -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
deploy:
stage: deploy
script:
- ./deploy.sh
monitor:
stage: monitor
script:
- ./monitor.sh
Идеальный конвейер включает в себя автоматизацию всех этапов разработки, от управления исходным кодом до мониторинга развернутых приложений. Основные этапы включают сборку, тестирование, статический анализ, упаковку, развертывание и мониторинг, обеспечивая высокое качество и стабильность выпускаемого ПО.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Anonymous Quiz
6%
Управление контейнерами
14%
Автоматизация развертывания
73%
Создание и управление виртуальными машинами
7%
Мониторинг производительности
👍1
-
git init
: Инициализация нового репозитория.-
git clone <url>
: Клонирование репозитория.-
git add <file>
: Добавление файла к коммиту.-
git commit -m "сообщение"
: Создание коммита.-
git push
: Отправка изменений.-
git pull
: Получение изменений.-
git branch
: Список веток.-
git checkout <branch>
: Переключение ветки.-
docker build -t <image_name> .
: Создание образа.-
docker run -d -p 80:80 <image_name>
: Запуск контейнера.-
docker ps
: Список контейнеров.-
docker stop <container_id>
: Остановка контейнера.-
docker rm <container_id>
: Удаление контейнера.-
docker images
: Список образов.-
docker rmi <image_id>
: Удаление образа.-
kubectl get pods
: Список подов.-
kubectl get services
: Список сервисов.-
kubectl describe pod <pod_name>
: Информация о поде.-
kubectl logs <pod_name>
: Логи пода.-
kubectl apply -f <file.yaml>
: Применение конфигурации.-
kubectl delete pod <pod_name>
: Удаление пода.-
kubectl exec -it <pod_name> -- /bin/bash
: Подключение к поду.-
ansible-playbook <playbook.yml>
: Запуск плейбука.-
ansible <host> -m ping
: Проверка хостов.-
ansible <host> -m command -a 'uptime'
: Выполнение команды.-
ansible-galaxy install <role>
: Установка роли.-
terraform init
: Инициализация.-
terraform plan
: Планирование изменений.-
terraform apply
: Применение изменений.-
terraform destroy
: Удаление ресурсов.-
ls
: Список файлов.-
cd <directory>
: Перемещение в каталог.-
pwd
: Текущий каталог.-
cp <source> <destination>
: Копирование файлов.-
mv <source> <destination>
: Перемещение файлов.-
rm <file>
: Удаление файла.-
mkdir <directory>
: Создание каталога.-
grep <pattern> <file>
: Поиск шаблона.-
find <directory> -name <pattern>
: Поиск файлов.-
chmod <permissions> <file>
: Изменение прав.-
chown <user>:<group> <file>
: Изменение владельца.-
top
: Мониторинг процессов.-
ps aux
: Список процессов.-
.gitlab-ci.yml
: Конфигурация пайплайна.-
gitlab-runner register
: Регистрация Runner.-
gitlab-runner list
: Список Runner.-
jenkins-cli.jar
: Утилита CLI.-
jenkins-jobs create <job_name>
: Создание задачи.-
jenkins-jobs build <job_name>
: Запуск задачи.-
jenkins-jobs list
: Список задач.-
workflow_dispatch
: Ручной запуск.-
.github/workflows/<workflow>.yml
: Конфигурация workflow.stages:
- build
- test
- deploy
build:
stage: build
script:
- echo "Building..."
- ./build.sh
test:
stage: test
script:
- echo "Testing..."
- ./test.sh
deploy:
stage: deploy
script:
- echo "Deploying..."
- ./deploy.sh
Эти команды охватывают управление версиями, контейнеризацию, оркестрацию, автоматизацию развертывания и администрирование систем. Знание этих команд помогает эффективно управлять процессами разработки и эксплуатации ПО.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👾5
Anonymous Quiz
3%
Автоматизация тестирования кода
90%
Практика автоматической доставки изменений кода в продуктивную среду
4%
Методология развертывания микросервисов
3%
Процесс ручного развертывания кода
🤔3👍1
Для определения размера узла (node) в кластере Kubernetes необходимо собрать информацию о различных ресурсах, таких как количество процессоров (CPU), объем оперативной памяти (RAM) и объем дискового пространства, доступные на узле. Эти данные можно получить с помощью команды
kubectl
.Для начала необходимо получить список узлов в кластере:
kubectl get nodes
Для каждого узла из списка можно получить подробную информацию о ресурсах с помощью команды
kubectl describe node <node-name>
:kubectl describe node <node-name>
Эта команда предоставит информацию о доступных и используемых ресурсах, таких как CPU, память и дисковое пространство.
Чтобы получить информацию о ресурсах узлов в удобном для обработки формате (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
Для определения размера узла (node) в Kubernetes, используйте команды
kubectl get nodes
, kubectl describe node <node-name>
и kubectl get node <node-name> -o json
для получения информации о CPU, памяти и дисковом пространстве. Переведите данные о памяти из Ki в GiB для удобства и объедините все данные для полного представления ресурсов узла.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Anonymous Quiz
17%
Управление конфигурацией
65%
Мониторинг и оповещение
9%
Контроль версий
9%
Автоматизация развертывания
Развертывание приложения на 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) и других необходимых ресурсов.
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
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
kubectl apply
для развертывания ресурсов.kubectl get
для проверки состояния деплоя.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5