В этом посте мы будем развертывать полное приложение для окончания к конечному приложению, используя Kubernetes Анкет Мы увидим и обсудим, как различные компоненты Kubernetes дополняют друг друга и сделают процесс развертывания приложения плавным.
Мы будем использовать Minikube для развертывания нашего приложения в нашей локальной системе. Вы можете направить эту ссылку, чтобы узнать больше о Minikube: https://minikube.sigs.k8s.io/docs/start/
Как только вы закончите с этим постом, вы будете знакомы с приведенными ниже концепциями в Kubernetes:
- Создание развертывания с использованием файла YAML.
- Что такое POD и как определить POD в файле конфигурации YAML.
- Как создать внутреннюю службу и сделать стручок доступным для других компонентов в кластере.
- Как создать внешнюю службу и сделать стручок доступным за пределами кластера.
Пример приложения, который мы будем развертываться в кластере Kubernetes, будет так, как ниже. Мы развернем mongodb и Монго-экспресс Docker Image и получит доступ к монго-экспрессору из браузера.
Чтобы развернуть приведенное выше приложение на Kubernetes, мы будем выполнять следующие шаги:
1. Сначала мы создадим Mongodb Secret который будет содержать конфиденциальную информацию, такую как Монгодб имени пользователя и пароль в зашифрованном формате.
- Затем создайте
Развертывание и обслуживание MongoDBкоторый будет нести ответственность за создание стручка Mongdb и выявление MongoDB другим внутренним компонентам. - Теперь мы создадим
Mongodb configmapчтобы сохранитьMongoDB URLи другая конфигурация. - После создания и развертывания карты конфигурации мы создадим
развертывание монгонаФайл для создания монго-экспрессового стручка. - Доступ к приложению из браузера.
Перед реализацией вышеуказанных шагов для развертывания приложения 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»