K8S サイトのカスタマイズ用 iManager (MongoDB を例にします)

著者: ls

バックグラウンド

  SuperMap iManager は、ユーザーがカスタマイズしたサイトのワンクリック作成をサポートしており、サイト環境として追加のサイト テンプレートを作成し、サイトを通じてアプリケーションを使用できます。
  カスタマイズされたサイトは他のサイトと同じです。監視に関しては、トポロジ マップを使用してサービス間の関係とノード形状を理解し、サイト アカウントを表示し、サービス メトリックと追跡レコードを表示し、サービスを追加し、サイト リソース制限を設定し、サイトを再展開し、サイトを削除し、キーワードを使用してサービスを検索することができます。ワンクリックでサービスの再デプロイ、サービス仕様の調整、サービスの有効化/無効化、サービスで使用されるミラーの変更、一部のサービスポートの有効化/無効化、サービス配置の編集、サービスノードの手動/動的なスケール変更、単一点障害の解決を行うことができます。各サービスの動作ログを参照したり、コマンドラインからシェルコマンドを入力してサービスノードを操作したりすることをサポートします。
  この記事では、MongoDB データベースを例として、サイトの作成、使用、監視、管理の機能を完了します。

準備

K8S 用 iManager、MongoDB Docker イメージ、MongoDB サイト レイアウト ファイル

効果を達成する

  MongoDB サイトが iManager に正常に展開されると、仕様の調整、再展開、変更、ホストの指定、コンテンツの編集、その他の管理操作を含む迅速な管理と監視が可能になります。また、CPU 使用率、メモリ使用率、ネットワーク受信速度、ネットワーク送信速度、ハードディスク使用率などの監視機能も実行できます。
ここに画像の説明を挿入

実装プロセス

【カスタマイズされたドキュメントの作成】


  1: Dockerで必要なアプリケーションをコンテナ化するためのミラーを作成する 独自のアプリケーションをDockerイメージとして作成するにはDockerfileの形式を使用することを推奨します イメージの作成方法についてはDockerの公式ドキュメントを参照してください: https://docs.docker.com/engine/reference/builder/

2: YAML ファイルの書き込み
  iManager でサポートされるインスタンス タイプには、Service、Deployment、Statefulset、Job、PersistentVolumeClaim、ServiceAccount、ConfigMap などの YAML ファイルを記述することでアプリケーションを作成できます。YAML 記述ルールは、https: //kubernetes.io/docs/concepts/
を参照できます   。 さらに、Service、Deployment、および StatefulSet のラベルとアノテーション プロパティを構成することで、アプリケーションのインターフェイス表示を制御できます。構成をサポートするパラメータについては、この記事の付録を参照してください。

ヒント: 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:
      - 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: サイト テンプレートを作成する サイト
  テンプレート ページで、管理者はファイルをアップロードしてサードパーティ サイトを追加し、そのサイトを対応するサイト グループに割り当てることができます。追加したサイトの名前変更や削除も可能です。
サイトを追加するには、以下の手順に従ってください。
1. iManager にログインし、左側のナビゲーション バーで [サイトのカスタマイズ] -> [サイト テンプレート] をクリックします。
2. サイト テンプレート ページで、[テンプレートの追加] をクリックし、サイト名を入力して、yaml ファイルをアップロードします。(サイト名にパーセント記号「%」を含めることはできません)
3. 次の図に示すように、グループ名を選択します。
ここに画像の説明を挿入
4. [OK] をクリックしてサイトの追加を完了します。
5. NFSをバインドします。左側のナビゲーション バーで [ストレージ管理] -> [NFS] -> [バインド] をクリックし、バインドするために作成したサイト グループを選択します。

4: サイトの作成
1. 操作はiManagerの既存サイト作成と同様で、サイト名を設定し、サイトタイプを選択すればサイトの作成は完了です。
ここに画像の説明を挿入
2. kubernetes ダッシュボードの新しい MongoDB サイトの対応する名前空間のワークロードの詳細:
ここに画像の説明を挿入
3. サイトが正常に追加された後、サイト テンプレート ページで既存のサイトを削除するか、サイト名を変更できます。カスタム サイトは、他の GIS サイトと同様に、「サイト管理」で作成、監視、管理できます。
ここに画像の説明を挿入

