paint-brush
Создание конвейера CI/CD с помощью AWS, K8S, Docker, Ansible, Git, Github, Apache Maven и Jenkinsк@zufarexplained
38,449 чтения
38,449 чтения

Создание конвейера CI/CD с помощью AWS, K8S, Docker, Ansible, Git, Github, Apache Maven и Jenkins

к Zufar Sunagatov46m2023/09/07
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

Узнайте, как создать расширенный конвейер CI/CD с помощью AWS, K8S, Docker, Ansible, Apache Maven, Git, Github и Jenkins вместе с Зуфаром Сунагатовым. К концу этого руководства вы получите готовый к использованию современный конвейер CI/CD, который можно применить к любому из ваших проектов на Github.
featured image - Создание конвейера CI/CD с помощью AWS, K8S, Docker, Ansible, Git, Github, Apache Maven и Jenkins
Zufar Sunagatov HackerNoon profile picture
0-item
1-item




В своей предыдущей статье я углубился в увлекательный мир микросервисов — Microservice Architecture Patterns Part 1: Decomposition Patterns . Это было начало моей обширной серии статей о микросервисах и их шаблонах.


Хотя логичным шагом было бы продолжить вторую часть этой серии, я решил, что следующее, что я хотел бы изучить и рассказать вам, — это жизненно важный процесс беспрепятственной доставки этих микросервисов конечному пользователю.


Обзор контента

  • Мотивация
  • [Модуль 1]: Виртуальный сервер AWS EC2
  • [Модуль 2]: Сервер Jenkins
  • [Модуль 3]: Git и Github
  • [Модуль 4]: Apache Maven
  • [Модуль 5]: Докер
  • [Модуль 6]: Ansible
  • [Модуль 7]: Кубернетес
  • Заключение
  • об авторе



Мотивация

CI/CD — это метод доставки приложений клиентам, достигаемый за счет автоматизации различных этапов разработки приложений. Я считаю, что понимание CI/CD (непрерывной интеграции и непрерывного развертывания) может дать разработчикам возможность лучше понять, как артефакты серверной части проекта существуют за пределами репозитория проекта. Это понимание также может привести к фундаментальному изменению взглядов разработчика. Вместо того, чтобы просто рассматривать свою работу как строки кода, они могут начать воспринимать более широкий контекст своего проекта как ценный продукт.


В этой статье мы стремимся прояснить процесс CI/CD посредством практического применения. Мы проведем вас через пошаговое руководство, разбив его по модулям, где вы вручную построите конвейер CI/CD. Для этого мы воспользуемся возможностями современных инструментов DevOps, таких как AWS, Docker, Kubernetes, Ansible, Git, Apache Maven и Jenkins . Итак, начнем это путешествие!


[Модуль 1]: Виртуальный сервер AWS EC2

Этот модуль посвящен созданию экземпляра виртуального сервера AWS EC2. В рамках этой статьи вы настроите три экземпляра EC2 для Jenkins, Ansible и Kubernetes. На данный момент вы можете перейти к следующим модулям и вернуться к этому модулю в разделах «[модуль 2]: Jenkins», «[модуль 6]: Ansible» и «[модуль 7]: Kubernetes».


Шаг 1. Создайте учетную запись AWS

Перейдите на https://aws.amazon.com.

Нажмите кнопку Создать учетную запись AWS .


Снимок экрана главной веб-страницы AWS с указателем на кнопку «Создать учетную запись AWS».


Следуйте инструкциям на веб-странице создания учетной записи.


Шаг 2. Войдите в свою учетную запись AWS.

Перейдите на https://console.aws.amazon.com/console/home. Нажмите кнопку «Войти» .

Снимок экрана главной веб-страницы AWS с указателем на кнопку «Войти».


Введите все необходимые учетные данные на этой веб-странице.


Шаг 3. Найдите виртуальный сервер EC2

Найдите EC2 в поле поиска.

Снимок экрана веб-страницы AWS с указателем на поле поиска.


Выберите виртуальный сервер EC2, нажав EC2 Service .

Скриншот веб-страницы AWS с указателем на сервис AWS «EC2».


Нажмите кнопку «Запустить экземпляр» .

Скриншот веб-страницы AWS с указателем на кнопку «Запустить экземпляр».


Шаг 4. Настройте раздел «Имя и теги».

Перейдите в раздел «Имя и теги» .

Скриншот веб-страницы AWS с указателем на раздел «Имя и теги».


Укажите имя нового экземпляра виртуального сервера AWS EC2 в разделе «Имя» .

Снимок экрана веб-страницы AWS с указателем на поле ввода «Имя» в разделе «Имя и теги».


Вы также можете добавить дополнительные теги для своего виртуального сервера, нажав «Добавить дополнительные теги» .


Шаг 5. Настройте раздел «Образы приложений и ОС (образ компьютера Amazon)».


Перейдите в раздел «Образы приложений и ОС (Amazon Machine Image)» .

Снимок экрана веб-страницы AWS с указателем на раздел «Образы приложений и ОС (Amazon Machine Image)».


Чтобы играть на виртуальном сервере БЕСПЛАТНО :

  1. Выберите операционную систему для вашего виртуального сервера — Amazon Linux .
  2. В разделе «Образ машины Amazon (AMI)» выберите машину с тегом, соответствующим требованиям уровня «Бесплатный» .



Снимок экрана веб-страницы AWS с указателем на кнопки «ОС» и «Тип машины» в разделе «Образы приложений и ОС (Amazon Machine Image)».


Шаг 6. Настройте раздел «Тип экземпляра».

Перейдите в раздел «Тип экземпляра» .

Скриншот веб-страницы AWS с указателем на раздел «Тип инстанса».


Чтобы играть на виртуальном сервере БЕСПЛАТНО :

Выберите тип с тегом «Доступный уровень бесплатного пользования» в разделе «Тип экземпляра» .

Для меня это t2.micro (семейство: t2 1cCPU 1 ГиБ памяти. Текущее поколение: правда) .



Снимок экрана веб-страницы AWS с указателем на раскрывающийся список «Тип инстанса» в разделе «Тип инстанса».


Шаг 7. Настройте раздел «Настроить хранилище».

Перейдите в раздел «Настроить хранилище» .

Скриншот веб-страницы AWS с указателем на раздел «Настроить хранилище».


Чтобы играть на виртуальном сервере БЕСПЛАТНО :

Не меняйте настройки по умолчанию. Клиенты, соответствующие требованиям уровня бесплатного пользования, могут получить 30 ГБ накопителя EBS общего назначения (SSD) или магнитного накопителя .



Скриншот веб-страницы AWS с указателем возможных конфигураций хранилища в разделе «Настроить хранилище».


Шаг 8. Настройте раздел «Настройки сети».

Перейдите в раздел «Настройки сети» .

Скриншот веб-страницы AWS с указателем на раздел «Настройки сети».


Вам необходимо настроить безопасность вашего виртуального сервера. Сделать это,

  1. Нажмите кнопку «Создать группу безопасности» .
  2. Добавьте имя новой группы безопасности в раздел «Имя группы безопасности» .
  3. Добавьте описание вашей новой группы безопасности в раздел «Описание» .

По умолчанию ваш виртуальный сервер доступен через ( Тип — SSH, Протокол — TCP, Порт — 22 ). Если вам нужны дополнительные типы подключений, добавьте их, добавив дополнительные правила группы безопасности для входящего трафика.



Скриншот веб-страницы AWS с указателем на «Группу безопасности» в разделе «Настройки сети».


Шаг 9: Настройте раздел «Пара ключей (логин)».

Перейдите в раздел «Пара ключей (Вход)» .

Скриншот веб-страницы AWS с указателем на раздел «Кет-пара (логин)».


Создайте новую пару ключей, если вы ее еще не создали.

Скриншот веб-страницы AWS с указателем на «Имя пары ключей», «Тип пары ключей», «Формат файла закрытого ключа» в разделе «Пара ключей (логин)».


Если вы еще не создали «пару ключей» :

  1. Нажмите кнопку «Создать новую пару ключей» .
  2. Дайте новой паре ключей имя в разделе «Имя пары ключей» .
  3. Выберите тип пары ключей RSA или ED25519 . Я выбираю тип RSA .
  4. Выберите формат файла закрытого ключа. Выбор .pem и .ppk . Я выбираю формат .pem .
  5. Нажмите кнопку «Создать пару ключей» .
  6. Появится всплывающее окно с предложением загрузить файл закрытого ключа. Согласитесь и загрузите файл на свой компьютер.

