Полное руководство по развертыванию приложений React в Kubernetes.

Kubernetes (также сокращенно K8S, где 8 означает 8 букв между K и S) — это система с открытым исходным кодом, которая упрощает и ускоряет развертывание, масштабирование и управление контейнерными приложениями.

В этом руководстве вы узнаете, как развернуть приложение React.js в Kubernetes с помощью Docker и Minikube.

Предпосылки

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

  1. Вам необходимо установить LTS-версию Node.js.
  2. Вам также необходимо установить Docker, а также создать учетную запись Docker Hub.
  3. Вам необходимо установить Minikube. Minikube поможет вам создать кластеры Kubernetes. Следуйте инструкциям здесь, чтобы установить и настроить minikube на вашем компьютере.

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

Контур

  1. Настройте проект React.js
  2. Настройте и запустите образ Docker.
  3. Разверните образ Docker в Kubernetes
  4. Заключение

Настройте проект React.js

В этом разделе вы создадите простой проект React.js с помощью инструмента vite. Вы можете использовать инструмент create-react-app, но в этом примере я буду использовать vite, потому что он быстрее.

Создайте папку для своего проекта и перейдите в каталог папки на терминале. Затем выполните команду ниже:

npm create vite

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

Затем вам будет предложено выбрать тип проекта. Прокрутите вниз до React и нажмите Enter. Наконец, выберите язык для своего проекта, выберите JavaScript и нажмите Enter. Это создаст проект React внутри каталога вашего проекта.

Наконец, вам нужно установить все пакеты, необходимые для запуска вашего приложения React, поэтому выполните команду ниже:

#move into your react project folder.
cd React-Kubernetes

#install dependencies and packages to your React-Project
npm install

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

#run your application.
npm run dev

Это откроет ваше приложение http://localhost:5173, и вы сможете просмотреть его в любом браузере по вашему выбору.

Теперь у вас есть работающий проект React.js.

Настройка и запуск образа Docker

В этом разделе вы создадите образ докера для вашего проекта React.js, который вы только что создали. Затем запустите образ докера с помощью nginx. В этом разделе есть три шага, а именно:

Создайте и настройте файл Dockerfile:

Файл Dockerfile — это файл без расширения. Файл Dockerfile не нуждается в каком-либо расширении, чтобы указать его как aDockerfile. Вы можете просто создать Dockerfile, вызвав простой текстовый файл Dockerfile. Инструкции, которые создадут образ Docker и настроят среду для вашего контейнера Docker, будут написаны внутри Dockerfile file. Таким образом, в корне каталог вашего проекта React.js, создайте файл a Dockerfile следующим образом:

Вы можете продолжить и добавить следующие инструкции в свой файл Dockerfile.

Первая инструкция вашего файла Dockerfile установит образ Node.js из концентратора Docker в качестве базового образа вашего приложения. Поскольку приложения React.js работают на Node.js, вы должны предоставить образ node.js, где он будет работать Docker,, добавив следующий код в файл your Dockerfile:

# Set the base image to build from 
FROM node:alpine

Следующая инструкция, которую вы добавите в файл your Dockerfile, создаст рабочий каталог. Этот каталог будет служить папкой Docker, в которой ваше приложение будет работать внутри контейнера. Чтобы создать рабочий каталог, добавьте в файл your Dockerfilefile приведенный ниже код:

# set the working directory
WORKDIR /app

Основываясь на приведенном выше коде, у нас есть две части. Первая часть — это команда WORKDIR, которая представляет собой команду docker для установки рабочего каталога в вашем контейнере (приложении). Затем вторая часть the /app, the /app служит каталогом, который вы хотите сделать рабочим каталогом. Вместе команда установит app как рабочий каталог вашего контейнера докеров.

Если для рабочего каталога задано значение app, следующим шагом будет копирование файлов package.json и package-lock.json в рабочий каталог вашего контейнера с помощью команды docker COPY command.

Добавьте приведенный ниже код в файл your Dockerfile file:

# copy package.json and package-lock.json files
COPY package.json ./
COPY package-lock.json ./

