Контейнерное путешествие программистов в облако в 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода