iManager for K8S 站点定制(以MongoDB为例)

作者:ls

目录

  • 背景
  • 前期准备
  • 实现效果
  • 实现过程
  • 附录
    • YAML中的属性配置
    • 占位符列表

背景

  SuperMap iManager支持一键创建用户定制的站点,可将已添加的站点模板创建为站点环境,并通过站点使用应用。
  定制站点与其他站点相同,在监管方面,可通过拓扑图了解各项服务间的关联及节点状、查看站点账户、查看服务度量指标与追踪记录、添加服务、设置站点资源上限、重新部署站点、删除站点、使用关键字搜索服务。可对服务一键重新部署,调整服务规格,开启/停用服务,修改服务所用镜像,开启/关闭部分服务端口,编辑服务编排,对服务节点手动/动态伸缩,解决单点失效。可查看每个服务的操作日志,并支持在命令行输入shell命令操作服务节点。
  本文将以MongoDB数据库为例,完成对站点的创建、使用、监控与管理等功能。

前期准备

iManager for K8S、MongoDB docker镜像、MongoDB站点编排文件

实现效果

  在iManager中成功部署MongoDB站点后,便可对其进行快捷的管理与监控,包括:调整规格、重新部署、修改进行、指定主机和编辑编排内容等管理操作,以及CPU使用率、内存使用量、网络接收速率、网络传输速率和硬盘使用量等监控功能。
在这里插入图片描述

实现过程

【定制文件制作】

1:制作镜像
  将所需的应用Docker容器化,推荐使用Dockerfile的形式将自己的应用制作为Docker镜像,镜像制作方式可以参考Docker官方文档:https://docs.docker.com/engine/reference/builder/

2:编写YAML文件
  您可以通过编写YAML文件创建应用,iManager支持创建的实例类型包括Service, Deployment, Statefulset, Job, PersistentVolumeClaim, ServiceAccount, ConfigMap。
YAML编写规则可参考: https://kubernetes.io/docs/concepts/
  此外,您可通过配置Service、Deployment和StatefulSet的labels和annotation属性来控制应用的界面展示。支持配置的参数参见本文附录。

提示:编写YAML文件时请使用utf-8编码,否则会出现中文乱码。

本文示例的MongoDB YAML文件详情:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:labels:type: mongo#pvc名称,应用的id: ${appsetId}name: pvc-nfs-mongo-data-${appsetId}
spec:#storageClass名称,固定为appset-storage-class-${GROUP_TYPE},应用所属分组类型:${GROUP_TYPE}storageClassName: appset-storage-class-${GROUP_TYPE}accessModes:- ReadWriteManyresources:requests:storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:labels:type: mongoname: mongo-serverannotations:#服务地址,服务的nodePort:${NODE_PORT}addressReg: "mongodb://${SERVICE_IP}:${NODE_PORT}"#服务地址对应的targetPort为27017showPorts: "[27017]"
spec:ports:- port: 27017targetPort: 27017#用户创建站点时自定义的外部端口:${custom_node_port_mongo}nodePort: ${custom_node_port_mongo}selector:app: mongo-servertype: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mongo-servername: mongo-serverannotations:#不支持伸缩scale: unscalable#站点描述信息description: Mongo数据库#站点账户信息#accountInfo: ""#拓扑图信息topoProperty: "{'name':'mongo-server','isPivot':'false','index':1}"
spec:replicas: 1selector:matchLabels:app: mongo-servertemplate:metadata:labels:app: mongo-serverspec:#镜像拉取Secret,镜像拉取Secret:${IMAGE_PULL_SECRET}imagePullSecrets:- name: "${IMAGE_PULL_SECRET}"containers:- env:#镜像仓库地址:${REGISTRY_URL}# 使用的本地私有docker镜像仓库, image: ${REGISTRY_URL}/mongo:x.x.x# 使用的公网docker镜像仓库, image: mongo:x.x.ximage: mongo:5.0.9name: mongo-server#镜像拉取策略:${IMAGE_PULL_POLICY}imagePullPolicy: ${IMAGE_PULL_POLICY}resources:limits:#创建站点时自定义cpu资源限制:${GIS_APP_LIMIT_CPU}cpu: ${GIS_APP_LIMIT_CPU}requests:cpu: 500mvolumeMounts:- mountPath: /data/dbname: mongo-volumerestartPolicy: Alwaysvolumes:- name: mongo-volumepersistentVolumeClaim:claimName: pvc-nfs-mongo-data-${appsetId}

3:创建站点模板
  在站点模板页面,管理员可通过上传文件的方式添加第三方站点,并将站点分配到相应的站点组中。还可以对已添加的站点进行重命名与删除。