Шаг 10. Запустите экземпляр виртуального сервера EC2.


Запустите экземпляр виртуального сервера EC2, нажав кнопку «Запустить экземпляр» .

Снимок экрана веб-страницы AWS с указателем на кнопку «Запустить экземпляр».


После завершения процесса создания экземпляра виртуального сервера EC2 вы увидите следующее.


Снимок экрана веб-страницы AWS с уведомлением «Успех», указывающим на успешное завершение процесса создания экземпляра виртуального сервера EC2.


Затем вам следует перейти в раздел «Экземпляры» , нажав кнопку «Просмотреть все экземпляры» .


Снимок экрана веб-страницы AWS с указателем на запущенный экземпляр EC2.

Теперь вы можете видеть, что ваш экземпляр виртуального сервера AWS EC2 работает.



[Модуль 2]: Сервер Jenkins

Теперь давайте настроим JenkinsServer на экземпляре виртуального сервера EC2.

Шаг 1. Создайте экземпляр виртуального сервера AWS EC2.

Вам нужен виртуальный сервер для запуска Jenkins.

Следуйте инструкциям из раздела [Модуль 1]: Виртуальный сервер AWS EC2 этого руководства, чтобы завершить этот шаг и создать экземпляр виртуального сервера EC2 с именем JenkinsServer.

Не забудьте добавить настройку группы безопасности. Это позволяет Jenkins и SSH работать через порты 8080 и 22 соответственно.


Используйте имя «JenkinsServer» , чтобы отличить экземпляр виртуального сервера EC2.

Создайте группу безопасности «CI_CD_Pipeline» и «CI_CD_Pipeline_Key_Pair» для нового экземпляра «JenkinsServer» AWS EC2. Вы можете повторно использовать их далее в статье.


Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2.

Перейдите на домашнюю страницу консоли AWSПанель управления консоли управления EC2Экземпляры.

Затем вам следует выбрать JenkinsServer и нажать кнопку «Подключиться» .

Снимок экрана веб-страницы «Экземпляры» AWS с указателем на кнопку «Подключиться».


Затем вы увидите эту веб-страницу. Вам следует еще раз нажать кнопку «Подключиться» .

Снимок экрана веб-страницы AWS «Подключиться к экземпляру» с указателем на кнопку «Подключиться».


Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2.


Шаг 3. Загрузите репозиторий Jenkins.

Теперь вам нужно загрузить Jenkins на свой экземпляр виртуального сервера EC2.

Следуйте этим инструкциям:


  1. Перейдите на веб-страницу загрузки Jenkins.

  2. Вы можете увидеть варианты «Стабильный» (LTS) и «Обычный» (еженедельный). Выберите вариант Red Hat/Fedora/Alma/Rocky/CentOS LTS.


Вы увидите эту веб-страницу.

Скриншот веб-страницы загрузки Jenkins


  1. Скопируйте команду «sudo get..» и выполните ее, чтобы загрузить файлы Jenkins из репозитория Jenkins в Интернете и сохранить их в указанном месте на экземпляре виртуального сервера EC2.
 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

Теперь Дженкинс загружен.


Шаг 4. Импортируйте ключ Дженкинса.

Чтобы завершить установку Jenkins, нам нужно импортировать ключ Jenkins.

Чтобы импортировать ключ Jenkins, нам нужно скопировать команду «sudo rpm..» и выполнить ее.


 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

Таким образом, менеджер пакетов «rpm» может убедиться, что устанавливаемые вами пакеты Jenkins — это именно те пакеты, которые опубликованы проектом Jenkins, и что они не были подделаны или повреждены.


Шаг 5. Установите Java

Чтобы запустить Jenkins, нам нужно установить Java на наш экземпляр виртуального сервера EC2.

Чтобы установить Java , используйте эту команду.


 sudo amazon-linux-extras install java-openjdk11 -y


Проверьте, правильно ли установлена Java , с помощью этой команды:

 java -version


Вы увидите что-то подобное.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с установленным JDK 11.


Шаг 6. Установите конфигурацию шрифта

Чтобы запустить Jenkins, вам необходимо установить Fontconfig на наш экземпляр виртуального сервера EC2.

Используйте эту команду.

 sudo yum install fontconfig java-11-openjdk -y


Fontconfig — это библиотека, предназначенная для обеспечения общесистемной настройки шрифтов, настройки и доступа к приложениям. Это необходимо Jenkins, поскольку у Jenkins есть функции, которые отображают шрифты.


Шаг 7. Установите Дженкинс

На предыдущих шагах вы настроили экземпляр виртуального сервера EC2 для использования определенного репозитория Jenkins, а затем импортировали ключ GPG, связанный с этим репозиторием. Теперь вам нужно запустить команду, которая выполнит поиск во всех известных ей репозиториях, включая добавленный вами Jenkins, чтобы найти пакет Jenkins. Как только он найдет пакет Jenkins в репозитории Jenkins, он загрузит и установит его.


Давайте запустим эту команду.

 sudo yum install jenkins -y


Шаг 8: Запустите Дженкинс

Вы можете запустить Jenkins с помощью этой команды.

 sudo systemctl start jenkins


Чтобы проверить, что Jenkins работает, используйте эту команду.

 sudo systemctl status jenkins


Вы увидите результат, как на скриншоте ниже:

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с установленным Jenkins.


Дженкинс теперь должен быть готов к работе.

Шаг 9: Получите доступ к Дженкинсу

Чтобы получить доступ к приложению Jenkins, откройте любой веб-браузер и введите общедоступный IP-адрес или доменное имя вашего экземпляра EC2, а затем порт 8080.


 http://<your-ec2-ip>:8080


При первом доступе к Jenkins он будет заблокирован автоматически сгенерированным паролем.

Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на пароль администратора.


Вам необходимо отобразить этот пароль с помощью следующей команды.

 sudo cat /var/lib/jenkins/secrets/initialAdminPassword


Скопируйте этот пароль, вернитесь в браузер, вставьте его в поле «Пароль администратора» и нажмите «Продолжить».


Тогда вы сможете увидеть эту веб-страницу.


Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на веб-страницу «Настройка Jenkins».


Теперь вы можете использовать свой сервер Jenkins.


Шаг 10. Создайте новый конвейер Jenkins

Теперь, когда Jenkins работает нормально, вы можете приступить к созданию конвейера Jenkins. Чтобы создать конвейер Jenkins, вам необходимо создать новый «Проект Freestyle». Чтобы создать новый «Проект Freestyle», вам нужно перейти на панель управления Jenkins и нажать кнопку «Новый элемент» .


Снимок экрана веб-страницы панели управления Jenkins с указателем на кнопку «Новый элемент».


Введите имя проекта Github «Freestyle project» (имя «конвейера» будет использоваться далее) и нажмите кнопку «ОК» .


Снимок экрана веб-страницы «Новый элемент Jenkins» с указателем на поле элемента «Имя элемента».


Затем предоставьте описание конвейера.

Снимок экрана веб-страницы конфигурации задания Jenkins с указателем на поле ввода «Описание».


Затем нажмите кнопку «Применить» и «Сохранить». После этого это означает, что вы создали основу конвейера, который будет построен в этом уроке.



[Модуль 3]: Git и Github

Теперь, когда Jenkins работает на экземпляре виртуального сервера AWS EC2, вы можете настроить Git с помощью конвейера.

Git — это бесплатная распределенная система контроля версий (VCS) с открытым исходным кодом, предназначенная для того, чтобы помочь командам разработчиков программного обеспечения отслеживать каждое изменение кода в базе данных особого типа. Если допущена ошибка, разработчики могут повернуть время вспять и сравнить более ранние версии кода, чтобы исправить ошибку и свести к минимуму неудобства для всех членов команды. VCS особенно полезна для DevOps команд, поскольку они помогают им сократить время разработки и увеличить количество успешных развертываний [1].

Git, как самая популярная система контроля версий, позволяет нам переносить последнюю версию кода из репозитория Github вашего проекта на экземпляр виртуального сервера EC2, где установлен ваш Jenkins.


Шаг 1. Установите Git

Используйте эту команду для установки Git.

 sudo yum install git -y


Теперь убедитесь, что Git работает, используя эту команду.

 git --version

Теперь Git отлично работает на экземпляре виртуального сервера EC2.


Шаг 2. Откройте панель управления Jenkins.

Поскольку Git отлично работает на экземпляре виртуального сервера EC2, мы можем теперь интегрировать Jenkins с Git.

