本实践由AWS与西门子工业软件授权发布,未经允许不得转载
Amazon EKS 还与许多 AWS 服务集成以便为您的应用程序提供可扩展性和安全性,包括:
• 用于容器镜像的 Amazon ECR
• 用于负载分配的 ELB
• 用于身份验证的 IAM
• 用于隔离的 Amazon VPC
Amazon EKS 工作原理 AmazonEKS 可为您预配置(启动)和管理 Kubernetes 控制平面。总体来说,Kubernetes 由两大组件构成 – 运行容器的工作节点集群和管理容器在集群上的启动时间和位置并监控容器状态的控制平面。 如果不使用 Amazon EKS,您需要自行管理 Kubernetes 控制平面和工作节点集群。借助 Amazon EKS,您可以使用Amazon 系统镜像 (AMI) 和 AWS CloudFormation 脚本预置工作节点集群,而 AWS 负责使用高可用且安全的配置来预置、扩展和管理 Kubernetes 控制平面,从而消除了运行Kubernetes 的繁重运维负担,让您能够专注于应用程序构建而非 AWS基础设施管理。参照官方AWS EKS服务提供的workshop实践环境
https://github.com/aws-samples/eks-workshop-greater-china 本次Mendix app需要的软件环境有AWS cli , eksctl ,kubectl,以及AWS EKS对应操作的IAM权限。mkdir -p /usr/local/awsekscd /usr/local/awsekscurl"https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"unzip awscli-bundle.zipsudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/awsaws –version
#配置aws cli的用户权限$aws configureAWS Access Key ID :AWS Secret Access Key :Default region name:Default output format [None]:
键入该命令时,AWS CLI 会提示您输入四条信息:访问密钥、秘密访问密钥、AWS 区域和输出格式。此信息存储在名为 default 的配置文件(一个设置集合)中。将使用此配置文件,除非您指定另一个文件。 以上Access Key ID、Secret Access Key、region name为必填字段,识别AWS账号信息可在个人账号的IAM角色的SecurityCredentials下。
保存accesskey和Secretaccess key,Aws提 供的region name值可以为cn-northwest-1。
#测试AK/SK是否生效aws sts get-caller-identity #如果可以正常返回以下内容(包含account id),则表示已经正确设置角色权限{
"Account":"", "UserId":"AIDAIG42GHSYU2TYCMCZW", "Arn":"arn:aws:iam:::user/"}
3.3 安装 eksctl,kubectl
目前eksctl对于China region的支持需要版本 >=eksctl 0.15.0,具体参考 https://github.com/weaveworks/eksctl
#设置默认regionexport AWS_DEFAULT_REGION=cn-north-1export AWS_REGION=cn-north-1 #eksctl#linuxcurl -OL"https://github.com/weaveworks/eksctl/releases/download/0.15.0-rc.2/eksctl_$(uname -s)_amd64.tar.gz"tar -zxf eksctl_$(uname -s)_amd64.tar.gzsudo mv ./eksctl /usr/local/bin #kubectlhttps://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#Linuxcurl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.15.10/2020-02-22/bin/linux/amd64/kubectl chmod +x ./kubectlsudo mv ./kubectl /usr/local/bin
检查工具的版本 eksctl (版本>=0.15.0),kubectl(版本>=1.15)
$eksctl version0.15.0-rc.2$kubectl version
由于我们的EKS还没创建,所以kubectl连接不到server端,暂时不用考虑。
#环境变量#CLUSTER_NAME 集群名称#AWS_REGION cn-northwest-1:宁夏区;cn-north-1:北京区 AWS_REGION=cn-north-1AWS_DEFAULT_REGION=cn-north-1CLUSTER_NAME=mendix #参数说明#--node-type 工作节点类型默认为m5.large#--nodes 工作节点数量默认为2 eksctl create cluster--name=${CLUSTER_NAME} --node-type t3.medium --managed --alb-ingress-access--region=${AWS_REGION}
参考输出:
之后可以在控制台中查看相关信息 如: CloudFormation , EKS 集群, EC2 等
查看EKS集群信息:
新建文件夹mendix,存放5个文件分别是postgres-service.yaml、postgres-deployment.yam,mendix-app-service.yaml,mendix-app-secrets.yaml,mendix-app.yaml。
mkdir meddixcd mendixvim postgres-service.yaml## postgres-service.yamlapiVersion: v1kind: Servicemetadata: name: postgres-servicespec: type: ClusterIP ports: - port: 5432 selector: service: postgres vim postgres-deployment.yaml## postgres-deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: postgresspec: replicas: 1 selector: matchLabels: service: postgres template: metadata: labels: service: postgres spec: containers: - name: postgres image: postgres:10.1 ports: - containerPort: 5432 env: - name: POSTGRES_DB value: db0 - name: POSTGRES_USER value: mendix - name: POSTGRES_PASSWORD value: mendix volumeMounts: - mountPath: "/var/lib/postgresql/data" name: "mendix-pgdata" volumes: - hostPath: path: "/home/docker/pgdata" name: mendix-pgdata vim mendix-app-service.yaml## mendix-app-service.yaml apiVersion: v1kind: Servicemetadata: name: mendix-app-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlbspec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: mendix-k8s type: LoadBalancer vim mendix-app-secrets.yaml## mendix-app-secrets.yamlapiVersion: v1kind: Secretmetadata: name: mendix-app-secretstype: Opaquedata: admin-password: UGFzc3dvcmQxIQ== db-endpoint: cG9zdGdyZXM6Ly9tZW5kaXg6bWVuZGl4QHBvc3RncmVzLXNlcnZpY2U6NTQzMi9kYjA= vim mendix-app.yaml## mendix-app.yamlapiVersion: apps/v1kind: StatefulSetmetadata: name: mendix-k8s-stateful labels: app: mendix-k8sspec: serviceName: mendix-k8s-ss replicas: 2 selector: matchLabels: app: mendix-k8s template: metadata: labels: app: mendix-k8s spec: containers: - name: mendix-app image: qs0qdd/heartracking:v1.5 ports: - containerPort: 8080 env: - name: ADMIN_PASSWORD valueFrom: secretKeyRef: name: mendix-app-secrets key: admin-password - name: DATABASE_ENDPOINT valueFrom: secretKeyRef: name: mendix-app-secrets key: db-endpoint
[root@ibsshl13 awseks]# tree mendix/mendix/├── mendix-app-secrets.yaml├── mendix-app-service.yaml├── mendix-app.yaml├── postgres-deployment.yaml└── postgres-service.yaml
##运行kubectl apply -f mendix/#查看mendix访问域名Kubectl get svc –namespaces
service类型为LoadBalancer,需要在安全组中添加入站规则,TCP 5678
通过域名+5678即可访问
使用mendix/Passward1! 登录
对于mendix应用只需要修改mendix-app.yaml文件的image镜像即可
Mendix镜像构建参考
https://github.com/mendix/docker-mendix-buildpack
更多信息,请访问以下链接:
Mendix官网:
https://www.mendix.com/demos/
Mendix行业解决方案:
https://solutions.mendix.com/
Mendix平台指南:
https://www.mendix.com/evaluation-guide/
Mendix动画展示:
https://www.mendix.com/demos/
Mendix课程学习: https://gettingstarted.mendixcloud.com/link/home
优酷课程学习:
https://i.youku.com/mendix
●往期推荐 ●
● Mendix教你10分钟快速创建企业级应用
● Mendix应用快速部署阿里云容器服务
● Mendix应用私有化部署指南
● Mendix 如何因应紧急的需求而快速开发App