请按以下步骤添加站点:
1.登录iManager,点击左侧导航栏站点定制->站点模板。
2. 在站点模板页面点击添加模板,输入站点名称,并上传yaml文件。(站点名称中不能含有百分号“%”)
3. 选择组名,如下图所示。
在这里插入图片描述
4.点击确认,完成站点添加。
5.绑定NFS。点击左侧导航栏存储管理->NFS->绑定,选择您创建的站点组进行绑定。

4:创建站点
1.与创建iManager已有站点操作一致,设置站点名称,选择站点类型后即可完成对站点的创建。
在这里插入图片描述
2.新建MongoDB站点在kubernetes dashboard中的对应命名空间的工作负载详情:
在这里插入图片描述
3.站点添加成功后,可在站点模板页面对已有站点进行删除或更改站点名称。定制站点与其他GIS站点一样,可在站点管理中进行创建、监控与管理。
在这里插入图片描述

5:测试站点可用性-为地图服务添加MongoDB类型缓存
1.打开一个服务实例详情,启用地图瓦片缓存,选择缓存类型为MongoDB并设置必要参数,保存进行地图浏览;
在这里插入图片描述
在这里插入图片描述
2.使用数据库管理工具打开MongoDB数据库,可以查看到对应的缓存数据库,MongoDB站点功能正常。
在这里插入图片描述

附录

YAML中的属性配置

Service支持的annotation属性:

名称描述
addressReg服务地址格式,默认展示为http://${SERVICE_IP}: ${NODE_PORT}格式
showPorts服务暴露多个端口时,服务地址对应的targetPort

Service支持的labels属性:

名称描述
entrance服务地址是否作为访问入口,默认为false,配置为true时该服务地址作为应用访问入口
entrance-port服务暴露多个端口时,访问入口地址对应targetPort,仅在entrance为true时生效

示例:

apiVersion: v1
kind: Service
metadata:name: mysqllabels:entrance: "true"entrance-port: "3306"annotations:addressReg: "jdbc:mysql://mysql:3306"showPorts: "[3306]"
spec:ports:- port: 3306selector:app: mysqltype: NodePort

Deployment和StatefulSet支持的annotation属性:

名称描述
scale是否支持伸缩,默认为支持,配置为unscalable时不展示伸缩按钮
console是否支持命令行,默认为支持,配置为noconsole时不展示命令行按钮
description服务列表中的描述信息
accountInfo账户信息,支持html格式
topoProperty{name: 该服务Deployment/StatefulSet名称;isPivot: 是否作为中心点;index: 排序编号,“1”为正北方向,按顺时针递增(不填时默认名称的字典序顺时针排列);parents: [{name: 该服务箭头所指服务的Deployment/StatefulSet名称;description: 两服务的关系描述}]}

示例:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mysqlname: mysqlannotations:scale: unscalableconsole: noconsoledescription: MySQL数据库accountInfo: "<p>用户/密码:</p><p> root/supermap</p>"topoProperty: "{'name':'mysql','isPivot':'false','index':1,'parents':[{'name':'phpmyadmin','description':'数据库管理UI'}]}"
spec:selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- env:- name: MYSQL_ROOT_PASSWORDvalue: supermapimage: registry.ispeco.com/supermap/mysql:5.7.12name: mysqlimagePullPolicy: AlwaysrestartPolicy: Always

PersistentVolumeClaim中的属性:

名称描述
storageClassNamestorageClass名称,固定为appset-storage-class-${GROUP_TYPE}

示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:type: mysql
name: pvc-nfs-mysql-data-${appsetId}
spec:
storageClassName: appset-storage-class-${GROUP_TYPE}
accessModes:- ReadWriteMany
resources:requests:storage: 1Gi

占位符列表

在YAML文件中使用以下占位符,在应用创建过程中会被真实值替换:

名称描述
${appsetId}应用的id
示例:PersistentVolumeClaim名称
name: pvc-nfs-mysql-data-${appsetId}
${SERVICE_IP}服务地址ip
示例:为Service添加annotation:
addressReg: “jdbc:mysql://${SERVICE_IP}:8080”
${SERVICE_NAME}服务名称
示例:为Service添加annotation:
addressReg: “jdbc:mysql://${SERVICE_NAME}:8080”
${NODE_PORT}服务的nodePort
示例:为Service添加annotation:
addressReg: “jdbc:mysql://127.0.0.1:${NODE_PORT}”
${TARGET_PORT}服务的targetPort
示例:为Service添加annotation:
addressReg: “jdbc:mysql://127.0.0.1:${TARGET_PORT}”
${IMAGE_PULL_POLICY}镜像拉取策略
示例:imagePullPolicy: ${IMAGE_PULL_POLICY}
${IMAGE_PULL_SECRET}镜像拉取Secret
示例:imagePullSecrets:
- name: ”${IMAGE_PULL_SECRET}”
${REGISTRY_URL}镜像仓库地址
示例:image: ${REGISTRY_URL}supermap/mysql:5.7.12
${GIS_APP_LIMIT_CPU}CPU限制
示例:cpu: ${GIS_APP_LIMIT_CPU}
${GROUP_TYPE}应用所属分组类型
示例:storageClassName: appset-storage-class-${GROUP_TYPE}
${NAMESPACE}应用所属命名空间
示例:namespace: ${NAMESPACE}
${custom_node_port_*}用户自定义的外部端口,配在Service的nodePort参数中,在创建该站点时,可在界面上自定义该外部端口。占位符中的*号根据端口不同需替换成不同的名称。
示例:nodePort: ${custom_node_port_mysql}
注意:在YAML文件中配置命名空间时,勿写入固定值,请使用上表中的占位符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22723.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载