Чтобы начать эту интеграцию, давайте установим плагин Jenkins Github.

Перейдите в раздел панели управления Jenkins.


Скриншот панели управления Jenkins


Шаг 3. Откройте диспетчер плагинов Jenkins.

Нажмите кнопку «Управление Jenkins» , а затем кнопку «Управление плагинами» .

Снимок экрана панели управления Jenkins с указателем на кнопку «Управление плагинами».


Шаг 4. Найдите плагин Github Jenkins.

Нажмите кнопку «Доступные плагины» .

Снимок экрана веб-страницы Jenkins Plugin Manager с указателем на кнопку «Доступные плагины».


Найдите поле поиска плагина Github .


Снимок экрана веб-страницы Jenkins Plugin Manager с указателем на плагин Github.


Выберите плагин Github .


Шаг 5. Установите плагин Github Jenkins

Выберите плагин Github . А затем нажмите кнопку «Установить без перезагрузки» .


Снимок экрана веб-страницы диспетчера плагинов Jenkins с указателем на кнопку «Установить без перезагрузки».


Дождитесь окончания загрузки плагина Github.


Снимок экрана веб-страницы Jenkins Plugin Manager с загружаемым плагином Github.


Да! Плагин Jenkins Github установлен.


Шаг 6. Настройте плагин Github Jenkins

Теперь, когда плагин GitHub Jenkins установлен, вы можете настроить этот плагин для окончательной интеграции Jenkins с Git. Для этого вам необходимо вернуться на главную страницу, нажав кнопку «Вернуться на верхнюю страницу».


Снимок экрана веб-страницы диспетчера плагинов Jenkins с указателем на кнопку «Вернуться на верхнюю страницу».


Затем на главной странице нужно нажать кнопку «Управление Jenkins» , а затем нажать кнопку «Глобальная конфигурация инструмента» .


Снимок экрана веб-страницы Jenkins Plugin Manager с указателем на кнопку «Глобальная конфигурация инструмента».


Затем на веб-странице глобальной конфигурации инструментов вам следует перейти в раздел Git.


Снимок экрана веб-страницы глобальной конфигурации инструментов Jenkins с указателем на поля ввода «Имя» и «Путь к исполняемому файлу Git».


В разделе Git вам необходимо настроить Git, указав имя и путь к Git на компьютере.


Затем нажмите кнопки «Применить» и «Сохранить» .**.**


На этом вы завершили настройку плагина Jenkins Github.


Шаг 7. Интегрируйте Git в конвейер

Теперь, когда плагин Jenkins Github установлен и настроен, вы можете использовать его в своем конвейере. Это позволит вашему конвейеру, который вы создали в модуле 2, извлекать код вашего проекта из указанного репозитория GitHub.


Что ж, чтобы интегрировать этот плагин в свой конвейер, вам нужно перейти в раздел «Управление исходным кодом» и выбрать Git в своем конвейере. Затем вам нужно указать URL-адрес репозитория вашего проекта. Если репозиторий вашего проекта общедоступен на Github, вам не нужно предоставлять учетные данные. Если репозиторий проекта является частным на Github, вам необходимо предоставить учетные данные.


Снимок экрана веб-страницы конфигурации задания Jenkins с настройками «Управление исходным кодом».


Вы можете использовать мой проект по следующему URL-адресу репозитория: https://github.com/Sunagatov/Hello.git .

Просто скопируйте и вставьте его в поле « URL-адрес репозитория» . Затем нажмите кнопки «Применить» и «Сохранить» , чтобы завершить интеграцию Git с конвейером.


Шаг 8. Тестируйте Git, интегрированный в конвейер

Теперь вы можете использовать обновленный конвейер для извлечения проекта из Github. Для этого вам нужно нажать кнопку ** «Построить сейчас»**. В результате вы увидите успешную сборку в истории сборок.


Снимок экрана веб-страницы Jenkins с указателями на кнопку «Создать сейчас» и раздел «История сборки».



Откройте первую сборку из истории сборок.

Скриншот Jenkins Pull_Code_From_Github_Job с успешным результатом задания.


Теперь вы можете увидеть успешный результат работы первой сборки. Если вы откроете свой терминал AWS EC2. Вы можете проверить, что конвейер работает хорошо.


Просто используйте эту команду.

 cd /var/lib/jenkins/workspace/{your pipeline name}


Таким образом, вы увидите, что ваш проект из Github был перенесен на ваш экземпляр виртуального сервера AWS EC2.


Скриншот проекта Github, загруженный в терминал экземпляра EC2.



[Модуль 4]: Apache Maven

Apache Maven — широко используемый инструмент автоматизации сборки и управления проектами при разработке программного обеспечения. Он оптимизирует процесс компиляции, тестирования и упаковки кода, управляя зависимостями проекта и обеспечивая согласованный жизненный цикл сборки. Maven использует файлы конфигурации на основе XML (файлы POM) для определения структуры проекта, зависимостей и задач, что позволяет разработчикам эффективно управлять сложными программными проектами и развертывать их.


Теперь, когда вы интегрировали Git в конвейер, вы можете еще больше улучшить его, включив Apache Maven, который позволяет создавать, тестировать и упаковывать проект. Для этого вам необходимо установить Apache Maven на экземпляр виртуального сервера AWS EC2, где были установлены Jenkins и Git.


Шаг 1. Загрузите Apache Maven

Чтобы загрузить Apache Maven, перейдите в каталог «/opt» .

 cd /opt


А затем используйте эту команду.

 sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz


Эта команда загрузит последнюю официальную версию Apache Maven (проверьте последнюю версию на официальном веб-сайте Apache Maven). Чтобы найти последнюю официальную версию Apache Maven, воспользуйтесь ссылкой https://maven.apache.org/download.cgi .


Шаг 2. Извлеките Apache Maven из архива.

Используйте эту команду, чтобы извлечь Apache Maven из загруженного архива:

 sudo tar -xvzf apache-maven-*.tar.gz


Шаг 3. Добавьте JAVA_HOME и M2_HOME.

Перейдите в корневую папку с помощью этой команды.

 cd ~


Отредактируйте файл .bash_profile с помощью этой команды.

 vi .bash_profile


Добавьте переменные JAVA_HOME и M2_HOME.


Назначьте путь к JDK11 для JAVA_HOME и путь к каталогу maven для переменной M2_HOME .


Чтобы найти путь к JDK, используйте эту команду.

 sudo find / -name java 



Снимок экрана веб-страницы терминала экземпляра виртуального сервера AWS EC2 с файлом .bash_profile.


Как использовать ВИМ

  • Чтобы отредактировать файл, нажмите кнопку клавиатуры «I» , чтобы вставить данные.
  • Чтобы сохранить файл, нажмите кнопку клавиатуры «esc» и введите «:w».
  • Для выхода из файла нажмите кнопку клавиатуры «esc» и введите «:q» .

Сохраните изменения.


Затем выполните эту команду, чтобы обновить системные переменные.

 source .bash_profile


Чтобы проверить $PATH , используйте эту команду.

 echo $PATH


Чтобы проверить Apache Maven , используйте эту команду.

 mvn -v


Если вы все сделали правильно, вы сможете просмотреть версию Apache Maven.

Снимок экрана веб-страницы терминала экземпляра виртуального сервера AWS EC2 с версией Apache Maven.


Шаг 4. Установите плагин Apache Maven Jenkins.

Поскольку Apache Maven можно использовать в экземпляре EC2, вы можете установить плагин Apache Maven, чтобы интегрировать его с конвейером.


Чтобы добиться этого, выполните следующие действия:

  1. Перейдите в «Панель управления» → «Управление Jenkins» → «Управление плагинами» → «Доступно».
  2. В поле поиска введите «Maven» .
  3. Выберите плагин «Интеграция Maven» .


Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на плагин Maven.


Дождитесь окончания процесса загрузки.


А затем нажмите кнопку «Вернуться на верхнюю страницу» .

Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на процесс загрузки плагина Maven.


Шаг 5. Настройте плагин Apache Maven Jenkins

После успешной установки плагина Apache Maven Jenkins вы теперь можете использовать этот плагин в конвейере, который вы создали и обновили в модулях 2 и 3.


Для этого выполните следующие действия:

  1. Перейдите в «Панель управления» → «Управление Jenkins» → «Глобальная конфигурация инструментов» → «JDK».
  2. Нажмите кнопку «Добавить JDK».
  3. Снимите флажок «Установить автоматически».



Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на конфигурацию JDK.



