Контейнерное путешествие программиста в облако в 2024 году. Эпизод 1: Пересечение границ
Контейнерное путешествие программиста в облако в 2024 году. Эпизод 1: Пересечение границ

1 призыв к приключениям

【Ты ходил в Каузиум? 】

【Эм. Пошел на прошлой неделе. 】

【Поздравляем! 🎉🎉🎉】

Java-программист Ма Инонг поздравила свою бывшую коллегу по WeChat с окончанием учебы.,Моё сердце похожеОпрокинул бутылку с пятью ароматами,Смешанные вкусы.

Более года назад Ма Инонг и Цюань Сянъюань вместе писали код Java в одной группе одной компании.

Позже Ма Инонг сменил работу на свою нынешнюю отечественную интернет-компанию.

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

Ма Инонг потратил немного денег и записался в этот тренировочный лагерь.

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

Вчера он увидел информацию, опубликованную Quanxuanyuan в кругу друзей, о наборе инженеров микросервисного программного обеспечения в Causium, поэтому он начал вышеупомянутый разговор в WeChat.

Causium — иностранная компания, созданная несколько лет назад, которая в основном продвигает платформы с открытым исходным кодом и продукты облачных сервисов.

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

Ма Инонг посмотрел на карточку с заданием со своим именем на стене и не смог сдержать вздох.

Работает в интернет-компании больше года. В его обязанности входит поддержка старой серверной системы Java для электронной коммерции компании.

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

Стек технологий, который он использует, тот же, что и 10 лет назад: JDK6, JSP, Maven и Ant.

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

Увидев следующие два вывода, его сердце сжалось.

🔥Docker — это основа и строительный блок облачных приложений.

🔥Kubernetes/K8s — операционная система облачных вычислений.

но на работе,Но у него не было возможности испытать этих двоих.Новая технология, представляющая облачные вычисления。нравиться Рисунок 1。

он почтиБудет обновляться каждый деньсобственныйWindows 11 операционных систем.

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

Рисунок 1 У Ма Инонга не было возможности испытать на практике контейнеризацию Docker и миграцию в облако K8. технология, представляющая облачные вычисления
Рисунок 1 У Ма Инонга не было возможности испытать на практике контейнеризацию Docker и миграцию в облако K8. технология, представляющая облачные вычисления

1.1 Контейнеризация Docker и облако K8s могут решить три основные проблемы программистов

На основании прочитанных материалов он пришел к выводу, что контейнеризация Docker и миграция в облако K8 могут решить три основные болевые точки программистов.

Во-первых: «У меня это работает нормально. Почему у вас это не работает?»

Это то, что Ма Инонг часто говорит, увидев, как тестировщик сам открывает ошибку.

Эта проблема во многом вызвана различиями в зависимых библиотеках в разных средах.

✅Он выучил этот докер imageспособныйУпакуйте все зависимые библиотеки кода вместе.,И позволяет коду работать независимо в контейнере.

这样就способный实现Образ, протестированный в тестовой среде, — это образ, развернутый в производственной среде.

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

Во-вторых: «Кто изменил конфигурацию, не сказав всем об этом?»

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

✅Он узнал, что и Docker, и K8s подчеркивают, что инфраструктура — это код, то есть конфигурация не создается разработчиками ПО, поглаживая их по головке.

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

Это позволяет широко рекламировать изменения конфигурации.,Выполнение конфигурации хорошо документировано.

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

В-третьих, «тестовых сред слишком мало, и чтобы ими воспользоваться, приходится долго стоять в очереди».

Это то, что часто говорит Ма Инонг, когда он модифицировал код и ему нужно проверить его в тестовой среде.

✅Он узнал об этом с помощью местного докера compose,Он может использовать этоЗанимает мало места и быстро работает.Характеристики,Использовать образ докера на локальном компьютере,Максимально смоделируйте производственную среду,Протестируйте программное обеспечение для выпуска.

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

такой же,Если внутри предприятия используется Облачный кластер К8s,那么就способный利用云的мультиарендаторФункции,Быстро предоставить программистам и тестировщикам, которым нужна среда тестирования,Выделить тестовую среду,Это решает проблему небольшого количества тестовых сред.

Ма Инонг очень хотел самостоятельно изучить новые технологии, такие как контейнеризация Docker и миграция в облако K8, но у него не было никого, кто мог бы его направлять.

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

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

2 Пересечение границ

Будучи серверным программистом Java, Ма Инонг провел в свободное время полмесяца и самостоятельно изучил vue3, просматривая видео о классических проектах со списками задач.

Затем он использовал SpringBoot3 для создания системы веб-приложений с отдельными интерфейсной и внутренней частью.

