Personalización del sitio iManager para K8S (tomando MongoDB como ejemplo)

Autor: ls

fondo

  SuperMap iManager admite la creación con un solo clic de sitios personalizados por el usuario y puede crear la plantilla de sitio agregada como un entorno de sitio y usar la aplicación a través del sitio.
  El sitio personalizado es igual que otros sitios. En términos de supervisión, puede usar el mapa de topología para comprender la relación y la forma de los nodos entre los servicios, ver cuentas de sitios, ver métricas de servicios y registros de seguimiento, agregar servicios, establecer límites de recursos del sitio, volver a implementar sitios, eliminar sitios y usar palabras clave para buscar servicios. Puede volver a implementar los servicios con un solo clic, ajustar las especificaciones del servicio, habilitar o deshabilitar los servicios, modificar los espejos utilizados por los servicios, habilitar o deshabilitar algunos puertos de servicio, editar arreglos de servicios, escalar nodos de servicio de forma manual o dinámica y resolver fallas de un solo punto. Puede ver el registro de operaciones de cada servicio y admitir la entrada de comandos de shell en la línea de comandos para operar los nodos de servicio.
  Este artículo tomará como ejemplo la base de datos MongoDB para completar las funciones de creación, uso, monitoreo y administración del sitio.

Preparación

iManager para K8S, imagen acoplable de MongoDB, archivo de diseño del sitio de MongoDB

lograr efecto

  Una vez que el sitio de MongoDB se implementa con éxito en iManager, se puede administrar y monitorear rápidamente, lo que incluye: ajustar especificaciones, volver a implementar, modificar, especificar hosts, editar contenido y otras operaciones de administración, así como monitorear funciones como el uso de la CPU, el uso de la memoria, la tasa de recepción de la red, la tasa de transmisión de la red y el uso del disco duro.
inserte la descripción de la imagen aquí

Proceso de implementación

【Crear documentos personalizados】

1: Cree un espejo
  para contener la aplicación requerida en Docker. Se recomienda usar el formulario de Dockerfile para crear su propia aplicación como una imagen de Docker. Para conocer el método de creación de imágenes, consulte el documento oficial de Docker: https://docs.docker.com/engine/reference/builder/

2: Escribir archivos YAML
  Puede crear aplicaciones escribiendo archivos YAML.Los tipos de instancia compatibles con iManager incluyen Servicio, Implementación, Statefulset, Trabajo, PersistentVolumeClaim, ServiceAccount y ConfigMap.
Las reglas de escritura de YAML pueden hacer referencia a: https://kubernetes.io/docs/concepts/
  Además, puede controlar la visualización de la interfaz de la aplicación configurando las etiquetas y las propiedades de anotación de Servicio, Implementación y StatefulSet. Para conocer los parámetros que admiten la configuración, consulte el apéndice de este artículo.

Sugerencia: utilice la codificación utf-8 al escribir archivos YAML; de lo contrario, aparecerán caracteres chinos ilegibles.

Los detalles del archivo MongoDB YAML del ejemplo en este artículo:

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:
      - ReadWriteMany
   resources:
      requests:
         storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
    labels:
       type: mongo
    name: mongo-server
    annotations:
       #服务地址,服务的nodePort:${NODE_PORT}
       addressReg: "mongodb://${SERVICE_IP}:${NODE_PORT}"
       #服务地址对应的targetPort为27017
       showPorts: "[27017]"
spec:
   ports:
   - port: 27017
     targetPort: 27017
     #用户创建站点时自定义的外部端口:${custom_node_port_mongo}
     nodePort: ${
    
    custom_node_port_mongo}
   selector:
      app: mongo-server
   type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
   labels:
      app: mongo-server
   name: mongo-server
   annotations:
      #不支持伸缩
      scale: unscalable
      #站点描述信息
      description: Mongo数据库
      #站点账户信息
      #accountInfo: ""
      #拓扑图信息
      topoProperty: "{'name':'mongo-server','isPivot':'false','index':1}"