Затем перейдите в раздел «Maven» . Нажмите кнопку «Добавить Maven» . Снимите флажок «Установить автоматически».

Затем добавьте имя и путь MAVEN_HOME .



Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на конфигурацию Apache Maven.



Нажмите кнопки «Применить» и «Сохранить» .

На этом вы завершили настройку плагина Apache Maven Jenkins.


Шаг 6. Интегрируйте Apache Maven в конвейер

Теперь, когда плагин Apache Maven GitHub установлен и настроен, вы можете использовать Apache Maven в своем конвейере. Это позволит вашему конвейеру, который вы создали в «[модуле 2]: Jenkins Server», построить код вашего проекта для создания артефакта jar.


Чтобы интегрировать Apache Maven в конвейер, вам необходимо выполнить следующие шаги:

  1. Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Шаги сборки».
  2. Нажмите кнопку «Добавить шаг сборки» .
  3. Выберите опцию «Вызвать цели Maven верхнего уровня» .
  4. Выберите «Apache-Maven» в качестве «Версия Maven».
  5. Добавьте команду «очистить пакет» во входные данные «Цели» .
  6. Нажмите кнопку «Дополнительно» .
  7. Добавьте «pom.xml» во входные данные «POM» .



Снимок экрана раздела «Шаги сборки» в конфигурации конвейера с указателями на кнопки «Применить» и «Сохранить».



Наконец, вам следует нажать кнопки «Применить» и «Сохранить» , чтобы завершить интеграцию Apache Maven с конвейером.

Шаг 7. Тестирование Apache Maven, интегрированного в конвейер

Теперь вы можете использовать обновленный конвейер для создания проекта Github. Для этого вам нужно нажать кнопку ** «Построить сейчас»**. В результате вы увидите успешный результат задания в истории сборки.

Если вы откроете свой терминал AWS EC2. Вы можете проверить, что конвейер работает хорошо.


Просто используйте эту команду.

 cd /var/lib/jenkins/workspace/{your pipeline name}/target


Таким образом вы сможете увидеть артефакт JAR, указывающий на успешную сборку вашего проекта с GitHub.



[Модуль 5]: Докер

Теперь давайте создадим новый экземпляр EC2 с именем «Ansible Server», куда вы собираетесь установить Docker и Ansible.


Шаг 1. Запустите экземпляр виртуального сервера AWS EC2.

Чтобы завершить этот шаг, используйте инструкции из раздела « Запуск экземпляра виртуального сервера AWS EC2» этого руководства. Не забудьте добавить настройку группы безопасности. Это позволяет Docker и SSH работать через порты 8080 и 22 соответственно.


Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2.

Нажмите кнопку «Подключиться».

Скриншот веб-страницы AWS с указателем на кнопку «Подключиться».


Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2.


 sudo chown ansible-admin:ansible-admin /opt/docker


Шаг 3. Установите Docker на виртуальный сервер Ansible EC2.

Теперь вам нужно установить Docker на ваш экземпляр Ansible EC2. Для этого вам нужно создать новую папку Docker.

 sudo mkdir /opt/docker


Затем установите Docker, выполнив следующую команду.

 sudo yum install docker -y


Шаг 4. Добавьте текущего пользователя в группу Docker на виртуальном сервере Ansible EC2.

Вам необходимо добавить текущего пользователя ansible-admin в группу Docker на виртуальном сервере EC2 AnsibleServer , чтобы предоставить права администратора Docker.


 sudo usermod -a -G docker ansible-admin


Вам нужно будет выйти из системы и снова войти в систему, чтобы эти изменения вступили в силу.


Затем вы можете выполнить следующую команду

 id ansible-admin


чтобы увидеть, что новый пользователь докера существует.


Снимок экрана экземпляра Ansible EC2 с указателем на пользователя докера.


Шаг 5: Запустите Докер

Теперь, когда Docker установлен на экземпляре Ansible EC2, вы можете запустить его, выполнив следующую команду.

 sudo systemctl start docker


Когда Docker запустится, вы можете выполнить следующую команду

 sudo systemctl status docker


чтобы увидеть, что докер активен и работает.

Снимок экрана экземпляра Ansible EC2 с активным статусом докера.


Шаг 6. Создайте файл Dockerfile.

В окончательной версии конвейера этот процесс будет включать создание нового образа Docker из вашего проекта GitHub и отправку его в Docker Hub. Для этого ваш проект GitHub должен содержать файл Dockerfile.


Если вы использовали проект «Hello» , который предлагался в модуле « [Модуль 3]: Git и Github» , вам не нужно создавать новый Dockerfile, поскольку этот репозиторий проекта уже содержит Dockerfile.


 FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]


Если вы использовали собственный репозиторий проекта и он не содержал Dockerfile, вам потребуется создать новый Dockerfile.


Чтобы создать новый файл Dockerfile, выполните следующую команду, которая создаст новый файл.

 sudo touch Dockerfile


Затем вы можете заполнить этот файл последовательностью команд, описывающих, как построить контейнерную среду приложения. Эти команды включают в себя такие действия, как копирование файлов в образ, установку программного обеспечения, настройку переменных среды и настройку контейнера.


Чтобы заполнить Dockerfile этими командами, выполните следующую команду.

 vim Dockerfile

Dockerfile готов к использованию.


Шаг 7: Войдите в Docker

Теперь, когда ваш Dockerfile подготовлен к использованию, скопируйте артефакт JAR вашего проекта из экземпляра **"JenkinsServer"**EC2 и вставьте его в экземпляр EC2 "AnsibleServer" . Важно отметить, что в дальнейшем эта передача через конвейер будет автоматизирована.

Выполнив этот шаг, вы будете готовы протестировать свой Dockerfile вместе с настроенной вами средой Docker.


Прежде чем приступить к тестированию, обязательно авторизируйтесь в Dockerhub. Выполните следующую команду.

 docker login


Эта команда предложит вам ввести учетные данные для входа в Dockerhub, включая имя пользователя и пароль.

Снимок экрана успешного входа в докер в экземпляре EC2 «AnsibleServer»


На этом вы завершили процесс входа в Docker и теперь готовы приступить к тестированию.

Шаг 8. Тестирование среды Docker и Dockerfile.

После успешного входа в Dockerhub вы готовы начать тестирование подготовленного Dockerfile.


Выполните эту команду, чтобы создать образ Docker.

 docker build -t hello:latest .


Затем выполните следующую команду, чтобы установить тег, который облегчит загрузку изображения в Dockerhub:

 docker tag hello:latest zufarexplainedit/hello:latest


Наконец, приступите к отправке образа Docker в Dockerhub, выполнив эту команду.

 docker push zufarexplainedit/hello:latest


Выполнив следующие действия, перейдите в свою учетную запись Dockerhub, чтобы проверить, видите ли вы новое изображение или нет.

Скриншот учетной записи Dockerhub с добавленным новым изображением.


Теперь вы должны заметить, что изображение было эффективно добавлено. Этот результат подтверждает успешную установку среды Docker и правильность вашего Dockerfile.



[Модуль 6]: Ansible

Теперь давайте настроим сервер Ansible на экземпляре виртуального сервера EC2.


Шаг 1. Создайте экземпляр виртуального сервера AWS EC2.

Для запуска Ansible вам понадобится виртуальный сервер.


Следуйте инструкциям из раздела [Модуль 1]: Виртуальный сервер AWS EC2 этого руководства, чтобы завершить этот шаг и создать экземпляр виртуального сервера EC2 для Ansible.

Не забудьте добавить настройку группы безопасности. Это позволяет Ansible и SSH работать через порты 8080 и 22 соответственно.


Используйте имя «AnsibleServer» , чтобы отличить экземпляр виртуального сервера EC2.

Вы можете повторно использовать группу безопасности «CI_CD_Pipeline» и «CI_CD_Pipeline_Key_Pair» для нового экземпляра EC2 «AnsibleServer» .


Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2.

Перейдите на домашнюю страницу консоли AWS → Панель управления консоли управления EC2 → Экземпляры → AnsibleServer.


Затем нажмите кнопку «Подключиться» .

Скриншот веб-страницы AWS с указателем на кнопку «Подключиться».


Затем вы увидите эту веб-страницу. Вам следует еще раз нажать кнопку «Подключиться» .


Снимок экрана веб-страницы AWS «Подключиться к экземпляру» с указателем на кнопку «Подключиться».


Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2.


Теперь давайте настроим Ansible Server на экземпляре виртуального сервера EC2.