Приведенный выше код скопирует файлы package.json и package-lock.json в рабочий каталог (/app).

Следующая инструкция, которую вы добавите в файл Dockerfile, запустит команду установки, которая установит все зависимости из файлов package.json и package-lock.json в ваш каталог Docker app (рабочий каталог).

Добавьте приведенный ниже код, чтобы включить эту инструкцию в файл your Dockerfile:

# install dependencies
RUN npm install

Команда RUN выполнит команду установки npm и установит все зависимости и пакеты.

Добавьте приведенный ниже код в файл your Dockerfile:

# copy everything to /app directory
COPY ./ ./ 

Приведенный выше код скопирует все файлы из каталога вашего проекта React.js в каталог вашего приложения Docker.

Наконец, вы должны добавить инструкции, которые будут выполняться при запуске или запуске вашего контейнера. Для этого добавьте в файл your Dockerfile приведенный ниже код:

# run the app
CMD ["npm", "start"]

Ваш код Dockerfile должен выглядеть так, как показано ниже:

# Set the base image to build from 
FROM node:alpine

# set the working directory
WORKDIR /app

# copy package.json and package-lock.json files
COPY package.json ./
COPY package-lock.json ./

# install dependencies
RUN npm install

# copy everything to /app directory
COPY ./ ./

# run the app
CMD ["npm", "start"]

Добавьте инструкции для запуска вашего приложения с помощью Nginx:

На этом шаге вы настроите инструкции, которые будут запускать ваш скрипт Dockerfile с помощью Nginx. Nginx (произносится как engine-X) — это обратный прокси-сервер с открытым исходным кодом для протоколов HTTP, HTTPS, SMTP, POP3 и IMAP, который обслуживает веб-приложения с помощью Docker и создает облегченные образы для минимизации объема памяти.

Чтобы использовать Nginx, вы должны запустить приложение React.js в рабочем режиме и создать рабочую кодовую базу. Запустите приведенную ниже команду в каталоге вашего проекта React.js:

npm run build

Приведенная выше команда создаст папку dist в каталоге вашего проекта React.js, если вы используете инструмент vite при создании приложения React.js.

Теперь вы можете добавить следующий код в your Dockerfile, чтобы запустить приложение Docker с помощью Nginx:

FROM nginx:alpine
COPY dist/ /usr/share/nginx/html

Создайте образ Docker для вашего приложения React:

На этом шаге вы создадите образ Docker для своего приложения React.js. В каталоге вашего проекта React.js выполните следующую команду:

docker build -t <image-name> < Dockerfile filepath>

<image-name> — это имя, которое вы хотите дать своему образу Docker, а <Dockerfile filepath> — это расположение вашего файла Dockerfile в вашем проекте, который в данном случае находится в корневом каталоге вашего проекта. Я также решил назвать свой образ Docker react-kubernetes-app., поэтому ваша команда должна выглядеть так, как показано ниже.

docker build -t react-kubernetes-app .

"." в конце команды представляет путь Dockerfile

Приведенный выше код создаст образ Docker с инструкциями, которые вы передали в the Dockerfile, где имя образа Docker будет react-kubernetes-app.. Я выбрал имя react-kubernetes-app в качестве имени образа Docker для этого руководства, но вы можете выбрать любое имя, которое вам подходит. Затем the. в конце указывает путь к файлу для the Dockerfile

После успешного создания образа Docker вы должны увидеть в терминале что-то вроде изображения ниже:

Вы можете проверить, успешно ли создан ваш образ Docker, выполнив следующую команду:

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

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

docker run -it -p 4000:3000 react-kubernetes-app

где 4000 представляет номер порта для вашего образа Docker, а 3000 представляет номер порта вашего хоста, а react-kubernetes-app — это имя вашего образа Docker. Эта команда вернет идентификатор контейнера на терминал в случае успешного выполнения.

Запуск образов Docker с помощью Kubernetes

На этом этапе вы собираетесь отправить образ Docker, созданный на шаге 3, в реестр Docker. Для этого вам понадобится учетная запись Docker hub. Если у вас нет учетной записи Docker Hub, создайте ее здесь.