Он планирует контейнеризировать эту систему веб-приложений с помощью Docker, а затем использовать K8s для перемещения ее в облако.

Это позволит вам улучшить свои навыки в этих двух областях.

2.1 Причины выбора веб-приложения «Список покупок» для практики программирования

Когда Ма Инонг изучал Vue3, проект внешнего приложения списка дел, над которым он работал, на самом деле представлял собой веб-версию списка дел с добавлениями, удалениями, изменениями и запросами.

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

Он также дал этому веб-приложению имя: Веб-приложение списка покупок.

Это веб-приложение может представлять собой типичную архитектуру веб-приложений с отдельными интерфейсной и внутренней частью.

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

Например, интерфейсное приложение микросервиса зависит от серверного приложения микросервиса. Серверное приложение микрослужбы зависит от приложения микрослужбы базы данных.

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

2.2 Описание требований к веб-приложению «Список покупок»

Когда Ма Инонг размышлял над описанием требований этого веб-приложения, в уме Ма Инонга возникла следующая сцена.

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

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

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

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

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

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

Придя в супермаркет, он еще раз проверит список, чтобы не забыть, что хочет купить. Как показано на рисунке 2.

Рис. 2. Интерфейс внешнего приложения веб-приложения «Список покупок»
Рис. 2. Интерфейс внешнего приложения веб-приложения «Список покупок»

2.3 Три шага на пути к контейнеризации и миграции в облако

После самостоятельного изучения vue3 по видеороликам Todo List Ма Инонгу нужно было изучить эти две технологии, чтобы освоить контейнеризацию Docker и миграцию в облако K8s.

Ему нравится читать материалы на английском языке. Потому что контент относительно новый.

Он искал книги на торговом сайте Amazon, используя ключевые слова docker и k8s. Сравните рейтинги. Посмотрите комментарии читателей.

Наконец, он обнаружил, что следующие три книги, написанные Найджелом Поултоном, являются самыми продаваемыми книгами по этим двум технологиям на рынке в 2023 году.

Docker Deep Dive (2023 Edition)  Quick Start Kubernetes (2023 Edition)  The Kubernetes Book (2023 Edition)

Он провел месяц, читая эти три книги, выполняя команды в книгах и делая заметки.

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

Как начать это путешествие?

Он считает, что это можно сделать в три этапа.

🦶Первым шагом является успешный запуск веб-приложения в локальной среде разработки Gradle/npm.

🦶Второй шаг — использовать локальный Docker. Веб-приложение успешно работает в Compose.

🦶Третий шаг — успешный запуск веб-приложения в облачном кластере K8s.

❓В чем разница между Docker Container и Docker Compose?

Из книги Ма Инонг узнал следующие отличия.

✅Первое является основой второго.

✅Что касается сценариев использования, первый позволяет программистам разрабатывать, создавать и тестировать отдельные контейнеры/микросервисы на своих локальных компьютерах. Последний разрабатывает, собирает и тестирует несколько контейнеров/микросервисов на локальном компьютере.

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

Последний использует подход «инфраструктура как код» для использования декларативного файла docker-compose.yml для описания нескольких контейнеров, соответствующих множеству микросервисов, включенных в систему приложений, для автоматической сборки, выпуска и запуска системы приложений.

✅Что касается файлов конфигурации,Первый используетDockerfile,И последний используетdocker-compose.yml

✅С точки зрения фокуса первый фокусируется на базовых изображениях, зависимых средах, исходном коде и выполняемых командах. Последний фокусируется на контейнерах, услугах и объемах.

✅Что касается различий, первый фокусируется только на определенном изображении и его контейнере, не учитывая доступ к другим контейнерам. Последний может использовать Dockerfile для сборки образа в соответствии с объявлением в файле docker-compose.yml.

✅Что касается развертывания, у них есть одна общая черта: один контейнер развертывает только один микросервис, а каждый микросервис работает только в одном контейнере.

Ма Инонг также планировал за один раз развернуть исходный код непосредственно в облачном кластере K8s.

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

Ма Инонг, новичок в Docker и K8, считал, что это неосуществимо.

он прекрасно осведомлен,Когда появляются новые требования или необходимо исправить ошибки,должен знать, как поставить измененный код,существоватьЛокальная среда разработки Gradle/npmотладка。То есть продолжайтеПервый этап самотестирования

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

После этого ему нужно знать, как собрать код, прошедший первый этап самотестирования, в докер. image,并существоватьлокальный докеруспешно запустить в,на будущееdocker imageразвернуть вK8sДелатьВторой этап самотестирования