Шаг 3. Измените имя хоста экземпляра виртуального сервера AWS EC2 AnsibleServer.

Первое, что вам нужно сделать, если вы хотите настроить AnsibleServer на экземпляре виртуального сервера EC2, — это изменить его имя хоста.


Давай сделаем это. Выполните эту команду, чтобы открыть файл имени хоста:

 sudo vi /etc/hostname


Вы должны увидеть что-то вроде этого:

Снимок экрана экземпляра виртуального сервера AWS EC2 с файлом имени хоста.


Замените это имя хоста на «ansible-server». Затем перезагрузите его.

 sudo init 6 



Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на имя хоста.


Шаг 4. Добавьте и настройте нового пользователя в экземпляре виртуального сервера AWS EC2 AnsibleServer.

Теперь давайте добавим нового пользователя ansible-admin в экземпляр виртуального сервера AWS EC2.

Для этого используйте эту команду:


 sudo useradd ansible-admin


Затем установите пароль для пользователя ansible-admin .

 sudo passwd ansible-admin


Также вам необходимо настроить права пользователя, отредактировав файл sudoers .

 sudo visudo


Добавьте «ansible-admin ALL=(ALL) ALL» в этот файл sudoers .

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на права администратора.


Кроме того, вам необходимо отредактировать файл /etc/ssh/sshd_config , чтобы включить проверку подлинности пароля.

 sudo vi /etc/ssh/sshd_config 


Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на настройки администратора.


Затем вам необходимо перезагрузить сервис, чтобы подтвердить эти изменения.

 sudo service sshd reload


В результате выполнения этой команды вы увидите:


Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на результат перезагрузки sshd.


Теперь вы можете использовать эту команду, чтобы не добавлять sudo для всех дальнейших команд.

 sudo su - ansible-admin


Шаг 5. Создайте ключ на экземпляре виртуального сервера AWS EC2.

Далее в этой статье вы планируете управлять удаленными серверами, такими как экземпляры виртуальных серверов K8s EC2. Вот почему вам необходимо настроить ключи SSH.

 ssh-keygen


В результате выполнения этой команды вы увидите:

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на результат ssh-keygen.


Теперь ключи SSH сгенерированы и готовы к использованию.

Шаг 6. Установите Ansible

Теперь вы можете установить Ansible на свой экземпляр виртуального сервера EC2 «AnsibleServer» .

Давай сделаем это.


Выполните эту команду, чтобы установить Ansible.

 sudo amazon-linux-extras install ansible2


Чтобы проверить Ansible, используйте следующую команду:

 ansible --version


В результате выполнения этой команды вы увидите:

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на sudo yum install ansible result.


Шаг 7. Установите плагин Jenkins «Публикация через SSH» на экземпляре JenkinsServer EC2.

Поскольку Ansible установлен на вашем экземпляре виртуального сервера EC2 «AnsibleServer» , вы можете настроить Jenkins для его интеграции с Ansible. Вам необходимо установить плагин «Publish over SSH» , чтобы интегрировать Jenkins с экземпляром виртуального сервера EC2, на котором установлен Ansible, и с другими экземплярами виртуального сервера EC2, на которых установлен Kubernetes .


Перейдите в «Панель управления» → « Управление Jenkins»«Настроить систему»«Доступные плагины» .

Затем введите «Опубликовать через SSH» в поле поиска.


Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на веб-страницу «Доступные плагины».


Нажмите кнопку «Установить без перезагрузки» . Дождитесь окончания процесса загрузки.


Снимок экрана Jenkins, установленного на виртуальном сервере AWS EC2, с указателем на веб-страницу «Ход загрузки».



Теперь плагин «Публикация через SSH» установлен на экземпляре виртуального сервера Jenkins EC2.


Шаг 8. Настройте плагин Jenkins «Публикация через SSH».

После успешной установки плагина Apache Maven Jenkins вы теперь можете использовать этот плагин в конвейере, который вы создали и обновили в модулях 2 и 3.


Для этого выполните следующие действия:


Перейдите в «Панель управления»«Управление Jenkins»«Настроить систему»«Публикация через SSH» .

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с плагином «Публикация через SSH».


Введите все необходимые данные, как показано на скриншоте, включая имя хоста, имя пользователя и закрытый ключ (или пароль, если применимо).


Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с плагином «Публикация через SSH».


Затем нажмите кнопки «Применить» и «Сохранить» .


На этом вы завершили настройку плагина Jenkins «Публикация через SSH» .


Затем нажмите «Проверить конфигурацию», чтобы убедиться, что плагин работает правильно.



Скриншот плагина «Опубликовать через SSH» с кнопкой «Проверить конфигурацию»


С левой стороны вы можете видеть, что статус конфигурации тестового плагина — «Успех». Это означает, что конфигурация плагина правильная.


Шаг 9. Создайте новый каталог Docker в AnsibleServer.

Вам необходимо создать новую папку на экземпляре AnsibleServer EC2, в которой будет храниться JAR-файл проекта. Этот jar-файл позже будет использоваться для создания образа Docker.


Давайте начнем.


Перейдите в папку «/opt» в экземпляре AnsibleServer EC2.

 cd /opt


Создайте там новую папку «docker» .

 sudo mkdir docker


Дайте привилегии этой папке «docker» .

 sudo chown ansible-admin:ansible-admin docker


Теперь проверьте права доступа к папке «docker» , выполнив эту команду.

 ll


Вы можете видеть, что папка «docker» доступна пользователю «ansible-admin» .


Снимок экрана папки «docker» в экземпляре EC2 «AnsibleServer».


Шаг 10. Интегрируйте плагин Github «Публикация через SSH» в конвейер.


Теперь, когда плагин Github «Публикация через SSH» установлен и настроен, вы можете интегрировать его в конвейер, который вы создали в «[модуле 2]: Jenkins Server», для передачи артефакта jar проекта из « JenkinsServer» в «Ансиблсервер» .


