В своей предыдущей статье я углубился в увлекательный мир микросервисов — . Это было начало моей обширной серии статей о микросервисах и их шаблонах. 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 Следуйте инструкциям на веб-странице создания учетной записи. Шаг 2. Войдите в свою учетную запись AWS. Перейдите на https://console.aws.amazon.com/console/home. Нажмите кнопку . «Войти» Введите все необходимые учетные данные на этой веб-странице. Шаг 3. Найдите виртуальный сервер EC2 Найдите EC2 в поле поиска. Выберите виртуальный сервер EC2, нажав . EC2 Service Нажмите кнопку . «Запустить экземпляр» Шаг 4. Настройте раздел «Имя и теги». Перейдите в раздел . «Имя и теги» Укажите имя нового экземпляра виртуального сервера AWS EC2 в разделе . «Имя» Вы также можете добавить дополнительные теги для своего виртуального сервера, нажав . «Добавить дополнительные теги» Шаг 5. Настройте раздел «Образы приложений и ОС (образ компьютера Amazon)». Перейдите в раздел . «Образы приложений и ОС (Amazon Machine Image)» Чтобы играть на виртуальном сервере : БЕСПЛАТНО Выберите операционную систему для вашего виртуального сервера — . Amazon Linux В разделе выберите машину с . «Образ машины Amazon (AMI)» тегом, соответствующим требованиям уровня «Бесплатный» Шаг 6. Настройте раздел «Тип экземпляра». Перейдите в раздел . «Тип экземпляра» Чтобы играть на виртуальном сервере : БЕСПЛАТНО Выберите тип с в разделе . тегом «Доступный уровень бесплатного пользования» «Тип экземпляра» Для меня это . t2.micro (семейство: t2 1cCPU 1 ГиБ памяти. Текущее поколение: правда) Шаг 7. Настройте раздел «Настроить хранилище». Перейдите в раздел . «Настроить хранилище» Чтобы играть на виртуальном сервере : БЕСПЛАТНО Не меняйте настройки по умолчанию. Клиенты, соответствующие требованиям уровня бесплатного пользования, могут получить . 30 ГБ накопителя EBS общего назначения (SSD) или магнитного накопителя Шаг 8. Настройте раздел «Настройки сети». Перейдите в раздел . «Настройки сети» Вам необходимо настроить безопасность вашего виртуального сервера. Сделать это, Нажмите кнопку . «Создать группу безопасности» Добавьте имя новой группы безопасности в раздел . «Имя группы безопасности» Добавьте описание вашей новой группы безопасности в раздел . «Описание» По умолчанию ваш виртуальный сервер доступен через ( ). Если вам нужны дополнительные типы подключений, добавьте их, добавив дополнительные правила группы безопасности для входящего трафика. Тип — SSH, Протокол — TCP, Порт — 22 Шаг 9: Настройте раздел «Пара ключей (логин)». Перейдите в раздел . «Пара ключей (Вход)» Создайте новую пару ключей, если вы ее еще не создали. Если вы еще не создали : «пару ключей» Нажмите кнопку . «Создать новую пару ключей» Дайте новой паре ключей имя в разделе . «Имя пары ключей» Выберите тип пары ключей или . Я выбираю тип . RSA ED25519 RSA Выберите формат файла закрытого ключа. Выбор и . Я выбираю формат . .pem .ppk .pem Нажмите кнопку . «Создать пару ключей» Появится всплывающее окно с предложением загрузить файл закрытого ключа. Согласитесь и загрузите файл на свой компьютер. Шаг 10. Запустите экземпляр виртуального сервера EC2. Запустите экземпляр виртуального сервера EC2, нажав кнопку . «Запустить экземпляр» После завершения процесса создания экземпляра виртуального сервера EC2 вы увидите следующее. Затем вам следует перейти в раздел , нажав кнопку . «Экземпляры» «Просмотреть все экземпляры» Теперь вы можете видеть, что ваш экземпляр виртуального сервера AWS EC2 работает. [Модуль 2]: Сервер Jenkins Теперь давайте настроим JenkinsServer на экземпляре виртуального сервера EC2. Шаг 1. Создайте экземпляр виртуального сервера AWS EC2. Вам нужен виртуальный сервер для запуска Jenkins. Следуйте инструкциям из раздела этого руководства, чтобы завершить этот шаг и создать экземпляр виртуального сервера EC2 с именем JenkinsServer. [Модуль 1]: Виртуальный сервер AWS EC2 Не забудьте добавить настройку группы безопасности. Это позволяет и работать через порты и соответственно. Jenkins SSH 8080 22 Используйте имя , чтобы отличить экземпляр виртуального сервера EC2. «JenkinsServer» Создайте группу безопасности и для нового экземпляра AWS EC2. Вы можете повторно использовать их далее в статье. «CI_CD_Pipeline» «CI_CD_Pipeline_Key_Pair» «JenkinsServer» Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2. Перейдите на → → домашнюю страницу консоли AWS Панель управления консоли управления EC2 Экземпляры. Затем вам следует выбрать и нажать кнопку . JenkinsServer «Подключиться» Затем вы увидите эту веб-страницу. Вам следует еще раз нажать кнопку . «Подключиться» Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2. Шаг 3. Загрузите репозиторий Jenkins. Теперь вам нужно загрузить Jenkins на свой экземпляр виртуального сервера EC2. Следуйте этим инструкциям: Перейдите на загрузки Jenkins. веб-страницу Вы можете увидеть варианты «Стабильный» (LTS) и «Обычный» (еженедельный). Выберите вариант LTS. Red Hat/Fedora/Alma/Rocky/CentOS Вы увидите эту веб-страницу. Скопируйте команду и выполните ее, чтобы загрузить файлы Jenkins из репозитория Jenkins в Интернете и сохранить их в указанном месте на экземпляре виртуального сервера EC2. «sudo get..» 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 Таким образом, менеджер пакетов может убедиться, что устанавливаемые вами пакеты Jenkins — это именно те пакеты, которые опубликованы проектом Jenkins, и что они не были подделаны или повреждены. «rpm» Шаг 5. Установите Java Чтобы запустить Jenkins, нам нужно установить на наш экземпляр виртуального сервера EC2. Java Чтобы установить , используйте эту команду. Java sudo amazon-linux-extras install java-openjdk11 -y Проверьте, правильно ли установлена , с помощью этой команды: Java java -version Вы увидите что-то подобное. Шаг 6. Установите конфигурацию шрифта Чтобы запустить Jenkins, вам необходимо установить на наш экземпляр виртуального сервера EC2. Fontconfig Используйте эту команду. 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 Вы увидите результат, как на скриншоте ниже: Дженкинс теперь должен быть готов к работе. Шаг 9: Получите доступ к Дженкинсу Чтобы получить доступ к приложению Jenkins, откройте любой веб-браузер и введите общедоступный IP-адрес или доменное имя вашего экземпляра EC2, а затем порт 8080. http://<your-ec2-ip>:8080 При первом доступе к Jenkins он будет заблокирован автоматически сгенерированным паролем. Вам необходимо отобразить этот пароль с помощью следующей команды. sudo cat /var/lib/jenkins/secrets/initialAdminPassword Скопируйте этот пароль, вернитесь в браузер, вставьте его в поле «Пароль администратора» и нажмите «Продолжить». Тогда вы сможете увидеть эту веб-страницу. Теперь вы можете использовать свой сервер Jenkins. Шаг 10. Создайте новый конвейер Jenkins Теперь, когда Jenkins работает нормально, вы можете приступить к созданию конвейера Jenkins. Чтобы создать конвейер Jenkins, вам необходимо создать новый «Проект Freestyle». Чтобы создать новый «Проект Freestyle», вам нужно перейти на панель управления Jenkins и нажать кнопку . «Новый элемент» Введите имя проекта Github «Freestyle project» (имя «конвейера» будет использоваться далее) и нажмите кнопку . «ОК» Затем предоставьте конвейера. описание Затем нажмите кнопку «Применить» и «Сохранить». После этого это означает, что вы создали основу конвейера, который будет построен в этом уроке. [Модуль 3]: Git и Github Теперь, когда Jenkins работает на экземпляре виртуального сервера AWS EC2, вы можете настроить Git с помощью конвейера. Git — это кодом, предназначенная для того, чтобы помочь командам разработчиков программного обеспечения отслеживать каждое изменение кода в базе данных особого типа. Если допущена ошибка, разработчики могут повернуть время вспять и сравнить более ранние версии кода, чтобы исправить ошибку и свести к минимуму неудобства для всех членов команды. VCS особенно полезна для команд, поскольку они помогают им сократить время разработки и увеличить количество успешных развертываний [1]. бесплатная распределенная система контроля версий (VCS) с открытым исходным DevOps 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. Шаг 3. Откройте диспетчер плагинов Jenkins. Нажмите кнопку , а затем кнопку . «Управление Jenkins» «Управление плагинами» Шаг 4. Найдите плагин Github Jenkins. Нажмите кнопку . «Доступные плагины» Найдите поле поиска плагина . Github Выберите плагин . Github Шаг 5. Установите плагин Github Jenkins Выберите плагин . А затем нажмите кнопку . Github «Установить без перезагрузки» Дождитесь окончания загрузки плагина Github. Да! Плагин Jenkins Github установлен. Шаг 6. Настройте плагин Github Jenkins Теперь, когда плагин GitHub Jenkins установлен, вы можете настроить этот плагин для окончательной интеграции Jenkins с Git. Для этого вам необходимо вернуться на главную страницу, нажав кнопку «Вернуться на верхнюю страницу». Затем на главной странице нужно нажать кнопку , а затем нажать кнопку . «Управление Jenkins» «Глобальная конфигурация инструмента» Затем на веб-странице глобальной конфигурации инструментов вам следует перейти в раздел Git. В разделе Git вам необходимо настроить Git, указав имя и путь к Git на компьютере. Затем нажмите кнопки и .**.** «Применить» «Сохранить» На этом вы завершили настройку плагина Jenkins Github. Шаг 7. Интегрируйте Git в конвейер Теперь, когда плагин Jenkins Github установлен и настроен, вы можете использовать его в своем конвейере. Это позволит вашему конвейеру, который вы создали в модуле 2, извлекать код вашего проекта из указанного репозитория GitHub. Что ж, чтобы интегрировать этот плагин в свой конвейер, вам нужно перейти в раздел «Управление исходным кодом» и выбрать Git в своем конвейере. Затем вам нужно указать URL-адрес репозитория вашего проекта. Если репозиторий вашего проекта общедоступен на Github, вам не нужно предоставлять учетные данные. Если репозиторий проекта является частным на Github, вам необходимо предоставить учетные данные. Вы можете использовать мой проект по следующему URL-адресу репозитория: . https://github.com/Sunagatov/Hello.git Просто скопируйте и вставьте его в поле « . Затем нажмите кнопки и , чтобы завершить интеграцию Git с конвейером. URL-адрес репозитория» «Применить» «Сохранить» Шаг 8. Тестируйте Git, интегрированный в конвейер Теперь вы можете использовать обновленный конвейер для извлечения проекта из Github. Для этого вам нужно нажать кнопку ** «Построить сейчас»**. В результате вы увидите успешную сборку в истории сборок. Откройте первую сборку из истории сборок. Теперь вы можете увидеть успешный результат работы первой сборки. Если вы откроете свой терминал AWS EC2. Вы можете проверить, что конвейер работает хорошо. Просто используйте эту команду. cd /var/lib/jenkins/workspace/{your pipeline name} Таким образом, вы увидите, что ваш проект из Github был перенесен на ваш экземпляр виртуального сервера AWS EC2. [Модуль 4]: Apache Maven — широко используемый инструмент автоматизации сборки и управления проектами при разработке программного обеспечения. Он оптимизирует процесс компиляции, тестирования и упаковки кода, управляя зависимостями проекта и обеспечивая согласованный жизненный цикл сборки. Maven использует файлы конфигурации на основе XML (файлы POM) для определения структуры проекта, зависимостей и задач, что позволяет разработчикам эффективно управлять сложными программными проектами и развертывать их. Apache Maven Теперь, когда вы интегрировали 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 Добавьте переменные и M2_HOME. JAVA_HOME Назначьте путь к JDK11 для и путь к каталогу maven для переменной . JAVA_HOME M2_HOME Чтобы найти путь к JDK, используйте эту команду. sudo find / -name java Как использовать ВИМ Чтобы файл, нажмите кнопку клавиатуры , чтобы вставить данные. отредактировать «I» Чтобы файл, нажмите кнопку клавиатуры «esc» и введите «:w». сохранить Для из файла нажмите кнопку клавиатуры и введите . выхода «esc» «:q» Сохраните изменения. Затем выполните эту команду, чтобы обновить системные переменные. source .bash_profile Чтобы проверить , используйте эту команду. $PATH echo $PATH Чтобы проверить , используйте эту команду. Apache Maven mvn -v Если вы все сделали правильно, вы сможете просмотреть версию Apache Maven. Шаг 4. Установите плагин Apache Maven Jenkins. Поскольку Apache Maven можно использовать в экземпляре EC2, вы можете установить плагин Apache Maven, чтобы интегрировать его с конвейером. Чтобы добиться этого, выполните следующие действия: Перейдите в «Панель управления» → «Управление Jenkins» → «Управление плагинами» → «Доступно». В поле поиска введите . «Maven» Выберите плагин . «Интеграция Maven» Дождитесь окончания процесса загрузки. А затем нажмите кнопку . «Вернуться на верхнюю страницу» Шаг 5. Настройте плагин Apache Maven Jenkins После успешной установки плагина Apache Maven Jenkins вы теперь можете использовать этот плагин в конвейере, который вы создали и обновили в модулях 2 и 3. Для этого выполните следующие действия: Перейдите в «Панель управления» → «Управление Jenkins» → «Глобальная конфигурация инструментов» → «JDK». Нажмите кнопку «Добавить JDK». Снимите флажок «Установить автоматически». Затем перейдите в раздел . Нажмите кнопку . Снимите флажок «Maven» «Добавить Maven» «Установить автоматически». Затем добавьте и путь . имя MAVEN_HOME Нажмите кнопки и . «Применить» «Сохранить» На этом вы завершили настройку плагина Apache Maven Jenkins. Шаг 6. Интегрируйте Apache Maven в конвейер Теперь, когда плагин Apache Maven GitHub установлен и настроен, вы можете использовать Apache Maven в своем конвейере. Это позволит вашему конвейеру, который вы создали в «[модуле 2]: Jenkins Server», построить код вашего проекта для создания артефакта jar. Чтобы интегрировать Apache Maven в конвейер, вам необходимо выполнить следующие шаги: Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Шаги сборки». Нажмите кнопку . «Добавить шаг сборки» Выберите опцию . «Вызвать цели Maven верхнего уровня» Выберите в качестве «Apache-Maven» «Версия Maven». Добавьте команду во входные данные . «очистить пакет» «Цели» Нажмите кнопку . «Дополнительно» Добавьте «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. Чтобы завершить этот шаг, используйте инструкции из раздела « этого руководства. Не забудьте добавить настройку группы безопасности. Это позволяет Docker и SSH работать через порты 8080 и 22 соответственно. Запуск экземпляра виртуального сервера AWS EC2» Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2. Нажмите кнопку «Подключиться». Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера 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. Вам необходимо добавить текущего пользователя в группу Docker на виртуальном сервере EC2 , чтобы предоставить права администратора Docker. ansible-admin AnsibleServer sudo usermod -a -G docker ansible-admin Вам нужно будет выйти из системы и снова войти в систему, чтобы эти изменения вступили в силу. Затем вы можете выполнить следующую команду id ansible-admin чтобы увидеть, что новый пользователь докера существует. Шаг 5: Запустите Докер Теперь, когда Docker установлен на экземпляре Ansible EC2, вы можете запустить его, выполнив следующую команду. sudo systemctl start docker Когда Docker запустится, вы можете выполнить следующую команду sudo systemctl status docker чтобы увидеть, что докер активен и работает. Шаг 6. Создайте файл Dockerfile. В окончательной версии конвейера этот процесс будет включать создание нового образа Docker из вашего проекта GitHub и отправку его в Docker Hub. Для этого ваш проект GitHub должен содержать файл Dockerfile. Если вы использовали проект , который предлагался в модуле « , вам не нужно создавать новый Dockerfile, поскольку этот репозиторий проекта уже содержит Dockerfile. «Hello» [Модуль 3]: Git и Github» 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, включая имя пользователя и пароль. На этом вы завершили процесс входа в и теперь готовы приступить к тестированию. Docker Тестирование среды Docker и Dockerfile. Шаг 8. После успешного входа в Dockerhub вы готовы начать тестирование подготовленного Dockerfile. Выполните эту команду, чтобы создать образ Docker. docker build -t hello:latest . Затем выполните следующую команду, чтобы установить тег, который облегчит загрузку изображения в Dockerhub: docker tag hello:latest zufarexplainedit/hello:latest Наконец, приступите к отправке образа Docker в Dockerhub, выполнив эту команду. docker push zufarexplainedit/hello:latest Выполнив следующие действия, перейдите в свою учетную запись Dockerhub, чтобы проверить, видите ли вы новое изображение или нет. Теперь вы должны заметить, что изображение было эффективно добавлено. Этот результат подтверждает успешную установку среды Docker и правильность вашего Dockerfile. [Модуль 6]: Ansible Теперь давайте настроим сервер Ansible на экземпляре виртуального сервера EC2. Шаг 1. Создайте экземпляр виртуального сервера AWS EC2. Для запуска Ansible вам понадобится виртуальный сервер. Следуйте инструкциям из раздела этого руководства, чтобы завершить этот шаг и создать экземпляр виртуального сервера EC2 для Ansible. [Модуль 1]: Виртуальный сервер AWS EC2 Не забудьте добавить настройку группы безопасности. Это позволяет и работать через порты и соответственно. Ansible SSH 8080 22 Используйте имя , чтобы отличить экземпляр виртуального сервера EC2. «AnsibleServer» Вы можете повторно использовать группу безопасности и для нового экземпляра EC2 . «CI_CD_Pipeline» «CI_CD_Pipeline_Key_Pair» «AnsibleServer» Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2. Перейдите на домашнюю страницу консоли AWS → Панель управления консоли управления EC2 → Экземпляры → AnsibleServer. Затем нажмите кнопку . «Подключиться» Затем вы увидите эту веб-страницу. Вам следует еще раз нажать кнопку . «Подключиться» Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2. Теперь давайте настроим Ansible Server на экземпляре виртуального сервера EC2. Шаг 3. Измените имя хоста экземпляра виртуального сервера AWS EC2 AnsibleServer. Первое, что вам нужно сделать, если вы хотите настроить AnsibleServer на экземпляре виртуального сервера EC2, — это изменить его имя хоста. Давай сделаем это. Выполните эту команду, чтобы открыть файл имени хоста: sudo vi /etc/hostname Вы должны увидеть что-то вроде этого: Замените это имя хоста на Затем перезагрузите его. «ansible-server». sudo init 6 Шаг 4. Добавьте и настройте нового пользователя в экземпляре виртуального сервера AWS EC2 AnsibleServer. Теперь давайте добавим нового пользователя в экземпляр виртуального сервера AWS EC2. ansible-admin Для этого используйте эту команду: sudo useradd ansible-admin Затем установите пароль для пользователя . ansible-admin sudo passwd ansible-admin Также вам необходимо настроить права пользователя, отредактировав файл . sudoers sudo visudo Добавьте в этот файл . «ansible-admin ALL=(ALL) ALL» sudoers Кроме того, вам необходимо отредактировать файл , чтобы включить проверку подлинности пароля. /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config Затем вам необходимо перезагрузить сервис, чтобы подтвердить эти изменения. sudo service sshd reload В результате выполнения этой команды вы увидите: Теперь вы можете использовать эту команду, чтобы не добавлять sudo для всех дальнейших команд. sudo su - ansible-admin Шаг 5. Создайте ключ на экземпляре виртуального сервера AWS EC2. Далее в этой статье вы планируете управлять удаленными серверами, такими как экземпляры виртуальных серверов K8s EC2. Вот почему вам необходимо настроить ключи SSH. ssh-keygen В результате выполнения этой команды вы увидите: Теперь ключи SSH сгенерированы и готовы к использованию. Шаг 6. Установите Ansible Теперь вы можете установить Ansible на свой экземпляр виртуального сервера EC2 . «AnsibleServer» Давай сделаем это. Выполните эту команду, чтобы установить Ansible. sudo amazon-linux-extras install ansible2 Чтобы проверить Ansible, используйте следующую команду: ansible --version В результате выполнения этой команды вы увидите: Шаг 7. Установите плагин Jenkins «Публикация через SSH» на экземпляре JenkinsServer EC2. Поскольку Ansible установлен на вашем экземпляре виртуального сервера EC2 , вы можете настроить Jenkins для его интеграции с Ansible. Вам необходимо установить плагин , чтобы интегрировать Jenkins с экземпляром виртуального сервера EC2, на котором установлен Ansible, и с другими экземплярами виртуального сервера EC2, на которых установлен . «AnsibleServer» «Publish over SSH» Kubernetes Перейдите в → « → → . «Панель управления» Управление Jenkins» «Настроить систему» «Доступные плагины» Затем введите в поле поиска. «Опубликовать через SSH» Нажмите кнопку . Дождитесь окончания процесса загрузки. «Установить без перезагрузки» Теперь плагин «Публикация через SSH» установлен на экземпляре виртуального сервера Jenkins EC2. Шаг 8. Настройте плагин Jenkins «Публикация через SSH». После успешной установки плагина Apache Maven Jenkins вы теперь можете использовать этот плагин в конвейере, который вы создали и обновили в модулях 2 и 3. Для этого выполните следующие действия: Перейдите в → → → . «Панель управления» «Управление Jenkins» «Настроить систему» «Публикация через SSH» Введите все необходимые данные, как показано на скриншоте, включая имя хоста, имя пользователя и закрытый ключ (или пароль, если применимо). Затем нажмите кнопки и . «Применить» «Сохранить» На этом вы завершили настройку плагина Jenkins . «Публикация через SSH» Затем нажмите «Проверить конфигурацию», чтобы убедиться, что плагин работает правильно. С левой стороны вы можете видеть, что статус конфигурации тестового плагина — «Успех». Это означает, что конфигурация плагина правильная. Шаг 9. Создайте новый каталог Docker в AnsibleServer. Вам необходимо создать новую папку на экземпляре AnsibleServer EC2, в которой будет храниться JAR-файл проекта. Этот jar-файл позже будет использоваться для создания образа Docker. Давайте начнем. Перейдите в папку в экземпляре AnsibleServer EC2. «/opt» cd /opt Создайте там новую папку . «docker» sudo mkdir docker Дайте привилегии этой папке . «docker» sudo chown ansible-admin:ansible-admin docker Теперь проверьте права доступа к папке , выполнив эту команду. «docker» ll Вы можете видеть, что папка доступна пользователю . «docker» «ansible-admin» в Шаг 10. Интегрируйте плагин Github «Публикация через SSH» конвейер. Теперь, когда плагин Github установлен и настроен, вы можете интегрировать его в конвейер, который вы создали в «[модуле 2]: Jenkins Server», для передачи артефакта jar проекта из « в . «Публикация через SSH» JenkinsServer» «Ансиблсервер» Что ж, чтобы интегрировать плагин Github в конвейер, вам необходимо выполнить следующие шаги: «Публикация через SSH» Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Действия после сборки». Нажмите кнопку . «Добавить действие после сборки» Выберите опцию . «Отправить артефакты сборки через SSH» Добавьте в поле в разделе .**.** «AnsibleServer» «Имя» «SSH-сервер» Добавьте во входные данные в разделе **.** «target/*.jar» «Исходные файлы» «Набор передачи» Добавьте в поле в разделе **.** «target/» «Удалить префикс» «Набор передачи» Добавьте в поле в разделе **.** «//opt/docker/» «Удаленный каталог» «Набор передачи» А пока просто поместите пустую строку во входные данные «Команда Exec» в разделе «Набор передачи». Наконец, вам следует нажать кнопки и , чтобы завершить интеграцию плагина с конвейером. «Применить» «Сохранить» «Публикация через SSH» Шаг 11. Протестируйте плагин Github «Публикация через SSH», интегрированный в конвейер. Теперь вы можете использовать обновленный конвейер для переноса артефакта jar проекта из в . Для этого вам нужно нажать кнопку . В результате вы увидите успешный результат задания в истории сборки. JenkinsServer AnsibleServer «Построить сейчас» Если вы откроете терминал AWS EC2 . Вы можете проверить, что конвейер работает хорошо. «AnsibleServer» Просто используйте эту команду. cd /opt/docker Таким образом вы сможете увидеть артефакт JAR, указывающий на успешную сборку вашего проекта с GitHub. Шаг 12. Настройте хосты Ansible Когда вы запускаете книгу воспроизведения Ansible, вы указываете хосты, на которых она должна работать. Вы можете сделать это двумя способами: В плейбуке вы можете установить для параметра список IP-адресов или имен хостов. Укажите хосты непосредственно в плейбуке. hosts Ansible позволяет вам определить список хостов в файле инвентаризации и ссылаться на этот файл при запуске вашей книги игр. Файл инвентаризации по умолчанию — . Использовать файл инвентаризации: /etc/ansible/hosts Редактируя , вы можете легко управлять группами хостов без необходимости записывать их IP-адреса каждый раз, когда вы запускаете сборник сценариев. /etc/ansible/hosts Давайте узнаем хост экземпляра AnsibleServer EC2, выполнив следующую команду. sudo ifconfig После того, как вы найдете хост экземпляра AnsibleServer EC2, вы можете добавить его в файл хостов Ansible, выполнив следующую команду. sudo vi /etc/ansible/hosts Вы также можете добавить «[ansible]» в качестве ссылки. Если вы управляете кластером серверов и хотите применить книгу ко всем из них, вместо указания IP-адреса каждого сервера в книге, вы можете просто добавить все серверы в группу в файле инвентаризации, а затем указать группа в сборнике игр. SSH-аутентификацию без пароля на локальном хосте для Ansible Шаг 13. Настройте 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 ansible-admin@172.31.34.41 Теперь вы можете увидеть . Это означает, что установка аутентификации SSH без пароля успешно завершена. «Количество добавленных ключей: 1» Шаг 14. Создайте новый сборник сценариев Ansible для задач Docker. Теперь, когда Ansible настроен и готов к работе, вы можете создать новый сборник сценариев Ansible для своего конвейера. Этот сборник сценариев позволит Ansible создать и отправить новый образ Docker в Dockerhub. Вот как вы можете это сделать: Начните с создания нового файла книги воспроизведения Ansible. Просто используйте эту команду. touch hello-app.yml Затем отредактируйте только что созданный файл . Откройте его для редактирования с помощью этой команды. hello-app.yml vi hello-app.yml Внутри файла введите следующее. --- - 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. Кроме того, найдите время, чтобы посетить свою учетную запись Dockerhub и проверить, видно ли теперь новое изображение. Вы должны увидеть только что добавленное изображение. Этот результат подтверждает, что ваш сборник сценариев Ansible верен. в Шаг 14. Интегрируйте задачи Ansible Docker конвейер Теперь, когда плагин Github , Ansible и Docker установлены и настроены, вы можете интегрировать их все в конвейер, который вы создали в «[модуле 2]: Jenkins Server», для передачи артефакта jar проекта. с « на , а затем создайте новый образ Docker из своего проекта и затем отправьте этот образ Docker на Dockerhub. «Публикация через SSH» JenkinsServer» «AnsibleServer» Чтобы добиться этого, вам необходимо выполнить следующие шаги: Перейдите в «Панель мониторинга» → «CI_CD_Pipeline» → «Настроить» → «Действия после сборки» → «Отправить артефакты сборки через SSH». Добавьте команду во входные данные . «sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml» «Команда Exec» Наконец, нажмите кнопки и , чтобы завершить интеграцию задач Ansible Docker с конвейером. «Применить» «Сохранить» » Шаг 15. Тестируйте «Ansible playbook с задачами Docker , интегрированный в конвейер. Теперь вы можете протестировать обновленный конвейер, чтобы беспрепятственно перенести артефакт jar проекта из « в , затем создать новый образ Docker из своего проекта и затем отправить этот образ Docker в Dockerhub. Для этого вам нужно нажать кнопку . В результате вы увидите успешный результат задания в истории сборки. JenkinsServer» «AnsibleServer» «Построить сейчас» Кроме того, найдите время, чтобы посетить свою учетную запись Dockerhub и проверить, видно ли теперь новое изображение. Вы должны увидеть только что добавленное изображение. Этот результат подтверждает, что ваш сборник сценариев Ansible с задачами Docker был успешно интегрирован в конвейер. [Модуль 7]: Кубернетес Теперь давайте настроим K8s на экземпляре EC2. Вы собираетесь создать новый экземпляр EC2 и установить инструмент командной строки kubectl для дальнейшего взаимодействия с кластером . Kubernetes Шаг 1. Запустите экземпляр виртуального сервера AWS EC2. Чтобы завершить этот шаг, используйте инструкции из раздела « этого руководства. Запуск экземпляра виртуального сервера AWS EC2» Не забудьте добавить настройку группы безопасности. Это позволяет и работать через порты и соответственно. всем инструментам SSH 8080 22 Используйте имя , чтобы отличить экземпляр виртуального сервера EC2. «K8sServer» Вы можете повторно использовать группу безопасности и для нового экземпляра EC2 . «CI_CD_Pipeline» «CI_CD_Pipeline_Key_Pair» «K8sServer» Шаг 2. Подключитесь к экземпляру виртуального сервера AWS EC2. Нажмите кнопку «Подключиться». Теперь вы можете увидеть онлайн-терминал экземпляра виртуального сервера EC2. Шаг 3. Измените имя хоста экземпляра виртуального сервера AWS EC2 «KubernetesServer». Первое, что вам нужно сделать, если вы хотите настроить KuberenetesServer на экземпляре виртуального сервера EC2, — это изменить его имя хоста. Давай сделаем это. Выполните эту команду, чтобы открыть файл имени хоста: sudo vi /etc/hostname Вы должны увидеть что-то вроде этого. Замените это имя хоста на затем перезагрузите его. «kubernetes-server», а sudo init 6 Ваше имя хоста было изменено. Шаг 4. Проверьте версию AWS CLI Используйте эту команду, чтобы проверить версию . AWS aws --version Таким образом, вы сможете увидеть текущую версию aws-cli. Если вы видите версию , вам следует загрузить последнюю версию. aws-cli/1.18 Шаг 5. Обновите интерфейс командной строки AWS. Теперь, когда вы узнали, что на вашем экземпляре EC2 установлена старая версия aws-cli, вам необходимо ее обновить. Для этого перейдите в AWS → Документация → Интерфейс командной строки AWS → Руководство пользователя для версии 2. Скопируйте и вставьте . команду Curl Сначала выполните эту команду, чтобы загрузить awscli версии 2. curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" Подождите, пока начнется процесс загрузки. Вы должны увидеть что-то вроде этого. Во-вторых, вам нужно выполнить эту команду, чтобы распаковать архив awscli версии 2. unzip awscliv2.zip В-третьих, вам следует выполнить эту команду, чтобы установить awscli версии 2. sudo ./aws/install Затем перезагрузите онлайн-терминал экземпляра виртуального сервера Kubernetes EC2. Затем используйте эту команду, чтобы проверить версию AWS. aws --version Вы можете видеть, что у aws cli есть aws-cli/2. Шаг 6. Установите кубектл — это фундаментальный инструмент командной строки для взаимодействия с любым кластером Kubernetes, независимо от базовой инфраструктуры. Он позволяет вам управлять ресурсами, развертывать приложения, настраивать сеть, получать доступ к журналам и выполнять различные другие задачи в кластере Kubernetes. Kubectl Теперь вам нужно установить инструмент командной строки kubectl для дальнейшего взаимодействия с кластером Kubernetes. Для этого вам нужно перейти в → → → → или → . AWS Документация Amazon EKS Руководство пользователя Установка обновление kubectl Linux Или просто нажмите ссылку . https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html Сначала выполните эту команду, чтобы загрузить kubectl. curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl Дождитесь процесса загрузки. Вы увидите что-то вроде этого. Дайте разрешение kubectl. chmod +x kubectl Переместите kubectl в папку /usr/local/bin. sudo mv kubectl /usr/local/bin Проверьте версию kubectl. kubectl version --output=yaml Шаг 7: Установите exctl — еще один инструмент командной строки, специально разработанный для сервиса Amazon EKS. Eksctl можно использовать для создания кластеров AWS EKS, управления группами узлов и выполнения задач, специфичных для EKS, таких как интеграция с ролями IAM и другими сервисами AWS, абстрагируя большую часть настройки и управления инфраструктурой AWS. Eksctl Выполните команду для загрузки 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 Вы должны увидеть версию Шаг 8. Создайте роль IAM для eksctl Вам необходимо создать роль IAM и прикрепить ее к вашему экземпляру EC2 . «KubernetesServer» Для этого вам нужно найти EC2 в поле поиска. Выберите виртуальный сервер EC2, перейдя по ссылке . https://us-east-1.console.aws.amazon.com/ec2/ Перейдите в → . Панель управления IAM Роли Нажмите кнопку на веб-странице ролей . «Создать роль» IAM Затем выберите И нажмите кнопку . «Сервис AWS», «EC2». «Далее» Затем найдите , , , в поле поиска и нажмите кнопку . «AmazonEC2FullAccess» «AmazonEC2FullAccess» «IAMFullAccess» «AWSCloudFormationFullAccess» «Добавить разрешения» И затем нажмите кнопку . «Далее» Затем введите в поле . «Eksctl_Role» «Имя роли» И нажмите кнопку . «Создать роль» Роль наконец создана. Шаг 9. Подключите роль IAM с помощью eksctl Перейдите на веб-страницу экземпляра AWS EC2. Выберите Затем нажмите → → «KuberbetesServer». «Действия» «Безопасность» «Изменить роль IAM». Выберите , а затем нажмите кнопку . «Eksctl_Role» «Обновить роль IAM» Теперь ваша роль IAM связана с вашим и инструментом eksctl. «EKS_Server» Шаг 10. Создайте кластер eksctl Кластер — это управляемая среда Kubernetes на AWS, автоматизирующая сложные инфраструктурные задачи, такие как настройка, масштабирование и обслуживание. Это очень важно, поскольку оно обеспечивает эффективную, безопасную и оптимизированную для AWS платформу для развертывания, управления и масштабирования контейнерных приложений, оптимизации операций и позволяет разработчикам сосредоточиться на кодировании, а не на управлении базовой инфраструктурой. Amazon EKS (Elastic Kubernetes Service) Теперь пришло время настроить кластер EKS. Чтобы добиться этого, выполните следующие действия: Измените следующую команду, указав свою конкретную информацию. 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 Выполните измененную команду и терпеливо дождитесь завершения процесса создания кластера. Вы заметите, что на веб-странице AWS CloudFormation статус кластера EKS указан как . «создается» Процедура создания кластера обычно занимает около 20 минут. После завершения терминал отобразит результат процесса. Кроме того, вы можете проверить статус успешного создания на веб-странице AWS CloudFormation. кластера EKS Шаг 11. Создайте yaml-файл развертывания Kubernetes. — это сценарий конфигурации, написанный в формате YAML, который определяет, как управлять и поддерживать определенное приложение или службу в кластере Kubernetes. Он инкапсулирует инструкции по организации развертывания, масштабирования, обновления и мониторинга контейнеров, в которых выполняется приложение. Этот файл содержит такие сведения, как образ контейнера, желаемое количество реплик, ограничения ресурсов, переменные среды, настройки сети и многое другое. При применении к кластеру Kubernetes YAML-файл развертывания обеспечивает желаемое состояние приложения, автоматически управляя созданием, масштабированием и восстановлением контейнеров для поддержания желаемого уровня доступности и надежности. YAML-файл развертывания Kubernetes Теперь, когда кластер 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. В этом файле описывается, как служба должна обнаруживаться, получать к ней доступ и распределять нагрузку другими службами или внешними клиентами. Он включает в себя такие характеристики, как тип службы (ClusterIP, NodePort, LoadBalancer), номера портов, селекторы для идентификации модулей и многое другое. При применении к кластеру Kubernetes файл YAML службы создает виртуальный IP-адрес и порт, которые направляют трафик к соответствующим модулям, абстрагируя изменения базового модуля и обеспечивая стабильную конечную точку для связи, обеспечивая плавное подключение и динамическое масштабирование. YAML-файл службы Kubernetes Поскольку кластер 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. Применить развертывание. Используйте следующую команду, чтобы применить конфигурацию развертывания. kubectl apply -f hello-app-deployment.yaml Это создаст развертывание с указанным количеством реплик и стратегией непрерывного обновления, гарантируя доступность и управляемость вашего приложения. 2. Применить Сервис. Затем примените конфигурацию службы. kubectl apply -f hello-app-service.yaml При этом будет настроена служба типа LoadBalancer, предоставляющая доступ к вашему приложению из Интернета. Обратите внимание, что подготовка LoadBalancer и получение внешнего IP-адреса может занять некоторое время. Проверьте статус LoadBalancer. Следите за статусом использования вашего сервиса. kubectl get service zufarexplainedit-hello-app-service Когда назначен внешний IP-адрес, вы почти готовы получить доступ к своему приложению. Получите доступ к вашему приложению. Используя веб-браузер, введите назначенный внешний IP-адрес, а затем: 8080. Через некоторое время страница загрузится и отобразит сообщение «HelloWorld». Имейте в виду, что первоначальная загрузка может занять несколько секунд. Очистка с помощью команд 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». Теперь давайте добавим нового пользователя в экземпляр виртуального сервера AWS EC2 . ansible-admin «KubernetesServer» Для этого используйте эту команду. sudo useradd ansible-admin Затем установите пароль для пользователя . ansible-admin sudo passwd ansible-admin Также вам необходимо настроить права пользователя, отредактировав файл . sudoers sudo visudo Добавьте в этот файл . «ansible-admin ALL=(ALL) ALL» sudoers Кроме того, вам необходимо отредактировать файл , чтобы включить проверку подлинности пароля. /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config Затем вам необходимо перезагрузить сервис, чтобы внести эти изменения. sudo service sshd reload В результате выполнения этой команды вы увидите: Теперь вы можете использовать эту команду, чтобы не добавлять sudo для всех дальнейших команд. sudo su - ansible-admin Шаг 15. Создайте ключ на экземпляре виртуального сервера AWS EC2. Далее в этой статье вы планируете управлять удаленными серверами, такими как экземпляр виртуального сервера EC2. Вот почему вам необходимо настроить ключи SSH. K8s ssh-keygen В результате выполнения этой команды вы увидите: Теперь ключи SSH сгенерированы и готовы к использованию. SSH-аутентификацию без пароля на локальном хосте для Ansible Шаг 16. Настройте 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 ansible-admin@172.31.34.41 Теперь вы можете увидеть . Это означает, что установка аутентификации SSH без пароля успешно завершена. «Количество добавленных ключей: 1» Шаг 17. Настройте хосты Ansible в экземпляре AnsibleServer EC2. Когда вы запускаете книгу воспроизведения Ansible, вы указываете хосты, на которых она должна работать. На этом этапе вам необходимо указать хост экземпляра KubernetesServer EC2. Для этого вам нужно повторить те же шаги, которые вы прошли в « [Модуль 6]: Ansible». Давайте узнаем хост экземпляра KubernetesServer EC2, выполнив следующую команду. sudo ifconfig Найдя хост экземпляра KubernetesServer EC2, вы можете добавить его в файл хостов Ansible, выполнив следующую команду. sudo vi /etc/ansible/hosts Вы также можете добавить «[kubernetes]» в качестве ссылки. Шаг 18. Создайте новый сборник сценариев Ansible для задач Kubernetes. Теперь, когда Kubernetes настроен и готов к работе, вы можете создать новый сборник сценариев Ansible с задачами Kubernetes для вашего конвейера. Этот сборник сценариев позволит Ansible запускать ваше приложение в кластере Kubernetes с помощью команд kubectl. Вот как вы можете это сделать: Начните с создания нового файла книги воспроизведения Ansible. Просто используйте эту команду. touch kubernetes-hello-app.yml Затем отредактируйте только что созданный файл . Откройте его для редактирования с помощью этой команды. hello-app.yml vi kubernetes-hello-app.yml Внутри файла введите следующее: --- - 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. Перейдите в JenkinsServer → Панель управления Jenkins → Новый элемент. Создайте новый проект Jenkins Freestyle с именем «CD-Job». Нажмите кнопку «ОК». Перейдите в раздел «Действия после сборки». Нажмите кнопку «Добавить действие после сборки». Выберите опцию «Отправить артефакты сборки через SSH». Выберите «AnsibleServer» в качестве SSH-сервера. Добавьте эту команду во входную команду «exec command». sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml Нажмите кнопки «Применить» и «Сохранить». Перейдите на панель управления Jenkins → «CI_CD_Pipeline» → «Настроить» → раздел «Действия после сборки». Нажмите кнопку «Добавить действие после сборки». Выберите опцию «Создать другие проекты». Перейдите в раздел «Создать другие проекты». Выберите опцию «Триггер только в том случае, если сборка стабильна». Добавьте «CD-Job» к входным данным «Проект для сборки». Нажмите кнопки «Применить» и «Сохранить». Теперь можно считать, что трубопровод полностью готов и готов к использованию. Шаг 20. Тестирование окончательной версии конвейера Настало время протестировать окончательную версию конвейера. Перейдите в Jenkins → Панель управления Jenkins → «CI_CD_Pipeline». Нажмите кнопку «Построить сейчас». Чтобы увидеть результаты, просмотрите журналы консоли сборки. Вы заметите, что «CD-Job» был запущен в журналах консоли сборки, а окончательный статус отмечен как «УСПЕХ». 4 Кроме того, вы можете зайти в Dockerhub, чтобы подтвердить добавление нового образа Docker. И, наконец, вы можете получить доступ к своему приложению с помощью веб-браузера. Введите назначенный внешний IP-адрес, а затем «:8080». Через некоторое время страница загрузится и отобразит сообщение «HelloWorld». Заключение Молодцы, что настроили этот современный конвейер CI/CD! Ты проделал потрясающую работу и ты настоящий герой! Спасибо за все ваши усилия! Об авторе — опытный старший инженер-программист, увлеченный разработкой современных программных систем. Зуфар Сунагатов Разрабатывал высокопроизводительные распределенные системы с использованием Java, Kotlin, AWS, Docker и Kubernetes для таких компаний, как Citi (Лондон), МТС (Москва) и других ( ). более подробную информацию можно найти в профиле Zufar в LinkedIn Основал с нуля Ice Latte, онлайн-торговую площадку с открытым исходным кодом (вы можете присоединиться к команде Зуфара и внести свой вклад в его проект на GitHub: ). https://github.com/Sunagatov/Online-Store Создал сообщество ZufarExplainedIT, чтобы делиться своими знаниями и опытом с другими (вы можете следить за сообществом Zufar IT Telegram: ). https://t.me/zufarexplained Наставничал более 3000 минут и провел 60 сессий на ADPlist, воспитывая начинающие таланты ( ). вы можете получить наставничество у Зуфара на ADPlist Привлекал аудиторию в качестве спикера на конференциях и IT-каналах YouTube, делясь бесценными знаниями (примеры его видеороликов на YouTube включают: , ). «Тестовое собеседование Java-разработчика #27 — Зуфар Сунагатов» «Молниеносные беседы для начинающих спикеров в обеденное время, 28 мая» Автор очень популярных IT-статей, каждая из которых имеет более 7000 просмотров (примеры его статей: , ). «Шаблоны микросервисной архитектуры. Часть 1: Шаблоны декомпозиции» «Что значит «вариативный»? Объясняем простыми словами»