Развёртывание в Kubernetes с помощью Actions
Настройте непрерывное развёртывание в кластеры Kubernetes, управляя развёртываниями и сервисами непосредственно из GitHub Actions.
«Развёртывание в Kubernetes с помощью Actions» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Введение в непрерывное развертывание в Kubernetes с помощью GitHub Actions
Добро пожаловать! На этом уроке Вы узнаете, как настроить непрерывное развертывание (CD) в кластеры Kubernetes с помощью GitHub Actions.
Автоматизация развертывания позволяет быстро и надежно выпускать изменения приложения без ручных действий.
Мы рассмотрим аутентификацию, применение манифестов Kubernetes и управление обновлениями.
Основы развертываний в Kubernetes
Прежде чем приступить к развертыванию, давайте быстро вспомним два основных ресурса Kubernetes:
- Развертывания: Они управляют подами приложения, обеспечивая постоянную работу нужного числа реплик. Они обрабатывают обновления и откаты.
- Сервисы: Они определяют способы доступа к приложению, например изнутри кластера или извне через LoadBalancer.
Наша цель — применить файлы YAML, описывающие эти ресурсы, к кластеру из GitHub Actions.
Аутентификация GitHub Actions в Kubernetes
Чтобы выполнить развертывание, рабочему процессу GitHub Actions необходимо взаимодействовать с API-сервером кластера Kubernetes.
Для этого требуется аутентификация. Стандартный способ аутентификации в Kubernetes — использование файла kubeconfig.
Нам необходимо безопасно передать содержимое этого файла исполнителю рабочего процесса.
Защита файла конфигурации Kubernetes
Файл kubeconfig содержит конфиденциальные сведения, например конечные точки кластера и учетные данные пользователя. Его необходимо хранить в тайне!
GitHub Actions предоставляет для этого секреты. Вы сохраните содержимое файла kubeconfig как секрет репозитория.
Как получить свой kubeconfig? Это зависит от поставщика Kubernetes, например aws eks update-kubeconfig или gcloud container clusters get-credentials.
Настройка контекста Kubernetes
После сохранения kubeconfig как секрета, назовем его KUBE_CONFIG_DATA, рабочий процесс сможет его использовать.
Обычно содержимое секрета записывают во временный файл на исполнителе, а затем задают переменную окружения KUBECONFIG, указывающую на этот файл.
Такой подход сообщает kubectl, где найти сведения для подключения к кластеру.
Использование `kubectl` в рабочих процессах
kubectl — официальная утилита командной строки для взаимодействия с кластерами Kubernetes. На исполнителях GitHub Actions программа kubectl уже установлена.
После настройки kubeconfig Вы можете выполнять любую команду kubectl на шагах рабочего процесса.
Рассмотрим простой пример:
name: K8s Setup Test
on: [workflow_dispatch]
jobs:
test-kubeconfig:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Verify kubectl access
run: kubectl version --clientПростой манифест развертывания Kubernetes
Вот простой манифест развертывания Deployment и сервиса Service Kubernetes для приложения «привет-мир». Именно это мы попросим Kubernetes запустить.
В этом примере используется простой образ Nginx, доступный через порт 80.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
spec:
selector:
app: hello-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancerПолный рабочий процесс развертывания
Теперь добавим шаг развертывания в рабочий процесс. После сборки и отправки образа контейнера, описанных в предыдущих уроках, Вы сможете развернуть его.
В этом рабочем процессе предполагается, что секрет kubeconfig настроен, а файл манифеста, например k8s/deployment.yaml, находится в вашем репозитории.
name: Deploy to Kubernetes
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Deploy application to K8s
run: kubectl apply -f k8s/deployment.yamlОбновление приложения
Одно из важных преимуществ kubectl apply — идемпотентность. Если ресурсы, определенные в YAML, уже существуют, kubectl apply обновит их, а не создаст новые.
Чтобы развернуть новую версию приложения, просто обновите тег образа в файле deployment.yaml и отправьте изменения. После этого GitHub Actions запустит рабочий процесс, а Kubernetes выполнит постепенное обновление, постепенно заменяя старые поды новыми и обеспечивая минимальное время простоя.
Быстрая проверка
Вы изучили основные шаги развертывания приложения в Kubernetes с помощью GitHub Actions.
Какая из следующих последовательностей шагов является правильной для рабочего процесса GitHub Actions, развертывающего манифест Kubernetes?
Повторение и следующие шаги
Отличная работа! Вы научились настраивать непрерывное развертывание в Kubernetes с помощью GitHub Actions.
- Мы храним конфиденциальные данные
kubeconfigв секретах GitHub. - Рабочие процессы используют этот секрет для настройки
kubectl. kubectl apply -fиспользуется для развертывания или обновления манифестов Kubernetes.- Kubernetes выполняет постепенные обновления при применении изменений.
Это мощное сочетание автоматизирует развертывания, делая процесс разработки более удобным и быстрым. Продолжайте изучать расширенные возможности Kubernetes!
Часто задаваемые вопросы
Урок «Развёртывание в Kubernetes с помощью Actions» бесплатный?
Да — полный текст урока «Развёртывание в Kubernetes с помощью Actions» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Чему я научусь в уроке «Развёртывание в Kubernetes с помощью Actions»?
Настройте непрерывное развёртывание в кластеры Kubernetes, управляя развёртываниями и сервисами непосредственно из GitHub Actions. Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?
Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Развёртывание в Kubernetes с помощью Actions»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?
Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сборка образов Docker с помощью Actions
- Отправка образов в реестры
- Развёртывание в Kubernetes с помощью Actions
- Чарты Helm и манифесты Kubernetes в CI/CD