5: サイトの可用性のテスト- マップ サービスの MongoDB タイプ キャッシュの追加
1. サービス インスタンスの詳細を開き、マップ タイル キャッシュを有効にし、キャッシュ タイプとして MongoDB を選択し、必要なパラメーターを設定し、マップを保存して参照します; 2. データベース管理ツールを使用して MongoDB データベースを開き、対応するキャッシュ データベースを表示でき、MongoDB サイトは正常に機能しています
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

付録

YAML でのプロパティ設定

サービスでサポートされるアノテーション属性:

名前 説明
住所登録 サービス アドレスの形式。デフォルトの形式は http://${SERVICE_IP}: ${NODE_PORT} です。
showポート サービスが複数のポートを公開する場合、サービス アドレスに対応する targetPort

サービスでサポートされているラベル属性:

名前 説明
入り口 サービス アドレスをアクセス エントリとして使用するかどうか。デフォルトは false です。true に設定すると、サービス アドレスがアプリケーション アクセス エントリとして使用されます。
入口ポート サービスが複数のポートを公開する場合、アクセス エントリ アドレスは targetPort に対応し、エントリが true の場合にのみ有効になります。

例:

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

Deployment および StatefulSet でサポートされるアノテーション属性:

名前 説明
規模 スケーリングをサポートするかどうか。デフォルトはサポートです。スケーリング不可として設定されている場合、スケーリング ボタンは表示されません。
コンソール コマンド ラインをサポートするかどうか。デフォルトはサポートです。noconsole として構成されている場合、コマンド ライン ボタンは表示されません。
説明 サービス一覧の説明情報
アカウント情報 アカウント情報、HTML形式対応
トポプロパティ { name : サービスの Deployment/StatefulSet の名前; isPivot : 中心点かどうか; Index : 並べ替え番号、「1」は真北の方向で、時計回りに増加します (名前のデフォルトの辞書順序は、入力されていない場合は時計回りです);parents : [{name: サービスの矢印が指す Deployment/StatefulSet の名前; description: 2 つのサービス間の関係の説明} ] }

例:

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

PersistentVolumeClaim のプロパティ:

名前 説明
ストレージクラス名 storageClass 名、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 ファイルで次のプレースホルダーを使用します。これは、アプリケーションの作成時に実際の値に置き換えられます。

名前 説明
${アプリセットID} アプリケーション ID の
例: Persistent VolumeClaim 名
name: pvc-nfs-mysql-data-${appsetId}
${SERVICE_IP} サービスアドレス ipの例
: Service のアノテーションを追加:
addressReg: “jdbc:mysql://${SERVICE_IP}:8080”
${SERVICE_NAME} サービス名の
例: Service のアノテーションを追加:
addressReg: “jdbc:mysql://${SERVICE_NAME}:8080”
${NODE_PORT} サービスのnodePortの例
: Serviceのアノテーションを追加:
addressReg: “jdbc:mysql://127.0.0.1:${NODE_PORT}”
${TARGET_PORT} サービスの targetPortの例
: Service のアノテーションを追加:
addressReg: "jdbc:mysql://127.0.0.1:${TARGET_PORT}"
${IMAGE_PULL_POLICY} イメージプルポリシーの例
: imagePullPolicy: ${IMAGE_PULL_POLICY}
${IMAGE_PULL_SECRET} ImagePullSecrets の
例: imagePullSecrets:
- 名前: "${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}
${custom_node_port_*} ユーザー定義の外部ポートはサービスのnodePortパラメータで設定されており、サイト作成時にインターフェース上で外部ポートをカスタマイズできます。プレースホルダー内の * は、ポートごとに異なる名前に置き換える必要があります。
例: ノードポート: ${custom_node_port_mysql}
注意:在YAML文件中配置命名空间时,勿写入固定值,请使用上表中的占位符。

おすすめ

転載: blog.csdn.net/supermapsupport/article/details/131697768