Ведь местный докер-состав тоже находится на его территории. В этом смысл второго шага.

Наконец, ему нужно знать, как использовать докер, прошедший второй этап самотестирования. image,развернуть вОблачный кластер K8sи успешно работать,为之后развернуть в生产环境的Облачный кластер K8sДелатьТретий раунд самотестирования

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

🔥Google Kubernetes Engine (GKE) от Google, запущен в 2014 году.

🔥Служба Azure Kubernetes (AKS) Microsoft, запущенная в 2017 году.

🔥Служба Amazon Elastic Kubernetes (EKS) от Amazon, запущенная в 2018 году.

Он рассмотрел это с точки зрения доступности и решил выбрать службу Microsoft Azure K8s. Можно использовать бесплатно в течение 1 месяца.

Это тоже его территория. Самотестирование здесь гораздо удобнее, чем в среде производственного облачного кластера K8s на площадке группы эксплуатации и обслуживания.

2.4 Архитектура программного обеспечения в локальной среде разработки Gradle/npm

Ма Инонг — строгий человек.

Перед запуском веб-приложения он использовал модель C4, чтобы нарисовать архитектуру веб-приложения «Список покупок», когда оно запускалось в локальной среде разработки Gradle/npm. Как показано на рисунке 3 и рисунке 4.

На рис. 3 представлена ​​контекстная диаграмма, выходящая за пределы всего веб-приложения.

Вне системы есть два пользователя: Пользователь и Администратор.

Пользователь использует систему для управления списками покупок. Администратор использует систему для управления данными списка покупок.

Рис. 3. Схема контекстной архитектуры веб-приложения «Список покупок» в «Локальной среде разработки» Gradle/npm.
Рис. 3. Схема контекстной архитектуры веб-приложения «Список покупок» в «Локальной среде разработки» Gradle/npm.

На рис. 4 показана диаграмма контейнера, стоящая на границе всего веб-приложения и смотрящая внутрь.

В системе имеется 4 контейнера.

Ма Инонг напомнил себе, что концепция контейнера в модели c4 отличается от концепции контейнера в докере.

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

Пользователь просматривает и изменяет список покупок через внешний интерфейс списка покупок.

Внешний интерфейс списка покупок отправляет запрос пользователя на операцию со списком покупок во внутренний API списка покупок.

Затем серверный API списка покупок обращается к базе данных Postgres для запроса и обновления данных.

Администратор напрямую управляет данными в базе данных postgres с помощью инструмента управления базой данных pgadmin.

Прочитав книгу Docker Deep Dive, Ма Инонг узнал, что базы данных и инструменты управления можно установить с помощью docker compose, чтобы напрямую получить образ docker и запустить соответствующий контейнер docker, не прибегая к большим проблемам с загрузкой установочного пакета.

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

Рис. 4. Схема архитектуры контейнера веб-приложения «Список покупок» в Gradle/npm.
Рис. 4. Схема архитектуры контейнера веб-приложения «Список покупок» в Gradle/npm.

🔥【Продолжение следует. Я буду в отпуске на неделю, начиная с завтрашнего дня. Продолжите сериализацию позже.

⚠️Если вы хотите получить последнюю версию этой статьи и последующих серий с постоянно улучшаемым содержанием, вы можете в любое время оставить мне сообщение в области комментариев, и я пришлю вам последнюю версию.

🔥Краткий обзор содержания, которое будет сериализовано позже.

🔥3 Подготовка инструмента

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

3.2 Знакомство с исходным кодом

3.3. Используйте менеджер пакетов для установки jdk, чтобы облегчить переключение версий и обновление, а также локальную сборку серверных приложений.

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

🔥4 приближаемся к глубокой пещере

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

4.2. Запустите серверное приложение в локальной среде разработки Gradle/npm.

4.3. Запустите интерфейсное приложение в локальной среде разработки Gradle/npm.

🔥5 пройти через трудности

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

5.2 Очистка сцены

🔥6 схватить меч

6.1 Архитектура программного обеспечения в локальном Docker Compose

6.2 Зарегистрируйте бесплатную учетную запись Docker Hub, чтобы отправить образ Docker при подготовке к развертыванию k8s.

6.3 Создайте серверный образ Docker и отправьте его в Docker Hub.

6.4. Создайте внешний образ Docker и отправьте его в Docker Hub.

6.5 Запуск веб-приложения списка покупок в локальном Docker Compose

6.6 Очистите место происшествия

🔥7 Дорога в облако

7.1 Зарегистрируйте учетную запись облачной платформы службы Azure k8s

7.2 Откройте docker Desktop Kubernetes, чтобы kubectl мог нормально работать

