Рубрики
Uncategorized

Полное развертывание приложения с помощью Kubernetes

В этом посте мы будем развертываться полным приложением конечного к конечному приложению с помощью Kubernetes. Посмотрим… Помечено Kubernetes, DevOps, Tulciory, Microservices.

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

Мы будем использовать Minikube для развертывания нашего приложения в нашей локальной системе. Вы можете направить эту ссылку, чтобы узнать больше о Minikube: https://minikube.sigs.k8s.io/docs/start/

Как только вы закончите с этим постом, вы будете знакомы с приведенными ниже концепциями в Kubernetes:

  • Создание развертывания с использованием файла YAML.
  • Что такое POD и как определить POD в файле конфигурации YAML.
  • Как создать внутреннюю службу и сделать стручок доступным для других компонентов в кластере.
  • Как создать внешнюю службу и сделать стручок доступным за пределами кластера.

Пример приложения, который мы будем развертываться в кластере Kubernetes, будет так, как ниже. Мы развернем mongodb и Монго-экспресс Docker Image и получит доступ к монго-экспрессору из браузера.

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

1. Сначала мы создадим Mongodb Secret который будет содержать конфиденциальную информацию, такую как Монгодб имени пользователя и пароль в зашифрованном формате.

  1. Затем создайте Развертывание и обслуживание MongoDB который будет нести ответственность за создание стручка Mongdb и выявление MongoDB другим внутренним компонентам.
  2. Теперь мы создадим Mongodb configmap чтобы сохранить MongoDB URL и другая конфигурация.
  3. После создания и развертывания карты конфигурации мы создадим развертывание монгона Файл для создания монго-экспрессового стручка.
  4. Доступ к приложению из браузера.

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

Стручки : Стручки — это Самый маленький, самый базовый развертываемый Объекты в Kubernetes. POD представляет собой один экземпляр выполнения процесса в вашем кластере. Стручки содержат один или несколько контейнеров , такие как контейнеры Docker.

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

Configmap : ConfigMap — это объект API, используемый для хранения Неконфиденциальные данные в парах ключевых значений Анкет Стручки могут потреблять конфигурации в качестве переменных среды, аргументы командной строки или в качестве файлов конфигурации в томе. A Configmap Позволяет вам отделить конфигурацию с конкретной средой с изображений контейнеров, чтобы ваши приложения были легко переносимыми.

Развертывание : Развертывание — это объект ресурса в Kubernetes, который предоставляет декларативные обновления к приложениям. Развертывание позволяет вам описать жизненный цикл приложения, например, какие изображения использовать для приложения, количество стручков, которые должны быть, и способ их обновления.

Услуги : Сервис — это Логическая абстракция для развернутой группы стручков в кластере (которая выполняет одну и ту же функцию). Поскольку стручки являются эфемерными, сервис позволяет группе стручков, которые предоставляют конкретные функции (веб -службы, обработка изображений и т. Д.) Для назначения имени и уникального IP -адреса (кластера).

Примечание: ConfigMap не обеспечивает секретность или шифрование. Если данные, которые вы хотите сохранить, являются конфиденциальными, используйте секрет, а не ConfigMap, или используйте дополнительные (сторонние) инструменты для поддержания ваших данных.

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

Шаг 1: Создайте секреты, чтобы сохранить имя пользователя MongoDB и пароль.

Как наш mongodb Приложение требует имени пользователя и пароля для доступа, так как имя пользователя и пароль являются конфиденциальной информацией, поэтому будет создавать секреты для их сохранения. У нас есть имя пользователя как «имя пользователя» и пароль как «пароль». Мы сохраняем их, кодируя в BASE64 Анкет

Mongo-Secret.yaml

apiVersion: v1
kind: Secret
metadata:
    name: mongodb-secret
type: Opaque
data:
    mongo-root-username: dXNlcm5hbWU=
    mongo-root-password: cGFzc3dvcmQ=

Apiversion : Это версия API, используемого кластером.

добрый : Kind определите, является ли это развертыванием, секретом или конфигурацией.

Метаданные Здесь мы можем определить данные об объекте, который мы собираемся создать. В этом примере мы предоставляем только имя стручка. Но вы можете предоставить другие детали, такие как пространство имен.

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

данные : Данные содержат данные, вы хотите сохранить в качестве секретов.

Развернуть секретный файл конфигурации через Kubectl Apply -f mongo -secret.yaml Анкет

Шаг 2: Создайте развертывание и обслуживание Mongo, чтобы создать монго.

Теперь мы создадим развертывание Mongo для создания POD MongoDB, развертывание Mongo DB будет получать имя пользователя MongoDB и пароль из секретов Mongo, созданных на шаге 1.

Mongo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-username
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
spec:
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

В приведенном выше файле YAML мы определили две вещи:

