著者: 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文件中配置命名空间时,勿写入固定值,请使用上表中的占位符。