🔥8 воскресение возрождение

8.1 Как настроить имя внешнего домена и номер порта интерфейсного приложения в облачном кластере k8s для решения проблемы CORS при запуске веб-приложения списка покупок в облачном кластере k8s

8.2 Проблема решена после настройки входа для внешнего приложения с помощью Quanxuanyuan.

8.3 Архитектура программного обеспечения в облачном кластере k8s

8.4 Как добавить файлы конфигурации развертывания, обслуживания и входа для k8s, чтобы три микросервиса: вход и postgres, Shopping-list-api и Shopping-list-front-end можно было развернуть на k8s с помощью команды kubectl.

8.5 Создайте серверный образ Docker и отправьте его в Docker Hub.

8.6. Создайте внешний образ Docker и отправьте его в Docker Hub.

8.7 Настройте три микросервиса Postgres, Shopping-List-API и Shopping-List-Front End, а также вход в облачный кластер k8s и запустите их.

8.8 Очистка сцены

🔥9 Возвращение к буддийским писаниям

Когда веб-приложение с разделением клиентской и серверной частей было наконец успешно развернуто в облачном кластере Azure K8s и бесперебойно использовалось, Ма Инонг описал весь путь контейнеризации и облака в серии статей и поделился ими с другими программистами.

❤️Если вам понравилась эта статья,Тогда вашСтавьте лайк, комментируйте и делайте репосты,то естьСамая большая поддержка для меня😃🤝🙏。

Я участвую в пятом выпуске специального учебного лагеря Tencent Technology Creation 2024 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Введение в принцип запуска Springboot, процесс запуска и механизм запуска.
boy illustration
Высокоуровневые операции Mongo, если данные не существуют, вставка и обновление, если они существуют (pymongo)
boy illustration
Проектирование и внедрение системы управления электронной коммерцией на базе Vue и SpringBoot.
boy illustration
Статья длиной в 9000 слов знакомит вас с процессом запуска SpringBoot — самым подробным процессом запуска SpringBoot в истории — с изображениями и текстом.
boy illustration
Как настроить размер экрана в PR. Учебное пособие по настройке размера видео в PR [подробное объяснение]
boy illustration
Элегантный и мощный: упростите операции ElasticSearch с помощью easy-es
boy illustration
Проект аутентификации по микросервисному токену: концепция и практика
boy illustration
【Java】Решено: org.springframework.http.converter.HttpMessageNotWritableException.
boy illustration
Изучите Kimi Smart Assistant: как использовать сверхдлинный текст, чтобы открыть новую сферу эффективной обработки информации
boy illustration
Начало работы с Docker: использование томов данных и монтирования файлов для хранения и совместного использования данных
boy illustration
Использование Python для реализации автоматической публикации статей в публичном аккаунте WeChat
boy illustration
Разберитесь в механизме и принципах взаимодействия потребителя и брокера Kafka в одной статье.
boy illustration
Spring Boot — использование Resilience4j-Circuitbreaker для реализации режима автоматического выключателя_предотвращения каскадных сбоев
boy illustration
13. Springboot интегрирует Protobuf
boy illustration
Примечание. Инструмент управления батареями Dell Dell Power Manager
boy illustration
Общая интерпретация класса LocalDate [java]
boy illustration
[Базовые знания ASP.NET Core] -- Веб-API -- Создание и настройка веб-API (1)
boy illustration
Настоящий бой! Подключите Passkey к своему веб-сайту для безопасного входа в систему без пароля.
boy illustration
Руководство по настройке Nginx: как найти, интерпретировать и оптимизировать настройки Nginx в Linux
boy illustration
Typecho отображает использование памяти сервера
boy illustration
Как вставить элемент перед указанным ключом в ассоциативный массив в PHP
boy illustration
swagger2 экспортирует API как текстовый документ (реализация Java) [легко понять]
boy illustration
Выбор фреймворка nodejs Express koa egg MidwayJS сравнение NestJS
boy illustration
Руководство по загрузке, установке и использованию SVN «Рекомендуемая коллекция»
boy illustration
Интерфейс PHPforwarding_php отправляет запрос на получение
boy illustration
Создавайте и защищайте связь в реальном времени с помощью SignalR и Azure Active Directory.
boy illustration
ВичатПубличная платформаразвивать(три)——ВичатQR-кодгенерировать&Сканировать кодсосредоточиться на
boy illustration
[Углубленное понимание Java IO] Используйте InputStreamReader для чтения содержимого файла и легкого выполнения задач преобразования текста.
boy illustration
сравнение строк PHP
boy illustration
9 сценариев асинхронного сбоя @Async