1. Развертывание — Отвечает за создание капсула и репликат капсула. (Здесь мы создаем только одну копию). 2. Сервис — чтобы обнажить стручок на внутренний компонент.

Теперь давайте посмотрим на каждое поле в развертывании в более подробной информации:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-username
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-password

Apiversion : Это версия API, используемого кластером.

добрый : Kind определите, является ли это развертыванием, секретом или конфигурацией.

Метаданные Здесь мы можем определить данные об объекте, который мы собираемся создать. В этом примере мы предоставляем только имя стручка. Но вы можете предоставить другие детали, такие как пространство имен.

Spec : В файле вида развертывания у нас есть спектификация, которая отвечает за определение реплики, селектора и шаблона контейнера.

Replicas : Определите количество стручка, которая будет создана для этого контейнера.

Селектор : Внутренний селектор мы определяем соответствующую метку.

Шаблон : Шаблон — это фактический синий отпечаток контейнера и стручка, который будет создан.

Шаблон.metadata : Содержит информацию о POD, как этикетка и т. Д.

Шаблон.spec : Blueprint для контейнера, который необходимо создать.

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

имя : Название контейнера.

Изображение : Docker Image, которое будет вытащен из Docker Hub.

порты : на котором этот контейнер будет доступен.

env : Контейнер. В нашем случае переменные среды, такие как имя пользователя MongoDB и пароль.

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

Давайте посмотрим на сервис более подробно сейчас:

apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
spec:
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

Услуга Yaml имеет аналогичные поля, как и в развертывании, только поле TargetPort отличается, TargetPort это порт, на котором другой компонент может получить доступ к этому стручке.

Шаг 3: Создайте секреты для сохранения имени пользователя MongoDB и пароля

Теперь мы создадим конфигурацию, которая будет содержать URL -адрес mongoDB.

Mongo-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongodb-configmap
data:
  database_url: mongodb-service

Файл configmap почти похож на другой файл YAML.

Шаг 4: Создайте развертывание монго-экспрессии и внешнюю службу, чтобы создать монго-экспресс-капсул и выставить его на внешнюю часть кластера.

Mongo-Express.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-express
  labels:
    app: mongo-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo-express
  template:
    metadata:
      labels:
        app: mongo-express
    spec:
      containers:
      - name: mongo-express
        image: mongo-express
        ports:
        - containerPort: 8081
        env:
        - name: ME_CONFIG_MONGODB_ADMINUSERNAME
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-username
        - name: ME_CONFIG_MONGODB_ADMINPASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-secret
              key: mongo-root-password
        - name: ME_CONFIG_MONGODB_SERVER
          valueFrom:
            configMapKeyRef:
              name: mongodb-configmap
              key: database_url
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-express-service
spec:
  selector:
    app: mongo-express
  type: LoadBalancer  
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30000

Монго-экспресс Конфигурация развертывания аналогична mongodb Конфигурация развертывания, поэтому мы не будем обсуждать это здесь.

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

apiVersion: v1
kind: Service
metadata:
  name: mongo-express-service
spec:
  selector:
    app: mongo-express
  type: LoadBalancer  
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 30000

Этот файл сервиса содержит 2 поля дополнительных (тип, Nodeport) по сравнению с файлом обслуживания MongoDB.

Тип: LoadBalancer : делает службу внешней, назначив внешний IP -адрес службы.

Nodeport : Порт, на который можно получить доступ к кластеру.

Шаг 5: Доступ к монгово-экспрессутому из браузера.

Чтобы получить доступ к монгово-экспрессожному из браузера, нам нужно было бы найти IP-адрес Сервиса, назначенного Kubernetes.

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

kubectl get service

Как мы видим нашу внешнюю службу с названием Mongo-Express-Service и внутреннего обслуживания MongoDB-Service, оба были созданы.

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

minikube service mongo-express-service

Теперь скопируйте URL -адрес в браузере и проверьте, доступно ли приложение.

Мы видим, что мы можем получить доступ к приложению в нашем браузере на порту 30000, как указано во внешнем файле YAML Service.

Вывод

Таким образом, мы развернули полное приложение для конец Mongo DB на Kubernetes и получить к нему доступ через наш браузер. Мы создали монгодб и сделали его доступным для другого компонента с помощью внутреннего обслуживания. Мы также создали один стручок для Mongo-Express, чтобы внести изменения в MongoDB и создали внешнюю службу, чтобы сделать его доступным за пределами кластера или внешнего источника.

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

Этот пост был впервые опубликован в моем личном блоге. Если вы найдете этот контент в блоге, вы можете посетить мой блог для аналогичного контента: https://ishantgaurav.in/

Оригинал: «https://dev.to/ishant14/complete-application-deployment-using-kubernetes-1b4b»