spec:
   replicas: 1
   selector:
      matchLabels:
          app: mongo-server
   template:
      metadata:
          labels:
            app: mongo-server
      spec:
         #镜像拉取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.x
            image: mongo:5.0.9
            name: mongo-server
            #镜像拉取策略:${IMAGE_PULL_POLICY}
            imagePullPolicy: ${
    
    IMAGE_PULL_POLICY}
            resources:
                limits:
                   #创建站点时自定义cpu资源限制:${GIS_APP_LIMIT_CPU}
                   cpu: ${
    
    GIS_APP_LIMIT_CPU}
                requests:
                   cpu: 500m
            volumeMounts:
              - mountPath: /data/db
                name: mongo-volume
         restartPolicy: Always
         volumes:
            - name: mongo-volume
              persistentVolumeClaim:
                 claimName: pvc-nfs-mongo-data-${
    
    appsetId}

3: Crear una plantilla de sitio
  En la página de plantilla de sitio, los administradores pueden agregar sitios de terceros cargando archivos y asignar los sitios a los grupos de sitios correspondientes. También puede cambiar el nombre y eliminar los sitios agregados.
Siga los pasos a continuación para agregar un sitio:
1. Inicie sesión en iManager, haga clic en Personalización del sitio->Plantilla del sitio en la barra de navegación izquierda.
2. En la página de la plantilla del sitio, haga clic en Agregar plantilla, ingrese el nombre del sitio y cargue el archivo yaml. (El nombre del sitio no puede contener el signo de porcentaje "%")
3. Seleccione el nombre del grupo, como se muestra en la siguiente figura.
inserte la descripción de la imagen aquí
4. Haga clic en Aceptar para completar la adición del sitio.
5. Enlace NFS. Haga clic en Administración de almacenamiento->NFS->Enlazar en la barra de navegación izquierda y seleccione el grupo de sitios que creó para enlazar.

4: Crear un sitio
1. La operación es la misma que la creación de un sitio existente de iManager.Después de configurar el nombre del sitio y seleccionar el tipo de sitio, se puede completar la creación del sitio.
inserte la descripción de la imagen aquí
2. Los detalles de la carga de trabajo del espacio de nombres correspondiente del nuevo sitio de MongoDB en el panel de Kubernetes:
inserte la descripción de la imagen aquí
3. Una vez que el sitio se agrega correctamente, puede eliminar el sitio existente o cambiar el nombre del sitio en la página de plantilla del sitio. Los sitios personalizados, al igual que otros sitios GIS, se pueden crear, monitorear y administrar en Administración del sitio .
inserte la descripción de la imagen aquí

5: Disponibilidad del sitio de prueba : agregar caché de tipo MongoDB para el servicio de mapas
1. Abra los detalles de una instancia de servicio, habilite el caché de teselas del mapa, seleccione el tipo de caché como MongoDB y configure los parámetros necesarios, guarde y explore el mapa 2. Use la herramienta de administración de base de datos para abrir la base de datos MongoDB, puede ver la base de datos de caché correspondiente y el sitio MongoDB funciona normalmente
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
.
inserte la descripción de la imagen aquí

apéndice

Configuración de propiedades en YAML

Los atributos de anotación admitidos por el servicio:

nombre describir
direcciónReg Formato de dirección de servicio, el formato predeterminado es http://${SERVICE_IP}: ${NODE_PORT}
mostrarPuertos Cuando el servicio expone varios puertos, el targetPort correspondiente a la dirección del servicio

El atributo de etiquetas admitido por el servicio:

nombre describir
entrada Si la dirección del servicio se usa como entrada de acceso, el valor predeterminado es falso, cuando se configura como verdadero, la dirección del servicio se usa como entrada de acceso a la aplicación
puerto de entrada Cuando el servicio expone varios puertos, la dirección de la entrada de acceso corresponde al puerto de destino, que solo tiene efecto cuando la entrada es verdadera.

Ejemplo:

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

Atributos de anotación compatibles con Deployment y StatefulSet:

nombre describir
escala Si se admite el escalado, el valor predeterminado es admitir, y el botón de escalado no se mostrará cuando esté configurado como no escalable
consola Ya sea para admitir la línea de comandos, el valor predeterminado es admitir, y el botón de la línea de comandos no se mostrará cuando esté configurado como noconsole
descripción Información de descripción en la lista de servicios
informacion de cuenta Información de la cuenta, admite formato html
topoPropiedad { nombre : el nombre del Deployment/StatefulSet del servicio; isPivot : si es el punto central; index : número de ordenación, "1" es la dirección del norte verdadero, aumentando en el sentido de las agujas del reloj (el orden predeterminado del diccionario del nombre es en el sentido de las agujas del reloj cuando no se llena); padres : [{name: el nombre del Deployment/StatefulSet señalado por la flecha del servicio; descripción: la descripción de la relación entre los dos servicios} ] }

Ejemplo:

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
  app: mysql
 name: mysql
 annotations:
  scale: unscalable
  console: noconsole
  description: MySQL数据库
  accountInfo: "<p>用户/密码:</p><p> root/supermap</p>"
  topoProperty: "{'name':'mysql','isPivot':'false','index':1,'parents':[{'name':'phpmyadmin','description':'数据库管理UI'}]}"
spec:
 selector:
  matchLabels:
      app: mysql
 template:
  metadata:
      labels:
        app: mysql
  spec:
      containers:
      - env:
        - name: MYSQL_ROOT_PASSWORD
          value: supermap
        image: registry.ispeco.com/supermap/mysql:5.7.12
        name: mysql
        imagePullPolicy: Always
      restartPolicy: Always

Propiedades en PersistentVolumeClaim:

nombre describir
nombreClaseAlmacenamiento nombre de storageClass, fijo como appset-storage-class-${GROUP_TYPE}

Ejemplo:

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

lista de marcadores de posición

Utilice los siguientes marcadores de posición en el archivo YAML, que serán reemplazados por valores reales durante la creación de la aplicación:

nombre describir
${aplicaciónId} Ejemplo de id. de aplicación
: PersistentVolumeClaim nombre
nombre: pvc-nfs-mysql-data-${appsetId}
${SERVICE_IP} Ejemplo de IP de dirección de servicio
: agregar anotación para Servicio:
addressReg: “jdbc:mysql://${SERVICE_IP}:8080”
${SERVICIO_NOMBRE} Ejemplo de nombre de servicio
: agregar anotación para Servicio:
addressReg: “jdbc:mysql://${SERVICE_NAME}:8080”
${NODE_PORT} Ejemplo de nodePort of service
: agregar anotación para Service:
addressReg: “jdbc:mysql://127.0.0.1:${NODE_PORT}”
${TARGET_PORT} Ejemplo targetPort of service
: agregar anotación para Service:
addressReg: "jdbc:mysql://127.0.0.1:${TARGET_PORT}"
${IMAGE_PULL_POLICY} Ejemplo de política de extracción de imágenes
: imagePullPolicy: ${IMAGE_PULL_POLICY}
${IMAGE_PULL_SECRET} Ejemplo de ImagePullSecrets
: imagePullSecrets:
- nombre: "${IMAGE_PULL_SECRET}"
${REGISTRO_URL} Ejemplo de dirección de almacén espejo
: imagen: ${REGISTRY_URL}supermap/mysql:5.7.12
${GIS_APP_LIMIT_CPU} Ejemplo de límite de CPU
: cpu: ${GIS_APP_LIMIT_CPU}
${GROUP_TYPE} Ejemplo del tipo de grupo de la aplicación
: storageClassName: appset-storage-class-${GROUP_TYPE}
${ESPACIO DE NOMBRES} Ejemplo del espacio de nombres al que pertenece la aplicación
: espacio de nombres: ${NAMESPACE}
${puerto_nodo_personalizado_*} El puerto externo definido por el usuario se configura en el parámetro nodePort del Servicio. Al crear el sitio, el puerto externo se puede personalizar en la interfaz. El * en el marcador de posición debe reemplazarse con diferentes nombres según los diferentes puertos.
Ejemplo: nodePort: ${custom_node_port_mysql}
注意:在YAML文件中配置命名空间时,勿写入固定值,请使用上表中的占位符。

Supongo que te gusta

Origin blog.csdn.net/supermapsupport/article/details/131697768
Recomendado
Clasificación