В своем терминале в каталоге проекта React.js войдите в свою учетную запись концентратора Docker с помощью следующей команды:

docker login

Это попросит вас указать имя пользователя и пароль вашей учетной записи Docker Hub. Если имя пользователя и пароль, которые вы указали, верны, вы увидите сообщение “Login Succeeded” на своем терминале.

Теперь вы можете создать образ, используя имя пользователя своей учетной записи Docker Hub. Запустите приведенную ниже команду в том же каталоге, что и ваш проект React.js:

docker build -t <docker-hub-username>/react-kubernetes-app .

Замените <docker-hub-username> своим именем пользователя Docker Hub.

docker push <docker-hub-username>/react-app:latest

Не забудьте заменить <docker-hub-username> именем пользователя вашей учетной записи Docker Hub.

Разверните образ Docker в Kubernetes

В этом разделе вы собираетесь развернуть образ Docker, созданный в разделе 2, в кластере Kubernetes. Первым шагом в этом разделе будет создание файла развертывания. В корневом каталоге вашего проекта React.js создайте файл deployment.yaml и добавьте в него следующие конфигурации:

Установите количество pods, которое должно быть в вашем кластере Kubernetes. По умолчанию в вашем кластере Kubernetes должно быть два pods, рабочего и главного модуля. Добавьте приведенный ниже код в файл deployment.yaml, чтобы настроить кластер Kubernetes на 2 модуля:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: react-kubernetes-app
spec:
  replicas: 2
  selector:
    matchLabels:
     app: react-kubernetes-app
  template:
    metadata:
      labels:
        app: react-kubernetes-app
    spec:
      containers:
      - name: react-kubernetes-app
        image: <docker-hub-username>/react-kubernetes-app:latest
        imagePullPolicy: Always
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
---

Основываясь на приведенном выше коде, вы установили имя своего приложения для развертывания на react-kubernetes-app. и установили количество модулей на два. Затем укажите образ, который вы собираетесь использовать при создании своего приложения, то есть образ, который вы отправили в свой докер-хаб. Вы также указали порт, на котором должен работать ваш контейнер, как port 80.

Обратите внимание, что имя вашего образа должно начинаться с вашего имени пользователя Docker Hub, то есть в строке 17, замените <docker-hub-username> на имя пользователя вашей учетной записи Docker Hub.

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

apiVersion: v1
kind: Service
metadata:
 name: react-kubernetes-app
spec:
  type: NodePort
  selector:
    app: react-kubernetes-app
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
      nodePort: 31000

Собрав все вместе, your deployment.yaml file должен выглядеть так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: react-kubernetes-app
spec:
  replicas: 2
  selector:
    matchLabels:
     app: react-kubernetes-app
  template:
    metadata:
      labels:
        app: react-kubernetes-app
    spec:
      containers:
      - name: react-kubernetes-app
        image: <docker-hub-username>/react-kubernetes-app:latest
        imagePullPolicy: Always
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
 name: react-kubernetes-app
spec:
  type: NodePort
  selector:
    app: react-kubernetes-app
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
      nodePort: 31000

В терминале запустите код ниже:

minikube start

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

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

kubectl apply -f deployment.yaml

Это развернет ваш образ докера, используя конфигурации развертывания в файле your deployment.yaml.

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

kubectl get pods

Это покажет вам все модули, которые есть в вашем кластере Kubernetes. Убедитесь, что статус ваших модулей — “Running”..

Если ваши модули находятся в состоянии “Running”,, запустите:

kubectl get service

Затем снова запустите команду kubernetes get pods. Теперь вы можете назначить кластеру Kubernetes статический URL-адрес, который можно использовать для доступа к вашему развернутому приложению в браузере, выполнив следующую команду:

minikube service react-kubernetes-app

Это создаст URL-адрес, который вы сможете использовать для доступа к развернутому приложению Kubernetes в своем браузере. Если вы нажмете на этот URL-адрес, вы сможете увидеть приложение React.js, которое вы развернули в Kubernetes.

Заключение

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

В этом руководстве вы смогли создать и развернуть приложение React.js в Kubernetes с помощью Docker, minikube и kubectl.