导语
Mendix for Private Cloud将公司的云原生架构扩展到任何私有化配置或数据中心。运行在Kubernetes上的Mendix for Private Cloud可以满足企业私有云或者混合云上特定的安全性、兼容性或数据集成要求。开发人员可以协作、测试、监控并将应用程序部署到Mendix for Private Cloud或任何其他云目标,您可以在Developer Portal 中指定 Kubernetes、Openshift 私有云集群,进行部署和管理、监控Mendix应用程序。
01. 简介
Mendix For Private Cloud 正式支持以下平台:红帽Openshift、亚马逊弹性Kubernetes服务(AWS-EKS)、Azure Kubernetes服务(AKS)。该方案有区别于传统部署在K8S和Openshift方式,主要体现在该方案是通过Developer Portal部署,通过Developer Portal 对app打包、构建、环境选择、部署、弹性伸缩、监控、管理的完整devops闭环。主要介绍基于Openshift平台的解决方案,中间也会简单介绍其他平台相应的操作。
实现这一目标需要两个步骤,如下所示。
Registering Your Cluster
第一步是在开发人员门户中注册私有云集群。有关详细信息,请参阅注册私有云集群。
Deploying Your App
第二步是要部署应用程序,您有两个选项:
-
您可以从开发人员门户中部署应用程序。有关更多信息,请参阅从开发人员门户将Mendix应用程序部署到私有云群集。
-
您可以创建一个CI/CD管道并在集群内部署应用程序。有关更多信息,请参阅使用命令行将Mendix应用程序部署到私有云群集。
我们主要是介绍第一种方式,从developer portal开发者门户上部署应用程序。
02. 注册私有云集群
要允许您管理应用程序到Red Hat OpenShift和Kubernetes的部署,首先需要在Mendix开发人员门户中注册集群。这将为您提供在OpenShift上下文中部署Mendix operator 、Mendix gateway agent所需的信息,并通过Interactior创建到Mendix应用程序环境页面的链接。
注册群集的先决条件
-
Kubernetes平台或OpenShift 3.11或更高版本
-
支持https认证的私有镜像仓库registry
进行注册集群
获得脚本
1. 从开发者门户的Apps菜单中选择Cluster Manager
2. 点击注册集群
3. 输入下面的信息
- Name – 要为正在注册的群集提供的名称。
- Namespace –这是您平台中的命名空间。
- Type – 为群集选择正确的类型。
- Installation type – 如果要从Mendix开发人员门户创建环境并部署应用程序,请选择“已连接”,但如果只想使用CLI通过Mendix操作员控制部署,请选择“独立”。
4. 点击 Done
运行安装的脚本
您需要对私有云平台拥有管理员权限,这意味着您必须在运行安装脚本之前登录。
1. Signing in to OpenShift
这些说明适用于OpenShift平台;其他平台也需要类似的过程。
要在OpenShift上运行安装脚本,在Bash中运行脚本之前,必须使用OpenShift CLI登录到OpenShift。
您可以执行以下操作:
-
登录到OpenShift控制台。
-
单击“用户”下拉列表中的“复制登录命令
-
将命令粘贴到Bash中并按Enter键
2. Executing the Installation Script
要执行安装脚本,请执行以下操作:
-
通过单击“复制到剪贴板”复制为您创建的安装脚
-
将脚本粘贴到Bash控制台中,然后按Enter运行脚本
对脚本的响应应该如下图所示。可以看到脚本安装了以下内容
a.mendix-agent
b.mendix-operator
如果响应以Installation Successful.结束,则安装成功。
Mendix operator and Mendix agent现在已安装在您的平台上。如果在OpenShift控制台中查看项目资源,可以看到mendix operator、mendix agent资源。
始终可以在群集管理器中的群集的“安装”选项卡中再次找到安装脚本。
3. Running the Reconfiguration Script
在将应用程序部署到命名空间之前,需要配置许多服务,即:
-
database
-
file storage
-
proxy
-
registry
-
ingress (network)
Mendix为您提供了一个脚本,它将在最初配置这些脚本,并且可以在您希望更改配置方式的任何时候重新运行这些脚本。
-
通过单击“复制到剪贴板”复制为您创建的重新配置脚本。
-
按Enter启动脚本.
会问你一系列问题。键入与您的选择相对应的数字,或输入所需的值。
(1) What do you want to do?
如果这是初始配置,请选择1,系统将引导您完成所有需要配置的项。
如果已经有配置,但要重新配置其中的一部分,请选择2。如果选择此选项,则可以直接导航到要配置的对象,即以下对象之一:
-
Database
-
Storage
-
Ingress
-
Registry
-
Proxy
使用数据库或存储重新配置群集时,除了已设置的任何服务外,还将添加新服务。然后,这些计划将被添加到开发人员门户,并且可以在为应用程序创建环境时使用,除非您特别停用它们。
您可以从任何其他问题返回到初始问题,方法是选择“返回到可用的起始位置”。
(2) Pick a database type
Postgres将允许您输入值来配置PostgreSQL数据库。您需要提供关于PostgreSQL数据库的所有信息,如计划名称、主机、端口、数据库、用户和密码。
如果计划已经存在,您将收到一个无法创建它的错误。这不是问题,您可以继续使用该计划,它现在将具有新的配置。
例如:可通过以下命令创建一个postgers数据库
docker run --name postgres-private-mendix -e POSTGRES_PASSWORD=123456 -e POSTGRES_USER=mendix -e POSTGRES_PASSWORD=mendix -p 5432:5432 -d postgres
Ephemeral将使您能够快速设置环境并部署应用程序,但当您重新启动环境时,存储在数据库中的任何数据都将丢失。
(3) Pick a storage type
Minio将连接到Minio S3兼容的对象存储。您需要提供有关您的MinIO存储的所有信息,如端点、访问密钥和密钥。MinIO服务器需要是功能齐全的MinIO服务器,而不是MinIO网关。(Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB)。
##server端安装
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data
注意启动显示的 appkey secretkey是默认登录账户,密码
浏览器访问:http://ip:9000
Amazon S3将连接到AWS帐户以创建S3存储桶和关联的IAM帐户。每个应用程序将收到一个专用的S3存储桶和一个IAM帐户,该帐户只能访问特定的S3存储桶。您需要提供有关Amazon S3存储的所有信息,如计划名称、区域、访问密钥和密钥。关联的IAM帐户需要具有以下IAM策略(用您的AWS帐户号替换<account_id>):
{
"Version": "2020-4-17",
"Statement": [
{
"Sid": "bucketPermissions",
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket"
],
"Resource": "arn:aws:s3:::mendix-*"
},
{
"Sid": "iamPermissions",
"Effect": "Allow",
"Action": [
"iam:DeleteAccessKey",
"iam:PutUserPolicy",
"iam:DeleteUserPolicy",
"iam:DeleteUser",
"iam:CreateUser",
"iam:CreateAccessKey"
],
"Resource": [
"arn:aws:iam::<account_id>:user/mendix-*"
]
}
]
}
Ephemeral将使您能够快速设置环境并部署应用程序,但当您重新启动环境时,您存储的任何数据对象都将丢失。
(4)Pick an ingress type
OpenShift Route将设置OpenShift Route。这只能用于OpenShift集群。
Ingress 将根据您提供的其他域名配置入口。
两种形式的入口都可以启用或禁用TLS。
(5)Pick a registry type
您可以选择下列注册表类型之一。OpenShift注册表只能用于OpenShift平台上的集群。AWS ECR只能用于AWS EKS集群。对于其中一些注册中心,您可能需要提供其他信息,如pull URL、push URL、name和secret。
-
OpenShift 3 Registry
-
OpenShift 4 Registry
-
Amazon Elastic Container Registry (AWS ECR)
-
Generic registry with authentication (this should either be Public or should have image pull secrets enabled).
-
Generic registry without authentication
pull_url:
service+port地址:docker-registry.default.svc.cluster.local:5000
以上地址需要在/etc/docker/daemon.json添加
"insecure-registries":["docker-registry.default.svc.cluster.local:5000"]
如果是阿里云的registry,之后pushing会报不支持的error
(6)Do you want to configure the proxy
如果需要代理才能从群集访问公共internet,请选择“Yes”;系统将要求您提供代理配置详细信息。
-
在开发者门户上选择其中的一个app,然后在Mendix app的Settings 页面点击 Cloud Settings。
-
点击 Mendix for Private Cloud
- 点击 Set up Mendix for Private Cloud
Confirming Cluster Configuration
正确配置群集后,其状态将变为Connected。如果屏幕没有自动更新,您可能需要单击刷新按钮。
03. 当前限制
存储资源调配
如果操作员未能设置或取消设置存储(数据库或文件存储),则不会重试该操作。如果存在失败的*-数据库或*-文件,则需要执行以下操作:
-
检查失败的pod日志以获取错误消息。
-
排除故障并修复此错误的原因。
-
删除失败的pod以再次重试该进程。
04. 故障排除
本节涵盖了当Mendix无法自动恢复并且可能需要手动干预时可能出现的问题。
Status Reporting
在某些情况下,群集及其环境的状态更改不会自动更新。要确保看到当前状态,可能需要单击屏幕上的刷新按钮(而不是浏览器页面刷新按钮)。
Agent Connection Status Not up to Date
群集状态可能显示为等待连接,即使代理已实际连接到群集。需要重新启动代理以强制其重新连接。
在部署Mendix运算符的命名空间中运行以下命令:
-
OpenShift类型的
oc scale deployment mendix-agent --replicas=0 && \
sleep 200 && \
oc scale deployment mendix-agent --replicas=1
-
Kubernetes类型的
kubectl scale deployment mendix-agent --replicas=0 && \
sleep 200 && \
kubectl scale deployment mendix-agent --replicas=1
05. 容器化的Mendix应用架构
在集群中,您可以运行一个或多个Mendix应用程序。每个应用程序都在一个命名空间中运行。您可以在下图中看到Mendix环境和Kubernetes命名空间之间的关系。
因为您可以在同一集群中运行多个Mendix应用程序,所以每个应用程序必须具有唯一的名称。此外,应用程序不能与用于部署应用程序的Mendix Operator 同名。
更多信息,请访问以下链接:
Mendix官网:https://www.mendix.com/zh/
Mendix行业解决方案:https://solutions.mendix.com/
Mendix平台指南:https://www.mendix.com/evaluation-guide/
Mendix动画展示:https://www.mendix.com/demos/