2023年最新水果编曲软件FLStudio21.0.3.3517中文直装完整至尊解版下载 是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。 最新fl studio 21有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助…

HTML5和CSS3新特性

文章目录 1.HTML5新特性1.1 概述1.2 语义化标签1.3 多媒体标签1.3.1 视频标签- video1.3.2 音频标签- audio 1.4 新增的表单元素1.5 新增表单属性 2.CSS3新特性2.1新增选择器2.1.1 属性选择器2.1.2 结构伪类选择器E:first-childE:nth-child(n)E:nth-child 与 E:nth-of-type 的区…

WebSocket协议基础

文章目录 什么是websocketwebsocet 特点 一、websocket 建立连接流程二、websocket 握手流程客户端握手包2.服务端握手包 三、websocket数据总结参考 什么是websocket WebSOcket 是基于TCP的应用层协议。该协议和http或https 相似&#xff0c;但是却区别于http的一种新的协议。…

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

一些抄袭CSDN的爬虫网站(长期收集更新)

目录 一、CodeAntenna1. 简介2. 网址 二、待更新。。。 本文由CSDN点云侠原创&#xff0c;爬虫网站请努力加油爬。 一、CodeAntenna 1. 简介 互联网耻辱柱排行榜Top 1。本人博客里任何一点免费可读的部分都被该网站爬得体无完肤。 2. 网址 https://codeantenna.com/a/B4cMB…

数据可视化:揭开数据的视觉奇迹

随着大数据时代的到来&#xff0c;我们面临着海量的数据&#xff0c;如何从中获取有价值的信息成为一项重要的挑战。数据可视化作为一种强大的工具&#xff0c;通过图表、图形和交互界面&#xff0c;将数据转化为可视化的形式&#xff0c;帮助我们更好地理解和分析数据。 数据可…

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段&#xff08;100-280 nm&#xff09;的深紫外FP&#xff08;Fabry-Pero&#xff0c;法布里和珀罗是两位法国的科学家&#xff09;激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

数据分析——AB测试应用与实战

摘要 某电商公司非常注重自己的落地页设计&#xff0c;希望通过改进设计来提高转化率。以往该公司全年转化率平均在13%左右&#xff0c;现在希望设计的新页面能够带来更高的转化率&#xff0c;希望新页面的转化率能有2%的提升&#xff0c;达到15%。在正式推出新页面之前&#…

Non-Local Video Denoising by CNN

摘要 Non-local patch based methods were until recently state-of-the-art for image denoising but are now outper formed by CNNs. Y et they are still the state-of-the-art for video denoising, as video redundancy is a key factor to attain high denoising perfor…

【分布式任务调度】XXL-JOB的任务调度实现原理(四)

文章目录 1.前言2.调度中心流程2.1.任务配置扫描流程2.2.计算任务触发时机2.2.1.已超时5秒以上2.2.2.超时未超过5秒2.2.3.还未到触发时间 2.3.任务触发流程2.3.1.任务触发线程池2.3.2.参数处理2.3.3.任务触发2.3.4.分片广播策略&#xff08;补充&#xff09; 3.执行器流程3.1.任…

Python - Gradio用Blocks构建自定义界面布局的应用程序

什么是Blocks Blocks是Gradio的低级API&#xff0c;它允许你创建比Interfaces更多的自定义web应用程序和演示。简单来说就是比Interfaces更灵活。 一般使用上下文管理&#xff0c;示例代码如下&#xff1a; import gradio as grwith gr.Blocks() as demo:gr.Image("lion…

事务@transactional执行产生重复数据

背景 系统设计之初&#xff0c;每次来新请求&#xff0c;业务层会先查询数据库&#xff0c;判断是否存在相同的id数据&#xff08;id是唯一标识产品的&#xff09;&#xff0c;有则返回当前数据库查到的数据&#xff0c;根据数据决定下一步动作&#xff0c;没有则认为是初次请…