Что ж, чтобы интегрировать плагин Github «Публикация через SSH» в конвейер, вам необходимо выполнить следующие шаги:


  1. Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Действия после сборки».
  2. Нажмите кнопку «Добавить действие после сборки» .
  3. Выберите опцию «Отправить артефакты сборки через SSH» .
  4. Добавьте «AnsibleServer» в поле «Имя» в разделе «SSH-сервер» .**.**
  5. Добавьте «target/*.jar» во входные данные «Исходные файлы» в разделе «Набор передачи» **.**
  6. Добавьте «target/» в поле «Удалить префикс» в разделе «Набор передачи» **.**
  7. Добавьте «//opt/docker/» в поле «Удаленный каталог» в разделе «Набор передачи» **.**
  8. А пока просто поместите пустую строку во входные данные «Команда Exec» в разделе «Набор передачи».



Снимок экрана раздела «Отправить артефакт сборки через SSH» в конфигурации конвейера.


Наконец, вам следует нажать кнопки «Применить» и «Сохранить» , чтобы завершить интеграцию плагина «Публикация через SSH» с конвейером.


Шаг 11. Протестируйте плагин Github «Публикация через SSH», интегрированный в конвейер.

Теперь вы можете использовать обновленный конвейер для переноса артефакта jar проекта из JenkinsServer в AnsibleServer . Для этого вам нужно нажать кнопку «Построить сейчас» . В результате вы увидите успешный результат задания в истории сборки.


Если вы откроете терминал AWS EC2 «AnsibleServer» . Вы можете проверить, что конвейер работает хорошо.

Просто используйте эту команду.


 cd /opt/docker


Таким образом вы сможете увидеть артефакт JAR, указывающий на успешную сборку вашего проекта с GitHub.

Снимок экрана каталога /opt/docker с артефактом jar проекта.


Шаг 12. Настройте хосты Ansible

Когда вы запускаете книгу воспроизведения Ansible, вы указываете хосты, на которых она должна работать. Вы можете сделать это двумя способами:


  1. Укажите хосты непосредственно в плейбуке. В плейбуке вы можете установить для параметра hosts список IP-адресов или имен хостов.
  2. Использовать файл инвентаризации: Ansible позволяет вам определить список хостов в файле инвентаризации и ссылаться на этот файл при запуске вашей книги игр. Файл инвентаризации по умолчанию — /etc/ansible/hosts .


Редактируя /etc/ansible/hosts , вы можете легко управлять группами хостов без необходимости записывать их IP-адреса каждый раз, когда вы запускаете сборник сценариев.


Давайте узнаем хост экземпляра AnsibleServer EC2, выполнив следующую команду.

 sudo ifconfig 


Снимок экрана с настройками сетевого интерфейса экземпляра AnsibleServer EC2.


После того, как вы найдете хост экземпляра AnsibleServer EC2, вы можете добавить его в файл хостов Ansible, выполнив следующую команду.


 sudo vi /etc/ansible/hosts


Вы также можете добавить «[ansible]» в качестве ссылки.

Скриншот файла Ansible Hosts


Если вы управляете кластером серверов и хотите применить книгу ко всем из них, вместо указания IP-адреса каждого сервера в книге, вы можете просто добавить все серверы в группу в файле инвентаризации, а затем указать группа в сборнике игр.


Шаг 13. Настройте SSH-аутентификацию без пароля на локальном хосте для Ansible

Ansible предназначен для автоматизации задач на удаленных серверах. Аутентификация SSH без пароля позволяет Ansible подключаться к этим серверам без необходимости ввода пароля вручную.

Выполните эту команду, чтобы создать безопасное соединение вашего компьютера с другим компьютером (например, с IP-адресом 172.31.34.41), используя SSH-ключ пользователя ansible-admin.


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


В моем случае это выглядит так.

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


Снимок экрана с результатом успешной установки аутентификации SSH без пароля.


Теперь вы можете увидеть «Количество добавленных ключей: 1» . Это означает, что установка аутентификации SSH без пароля успешно завершена.

Шаг 14. Создайте новый сборник сценариев Ansible для задач Docker.

Теперь, когда Ansible настроен и готов к работе, вы можете создать новый сборник сценариев Ansible для своего конвейера. Этот сборник сценариев позволит Ansible создать и отправить новый образ Docker в Dockerhub.

Вот как вы можете это сделать:


  1. Начните с создания нового файла книги воспроизведения Ansible. Просто используйте эту команду.
 touch hello-app.yml


  1. Затем отредактируйте только что созданный файл hello-app.yml . Откройте его для редактирования с помощью этой команды.
 vi hello-app.yml


  1. Внутри файла введите следующее.
 --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest

Сборник сценариев Ansible для задач Docker готов к использованию.

Шаг 13. Проверьте сборник сценариев Ansible с помощью задач Docker.

Когда Ansible, Ansible playbook, AnsibleServer и JenkinsServer настроены правильно, пришло время протестировать Ansible playbook.


Перейдите к местоположению вашей книги пьес Ansible.

 cd /opt/docker


Затем выполните следующую команду.

 sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml


По завершении вы увидите успешный результат выполнения вашего сборника сценариев Ansible.

Скриншот успешного результата выполнения ansible playbook для задач докера


Кроме того, найдите время, чтобы посетить свою учетную запись Dockerhub и проверить, видно ли теперь новое изображение.


Скриншот учетной записи Dockerhub с добавленным новым изображением.


Вы должны увидеть только что добавленное изображение. Этот результат подтверждает, что ваш сборник сценариев Ansible верен.


Шаг 14. Интегрируйте задачи Ansible Docker в конвейер

Теперь, когда плагин Github «Публикация через SSH» , Ansible и Docker установлены и настроены, вы можете интегрировать их все в конвейер, который вы создали в «[модуле 2]: Jenkins Server», для передачи артефакта jar проекта. с « JenkinsServer» на «AnsibleServer» , а затем создайте новый образ Docker из своего проекта и затем отправьте этот образ Docker на Dockerhub.


Чтобы добиться этого, вам необходимо выполнить следующие шаги:

  1. Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Действия после сборки» → «Отправить артефакты сборки через SSH».
  2. Добавьте команду «sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml» во входные данные «Команда Exec» .


Снимок экрана раздела «Отправить артефакт сборки через SSH» в конфигурации конвейера.


Наконец, нажмите кнопки «Применить» и «Сохранить» , чтобы завершить интеграцию задач Ansible Docker с конвейером.

Шаг 15. Тестируйте «Ansible playbook с задачами Docker » , интегрированный в конвейер.

Теперь вы можете протестировать обновленный конвейер, чтобы беспрепятственно перенести артефакт jar проекта из « JenkinsServer» в «AnsibleServer» , затем создать новый образ Docker из своего проекта и затем отправить этот образ Docker в Dockerhub. Для этого вам нужно нажать кнопку «Построить сейчас» . В результате вы увидите успешный результат задания в истории сборки.


Кроме того, найдите время, чтобы посетить свою учетную запись Dockerhub и проверить, видно ли теперь новое изображение.


Скриншот учетной записи Dockerhub с добавленным новым изображением.


Вы должны увидеть только что добавленное изображение. Этот результат подтверждает, что ваш сборник сценариев Ansible с задачами Docker был успешно интегрирован в конвейер.


[Модуль 7]: Кубернетес

Теперь давайте настроим K8s на экземпляре EC2. Вы собираетесь создать новый экземпляр EC2 и установить инструмент командной строки kubectl для дальнейшего взаимодействия с кластером Kubernetes .


Шаг 1. Запустите экземпляр виртуального сервера AWS EC2.

Чтобы завершить этот шаг, используйте инструкции из раздела « Запуск экземпляра виртуального сервера AWS EC2» этого руководства.


Не забудьте добавить настройку группы безопасности. Это позволяет всем инструментам и SSH работать через порты 8080 и 22 соответственно.


Используйте имя «K8sServer» , чтобы отличить экземпляр виртуального сервера EC2.

Вы можете повторно использовать группу безопасности «CI_CD_Pipeline» и «CI_CD_Pipeline_Key_Pair» для нового экземпляра EC2 «K8sServer» .


Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2.

Нажмите кнопку «Подключиться».

Скриншот веб-страницы AWS с указателем на кнопку «Подключиться».


Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2.


Шаг 3. Измените имя хоста экземпляра виртуального сервера AWS EC2 «KubernetesServer».

Первое, что вам нужно сделать, если вы хотите настроить KuberenetesServer на экземпляре виртуального сервера EC2, — это изменить его имя хоста.


Давай сделаем это. Выполните эту команду, чтобы открыть файл имени хоста:

 sudo vi /etc/hostname


Вы должны увидеть что-то вроде этого.

Снимок экрана экземпляра виртуального сервера AWS EC2 с файлом имени хоста.


Замените это имя хоста на «kubernetes-server», а затем перезагрузите его.

 sudo init 6


Ваше имя хоста было изменено.

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на имя хоста.


Шаг 4. Проверьте версию AWS CLI

Используйте эту команду, чтобы проверить версию AWS .

 aws --version


Таким образом, вы сможете увидеть текущую версию aws-cli.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с результатом команды версии aws.


Если вы видите версию aws-cli/1.18 , вам следует загрузить последнюю версию.


Шаг 5. Обновите интерфейс командной строки AWS.

Теперь, когда вы узнали, что на вашем экземпляре EC2 установлена старая версия aws-cli, вам необходимо ее обновить. Для этого перейдите в AWS → Документация → Интерфейс командной строки AWS → Руководство пользователя для версии 2.


Снимок экрана веб-страницы экземпляра виртуального сервера AWS EC2 с руководством пользователя для версии 2.


Скопируйте и вставьте команду Curl .


Сначала выполните эту команду, чтобы загрузить awscli версии 2.

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

Подождите, пока начнется процесс загрузки.


Вы должны увидеть что-то вроде этого.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с результатом загрузки aws версии 2.


Во-вторых, вам нужно выполнить эту команду, чтобы распаковать архив awscli версии 2.

 unzip awscliv2.zip


В-третьих, вам следует выполнить эту команду, чтобы установить awscli версии 2.

 sudo ./aws/install


Затем перезагрузите онлайн-терминал экземпляра виртуального сервера Kubernetes EC2.


Затем используйте эту команду, чтобы проверить версию AWS.

 aws --version


Вы можете видеть, что у aws cli есть aws-cli/2.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с результатом команды версии aws.


Шаг 6. Установите кубектл

Kubectl — это фундаментальный инструмент командной строки для взаимодействия с любым кластером Kubernetes, независимо от базовой инфраструктуры. Он позволяет вам управлять ресурсами, развертывать приложения, настраивать сеть, получать доступ к журналам и выполнять различные другие задачи в кластере Kubernetes.


Теперь вам нужно установить инструмент командной строки kubectl для дальнейшего взаимодействия с кластером Kubernetes. Для этого вам нужно перейти в AWSДокументацияAmazon EKSРуководство пользователяУстановка или обновление kubectlLinux .


Или просто нажмите ссылку https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html .


Скриншот руководства пользователя AWS EKS.



Сначала выполните эту команду, чтобы загрузить kubectl.

 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl


Дождитесь процесса загрузки.


Вы увидите что-то вроде этого.

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с загрузкой результата kubectl.


Дайте разрешение kubectl.

 chmod +x kubectl


Переместите kubectl в папку /usr/local/bin.

 sudo mv kubectl /usr/local/bin


Проверьте версию kubectl.

 kubectl version --output=yaml


Шаг 7: Установите exctl

Eksctl — еще один инструмент командной строки, специально разработанный для сервиса Amazon EKS. Eksctl можно использовать для создания кластеров AWS EKS, управления группами узлов и выполнения задач, специфичных для EKS, таких как интеграция с ролями IAM и другими сервисами AWS, абстрагируя большую часть настройки и управления инфраструктурой AWS.


Выполните команду для загрузки kubectl.

 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp


Переместите eksctl в папку /usr/local/bin.

 sudo mv /tmp/eksctl /usr/local/bin


Проверьте версию eksctl.

 eksctl version


Вы должны увидеть версию

Снимок экрана онлайн-терминала экземпляра виртуального сервера AWS EC2 с версией eksctl.


Шаг 8. Создайте роль IAM для eksctl

Вам необходимо создать роль IAM и прикрепить ее к вашему экземпляру EC2 «KubernetesServer» .

Для этого вам нужно найти EC2 в поле поиска.


Выберите виртуальный сервер EC2, перейдя по ссылке https://us-east-1.console.aws.amazon.com/ec2/ .

Скриншот веб-страницы AWS с указателем на «IAM».


Перейдите в Панель управления IAMРоли .

Скриншот веб-страницы AWS с указателем на «Роли IAM».


Нажмите кнопку «Создать роль» на веб-странице ролей IAM .


Затем выберите «Сервис AWS», «EC2». И нажмите кнопку «Далее» .

Снимок экрана веб-страницы AWS с указателем на «Конфигурацию ролей IAM».


Затем найдите «AmazonEC2FullAccess» , «AmazonEC2FullAccess» , «IAMFullAccess» , «AWSCloudFormationFullAccess» в поле поиска и нажмите кнопку «Добавить разрешения» .


И затем нажмите кнопку «Далее» .

Снимок экрана веб-страницы AWS с указателем на разрешение администратора.

Затем введите «Eksctl_Role» в поле «Имя роли» .

И нажмите кнопку «Создать роль» .

Снимок экрана веб-страницы AWS с указателем на настройку роли разрешений.


Роль наконец создана.


Шаг 9. Подключите роль IAM с помощью eksctl

Перейдите на веб-страницу экземпляра AWS EC2. Выберите «KuberbetesServer». Затем нажмите «Действия»«Безопасность»«Изменить роль IAM».


Снимок экрана веб-страницы AWS с указателем на кнопку KubernetesServer Security.



Выберите «Eksctl_Role» , а затем нажмите кнопку «Обновить роль IAM» .


Снимок экрана веб-страницы AWS с указателем на роль IAM Elsctl_Role.


Теперь ваша роль IAM связана с вашим «EKS_Server» и инструментом eksctl.

Шаг 10. Создайте кластер eksctl


Кластер Amazon EKS (Elastic Kubernetes Service) — это управляемая среда Kubernetes на AWS, автоматизирующая сложные инфраструктурные задачи, такие как настройка, масштабирование и обслуживание. Это очень важно, поскольку оно обеспечивает эффективную, безопасную и оптимизированную для AWS платформу для развертывания, управления и масштабирования контейнерных приложений, оптимизации операций и позволяет разработчикам сосредоточиться на кодировании, а не на управлении базовой инфраструктурой.


Теперь пришло время настроить кластер EKS.


Чтобы добиться этого, выполните следующие действия:


  1. Измените следующую команду, указав свою конкретную информацию.
 eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>


Например, в моем случае это выглядит так.

 eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro


  1. Выполните измененную команду и терпеливо дождитесь завершения процесса создания кластера. Вы заметите, что на веб-странице AWS CloudFormation статус кластера EKS указан как «создается» .


Снимок экрана веб-страницы AWS с указателем на AWS CloudFormation, где вы можете увидеть статус «создания» кластера EKS.


Процедура создания кластера обычно занимает около 20 минут. После завершения терминал отобразит результат процесса.


Скриншот веб-страницы AWS с указателем на терминал AWS EC2, где можно увидеть результат создания кластера EKS.


Кроме того, вы можете проверить статус успешного создания кластера EKS на веб-странице AWS CloudFormation.


Скриншот веб-страницы AWS с указателем на AWS CloudFormation, где виден результат создания кластера EKS.


Шаг 11. Создайте yaml-файл развертывания Kubernetes.

YAML-файл развертывания Kubernetes — это сценарий конфигурации, написанный в формате YAML, который определяет, как управлять и поддерживать определенное приложение или службу в кластере Kubernetes. Он инкапсулирует инструкции по организации развертывания, масштабирования, обновления и мониторинга контейнеров, в которых выполняется приложение. Этот файл содержит такие сведения, как образ контейнера, желаемое количество реплик, ограничения ресурсов, переменные среды, настройки сети и многое другое. При применении к кластеру Kubernetes YAML-файл развертывания обеспечивает желаемое состояние приложения, автоматически управляя созданием, масштабированием и восстановлением контейнеров для поддержания желаемого уровня доступности и надежности.


Теперь, когда кластер Kubernetes, eksctl, kubectl установлены и настроены, вы можете создать yaml-файл развертывания Kubernetes.


Вы можете сделать это, выполнив следующую команду.

 touch hello-app-deployment.yaml


Затем отредактируйте этот файл, выполнив следующую команду.

 vi hello-app-deployment.yaml


Добавьте это содержимое в файл hello-app-deployment.yaml.

 apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1


Теперь файл hello-app-deployment.yaml создан и готов к использованию.


Шаг 12. Создайте YAML-файл службы Kubernetes.

YAML-файл службы Kubernetes — это сценарий конфигурации, написанный в формате YAML, который определяет сетевую абстракцию для набора модулей, обеспечивая согласованный доступ к ним в кластере Kubernetes. В этом файле описывается, как служба должна обнаруживаться, получать к ней доступ и распределять нагрузку другими службами или внешними клиентами. Он включает в себя такие характеристики, как тип службы (ClusterIP, NodePort, LoadBalancer), номера портов, селекторы для идентификации модулей и многое другое. При применении к кластеру Kubernetes файл YAML службы создает виртуальный IP-адрес и порт, которые направляют трафик к соответствующим модулям, абстрагируя изменения базового модуля и обеспечивая стабильную конечную точку для связи, обеспечивая плавное подключение и динамическое масштабирование.


Поскольку кластер Kubernetes, eksctl, kubectl установлены и настроены, вы можете создать yaml-файл службы Kubernetes.


Для этого вам необходимо создать yaml-файл службы Kubernetes, выполнив следующую команду.

 touch hello-app-service.yaml


Затем отредактируйте этот файл, выполнив следующую команду.

 vi hello-app-service.yaml


Добавьте это содержимое в файл hello-app-deployment.yaml.

 apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer

Теперь файл hello-app-service.yaml создан и готов к использованию.


Шаг 13. Тестирование кластера Kubernetes с помощью kubectl

После того, как ваш кластер Kubernetes EKS успешно установлен и настроен, а также готовы файлы службы и развертывания Kubernetes, пришло время протестировать ситуацию с помощью команд kubectl.


  1. Применить развертывание.

    Используйте следующую команду, чтобы применить конфигурацию развертывания.

 kubectl apply -f hello-app-deployment.yaml

Это создаст развертывание с указанным количеством реплик и стратегией непрерывного обновления, гарантируя доступность и управляемость вашего приложения.


2. Применить Сервис.

Затем примените конфигурацию службы.

 kubectl apply -f hello-app-service.yaml

При этом будет настроена служба типа LoadBalancer, предоставляющая доступ к вашему приложению из Интернета.

Обратите внимание, что подготовка LoadBalancer и получение внешнего IP-адреса может занять некоторое время.


  1. Проверьте статус LoadBalancer.

    Следите за статусом использования вашего сервиса.

 kubectl get service zufarexplainedit-hello-app-service

Когда назначен внешний IP-адрес, вы почти готовы получить доступ к своему приложению.


  1. Получите доступ к вашему приложению.

    Используя веб-браузер, введите назначенный внешний IP-адрес, а затем: 8080. Через некоторое время страница загрузится и отобразит сообщение «HelloWorld». Имейте в виду, что первоначальная загрузка может занять несколько секунд.


    Скриншот веб-страницы приложения Hello.


Очистка с помощью команд kubectl

Если вам нужно привести в порядок ресурсы в среде Kubernetes, вы можете использовать следующие команды kubectl для эффективного удаления развертываний, модулей и сервисов.


1. Удалите все развертывания .

Чтобы удалить все развертывания, вы можете использовать следующую команду.

 kubectl delete deployments --all

Это действие гарантирует, что в вашем кластере не останется активных экземпляров развертывания.


2. Удалить все модули .

Если вам нужно удалить все модули, независимо от того, управляются ли они развертыванием или нет, вы можете использовать следующую команду.

 kubectl delete pods --all

Очистка модулей может помочь сбросить состояние вашего кластера или подготовиться к новым развертываниям.


3. Удалить все службы .

Чтобы очистить службы, которые предоставляют доступ к вашим приложениям из сети, вы можете использовать следующую команду.

 kubectl delete services --all

Удаление служб может привести к простою, поэтому прежде чем продолжить, учтите последствия.

Удаление кластера Amazon EKS

Чтобы удалить все ресурсы, связанные с указанным кластером Amazon EKS, созданным с помощью eksctl , включая рабочие узлы, сетевые компоненты и другие ресурсы, вы можете использовать следующую команду.

 eksctl delete cluster --name {your cluster name} --region {your region name}

Для меня это.

 eksctl delete cluster --name zufarexplainedit --region eu-north-1

Убедитесь, что вы уверены в необходимости остановки кластера, поскольку это действие необратимо и приведет к потере данных.



Шаг 14. Добавьте и настройте нового пользователя в экземпляре виртуального сервера AWS EC2 «KubernetesServer».

Теперь давайте добавим нового пользователя ansible-admin в экземпляр виртуального сервера AWS EC2 «KubernetesServer» .


Для этого используйте эту команду.

 sudo useradd ansible-admin


Затем установите пароль для пользователя ansible-admin .

 sudo passwd ansible-admin


Также вам необходимо настроить права пользователя, отредактировав файл sudoers .

 sudo visudo


Добавьте «ansible-admin ALL=(ALL) ALL» в этот файл sudoers .

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на права администратора.


Кроме того, вам необходимо отредактировать файл /etc/ssh/sshd_config , чтобы включить проверку подлинности пароля.

 sudo vi /etc/ssh/sshd_config 


Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на настройки администратора.


Затем вам необходимо перезагрузить сервис, чтобы внести эти изменения.

 sudo service sshd reload


В результате выполнения этой команды вы увидите:

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на результат перезагрузки sshd.


Теперь вы можете использовать эту команду, чтобы не добавлять sudo для всех дальнейших команд.

 sudo su - ansible-admin


Шаг 15. Создайте ключ на экземпляре виртуального сервера AWS EC2.

Далее в этой статье вы планируете управлять удаленными серверами, такими как экземпляр виртуального сервера K8s EC2. Вот почему вам необходимо настроить ключи SSH.


 ssh-keygen


В результате выполнения этой команды вы увидите:

Снимок экрана терминала экземпляра виртуального сервера AWS EC2 с указателем на результат ssh-keygen.


Теперь ключи SSH сгенерированы и готовы к использованию.

Шаг 16. Настройте SSH-аутентификацию без пароля на локальном хосте для Ansible

Ansible предназначен для автоматизации задач на удаленных серверах. Аутентификация SSH без пароля позволяет Ansible подключаться к этим серверам без необходимости ввода пароля вручную.

Выполните эту команду, чтобы создать безопасное соединение вашего компьютера с другим компьютером (например, с IP-адресом 172.31.34.41), используя SSH-ключ пользователя ansible-admin.


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


В моем случае это выглядит так.

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


Снимок экрана с результатом успешной установки аутентификации SSH без пароля.


Теперь вы можете увидеть «Количество добавленных ключей: 1» . Это означает, что установка аутентификации SSH без пароля успешно завершена.


Шаг 17. Настройте хосты Ansible в экземпляре AnsibleServer EC2.

Когда вы запускаете книгу воспроизведения Ansible, вы указываете хосты, на которых она должна работать. На этом этапе вам необходимо указать хост экземпляра KubernetesServer EC2. Для этого вам нужно повторить те же шаги, которые вы прошли в « [Модуль 6]: Ansible».


Давайте узнаем хост экземпляра KubernetesServer EC2, выполнив следующую команду.

 sudo ifconfig 


Скриншот файла ifconfig


Найдя хост экземпляра KubernetesServer EC2, вы можете добавить его в файл хостов Ansible, выполнив следующую команду.

 sudo vi /etc/ansible/hosts 


Скриншот файлов «hosts» с хостами ansible и kubernetes.


Вы также можете добавить «[kubernetes]» в качестве ссылки.

Шаг 18. Создайте новый сборник сценариев Ansible для задач Kubernetes.

Теперь, когда Kubernetes настроен и готов к работе, вы можете создать новый сборник сценариев Ansible с задачами Kubernetes для вашего конвейера. Этот сборник сценариев позволит Ansible запускать ваше приложение в кластере Kubernetes с помощью команд kubectl.


Вот как вы можете это сделать:


  1. Начните с создания нового файла книги воспроизведения Ansible. Просто используйте эту команду.
 touch kubernetes-hello-app.yml


  1. Затем отредактируйте только что созданный файл hello-app.yml . Откройте его для редактирования с помощью этой команды.
 vi kubernetes-hello-app.yml


  1. Внутри файла введите следующее:
 --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app

Сборник сценариев Ansible для задач Kubernetes готов к использованию.


Шаг 19. Интегрируйте новый сборник сценариев Ansible для задач Kubernetes с Jenkins.

Теперь, когда Kubernetes, Ansible и Ansible playbook для задач Kubernetes настроены и готовы к работе, вы можете интегрировать их с Jenkins.


  1. Перейдите в JenkinsServer → Панель управления Jenkins → Новый элемент.

  2. Создайте новый проект Jenkins Freestyle с именем «CD-Job».


    Скриншот нового фристайл-проекта Дженкинса "CD-Job"


  3. Нажмите кнопку «ОК».

  4. Перейдите в раздел «Действия после сборки».

  5. Нажмите кнопку «Добавить действие после сборки».

  6. Выберите опцию «Отправить артефакты сборки через SSH».

  7. Выберите «AnsibleServer» в качестве SSH-сервера.

  8. Добавьте эту команду во входную команду «exec command».


 sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml


  1. Нажмите кнопки «Применить» и «Сохранить».

  2. Перейдите на панель управления Jenkins → «CI_CD_Pipeline» → «Настроить» → раздел «Действия после сборки».

  3. Нажмите кнопку «Добавить действие после сборки».

  4. Выберите опцию «Создать другие проекты».

  5. Перейдите в раздел «Создать другие проекты».

  6. Выберите опцию «Триггер только в том случае, если сборка стабильна».

  7. Добавьте «CD-Job» к входным данным «Проект для сборки».



    Скриншот раздела «Создать другие проекты»


  8. Нажмите кнопки «Применить» и «Сохранить».


Теперь можно считать, что трубопровод полностью готов и готов к использованию.


Шаг 20. Тестирование окончательной версии конвейера

Настало время протестировать окончательную версию конвейера.


Перейдите в Jenkins → Панель управления Jenkins → «CI_CD_Pipeline».


Нажмите кнопку «Построить сейчас».


Чтобы увидеть результаты, просмотрите журналы консоли сборки.


Скриншот журналов консоли сборки


Вы заметите, что «CD-Job» был запущен в журналах консоли сборки, а окончательный статус отмечен как «УСПЕХ».

4

Кроме того, вы можете зайти в Dockerhub, чтобы подтвердить добавление нового образа Docker.

И, наконец, вы можете получить доступ к своему приложению с помощью веб-браузера. Введите назначенный внешний IP-адрес, а затем «:8080». Через некоторое время страница загрузится и отобразит сообщение «HelloWorld».


Заключение

Молодцы, что настроили этот современный конвейер CI/CD!

Ты проделал потрясающую работу и ты настоящий герой!


Спасибо за все ваши усилия!




Об авторе

Зуфар Сунагатов — опытный старший инженер-программист, увлеченный разработкой современных программных систем.


Зуфар Сунагатов