From 91692a8e6cbe2c35eb2fbfcb3cc511c2eb1d9014 Mon Sep 17 00:00:00 2001 From: zhangxinhui02 Date: Wed, 20 Aug 2025 02:32:03 +0800 Subject: [PATCH] =?UTF-8?q?core=E6=9C=8D=E5=8A=A1=E7=9A=84DNS=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=98=AF=E5=8A=A8=E6=80=81=E7=9A=84=EF=BC=8C=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=9C=A8adapter=E6=9C=8D=E5=8A=A1=E7=9A=84=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD=E6=8F=90=E5=89=8D=E7=A1=AE?= =?UTF-8?q?=E5=AE=9A=EF=BC=8C=E5=9B=A0=E6=AD=A4=E5=9C=A8=E9=83=A8=E7=BD=B2?= =?UTF-8?q?helm=20chart=E6=97=B6=E5=8A=A8=E6=80=81=E7=94=9F=E6=88=90adapte?= =?UTF-8?q?r=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helm-chart/files/adapter-cm-generator.py | 41 +++++++++++++++ helm-chart/files/adapter-pip-installer.sh | 5 ++ helm-chart/templates/adapter-configmap.yaml | 8 --- .../templates/core-scripts-configmap.yaml | 8 --- helm-chart/templates/core-statefulset.yaml | 2 +- .../templates/pre-adapter-cm-gen-job.yaml | 50 +++++++++++++++++++ .../templates/pre-adapter-cm-gen-rbac.yaml | 39 +++++++++++++++ helm-chart/templates/scripts-configmap.yaml | 15 ++++++ helm-chart/values.yaml | 6 --- 9 files changed, 151 insertions(+), 23 deletions(-) create mode 100644 helm-chart/files/adapter-cm-generator.py create mode 100644 helm-chart/files/adapter-pip-installer.sh delete mode 100644 helm-chart/templates/adapter-configmap.yaml delete mode 100644 helm-chart/templates/core-scripts-configmap.yaml create mode 100644 helm-chart/templates/pre-adapter-cm-gen-job.yaml create mode 100644 helm-chart/templates/pre-adapter-cm-gen-rbac.yaml create mode 100644 helm-chart/templates/scripts-configmap.yaml diff --git a/helm-chart/files/adapter-cm-generator.py b/helm-chart/files/adapter-cm-generator.py new file mode 100644 index 00000000..8a3637b0 --- /dev/null +++ b/helm-chart/files/adapter-cm-generator.py @@ -0,0 +1,41 @@ +#!/bin/python3 +# 这个脚本的作用是在部署helm chart时动态生成adapter的配置文件,保存在configmap中 +# 需要动态生成的原因是core服务的DNS名称是动态的,无法在adapter服务的配置文件中提前确定 +# 一些与k8s现有资源冲突的配置也会在这里重置 + +import os +import toml +import base64 +from kubernetes import client, config + +config.load_incluster_config() +v1 = client.CoreV1Api() + +# 读取部署的关键信息 +namespace = os.getenv("NAMESPACE") +release_name = os.getenv("RELEASE_NAME") +data_b64 = os.getenv("DATA_B64") + +# 解析并覆盖关键配置 +# 这里被覆盖的配置应当在helm chart中针对对应的k8s资源来灵活修改 +data = toml.loads(base64.b64decode(data_b64).decode("utf-8")) +data['napcat_server']['host'] = '0.0.0.0' +data['napcat_server']['port'] = 8095 +data['maibot_server']['host'] = f'{release_name}-maibot-core' # 根据release名称动态拼接core服务的DNS名称 +data['maibot_server']['port'] = 8000 + +# 创建/修改configmap +cm_name = f'{release_name}-maibot-adapter' +cm = client.V1ConfigMap( + metadata=client.V1ObjectMeta(name=cm_name), + data={'config.toml': toml.dumps(data)} +) +try: + v1.create_namespaced_config_map(namespace, cm) + print(f"ConfigMap `{cm_name}` created successfully") +except client.exceptions.ApiException as e: + if e.status == 409: # 已存在,更新 + v1.replace_namespaced_config_map(cm_name, namespace, cm) + print(f"ConfigMap `{cm_name}` replaced successfully") + else: + raise diff --git a/helm-chart/files/adapter-pip-installer.sh b/helm-chart/files/adapter-pip-installer.sh new file mode 100644 index 00000000..47564820 --- /dev/null +++ b/helm-chart/files/adapter-pip-installer.sh @@ -0,0 +1,5 @@ +#!/bin/sh +# 这个脚本的作用是安装必要的python包,为adapter-cm-generator.py脚本做准备 + +pip3 install -i https://mirrors.ustc.edu.cn/pypi/simple kubernetes toml +python3 adapter-cm-generator.py diff --git a/helm-chart/templates/adapter-configmap.yaml b/helm-chart/templates/adapter-configmap.yaml deleted file mode 100644 index ebc9e568..00000000 --- a/helm-chart/templates/adapter-configmap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Release.Name }}-maibot-adapter - namespace: {{ .Release.Namespace }} -data: - config.toml: | - {{ .Values.config.adapter_config | nindent 4 }} diff --git a/helm-chart/templates/core-scripts-configmap.yaml b/helm-chart/templates/core-scripts-configmap.yaml deleted file mode 100644 index 79c05d96..00000000 --- a/helm-chart/templates/core-scripts-configmap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Release.Name }}-maibot-core-scripts - namespace: {{ .Release.Namespace }} -data: - volume-linker.sh: | - {{ .Files.Get "files/volume-linker.sh" | nindent 4 }} diff --git a/helm-chart/templates/core-statefulset.yaml b/helm-chart/templates/core-statefulset.yaml index d6717a5b..42668d7b 100644 --- a/helm-chart/templates/core-statefulset.yaml +++ b/helm-chart/templates/core-statefulset.yaml @@ -70,7 +70,7 @@ spec: items: - key: volume-linker.sh path: volume-linker.sh - name: {{ .Release.Name }}-maibot-core-scripts + name: {{ .Release.Name }}-maibot-scripts name: scripts - configMap: items: diff --git a/helm-chart/templates/pre-adapter-cm-gen-job.yaml b/helm-chart/templates/pre-adapter-cm-gen-job.yaml new file mode 100644 index 00000000..a062735d --- /dev/null +++ b/helm-chart/templates/pre-adapter-cm-gen-job.yaml @@ -0,0 +1,50 @@ +# 动态生成adapter配置文件的configmap的job,仅会在部署时运行一次 +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ .Release.Name }}-adapter-cm-generator + namespace: {{ .Release.Namespace }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +spec: + backoffLimit: 0 + template: + spec: + serviceAccountName: {{ .Release.Name }}-adapter-cm-generator + restartPolicy: Never + containers: + - name: python + image: python:slim + workingDir: /app + command: + - sh + args: + - adapter-pip-installer.sh + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: RELEASE_NAME + value: {{ .Release.Name }} + - name: DATA_B64 + value: {{ .Values.config.adapter_config | b64enc }} # 将配置文件编码为base64,从环境变量注入 + volumeMounts: + - mountPath: /app/adapter-pip-installer.sh + name: scripts + readOnly: true + subPath: adapter-pip-installer.sh + - mountPath: /app/adapter-cm-generator.py + name: scripts + readOnly: true + subPath: adapter-cm-generator.py + volumes: + - name: scripts + configMap: + name: {{ .Release.Name }}-maibot-scripts + items: + - key: adapter-pip-installer.sh + path: adapter-pip-installer.sh + - key: adapter-cm-generator.py + path: adapter-cm-generator.py diff --git a/helm-chart/templates/pre-adapter-cm-gen-rbac.yaml b/helm-chart/templates/pre-adapter-cm-gen-rbac.yaml new file mode 100644 index 00000000..786f2de9 --- /dev/null +++ b/helm-chart/templates/pre-adapter-cm-gen-rbac.yaml @@ -0,0 +1,39 @@ +# 动态生成adapter配置文件的configmap所需要的rbac授权 +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ .Release.Name }}-adapter-cm-generator + namespace: {{ .Release.Namespace }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ .Release.Name }}-adapter-cm-gen-role + namespace: {{ .Release.Namespace }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list", "create", "update", "patch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Release.Name }}-adapter-cm-gen-role-binding + namespace: {{ .Release.Namespace }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded +subjects: + - kind: ServiceAccount + name: {{ .Release.Name }}-adapter-cm-generator + namespace: {{ .Release.Namespace }} +roleRef: + kind: Role + name: {{ .Release.Name }}-adapter-cm-gen-role + apiGroup: rbac.authorization.k8s.io diff --git a/helm-chart/templates/scripts-configmap.yaml b/helm-chart/templates/scripts-configmap.yaml new file mode 100644 index 00000000..6eb0c4db --- /dev/null +++ b/helm-chart/templates/scripts-configmap.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-maibot-scripts + namespace: {{ .Release.Namespace }} +data: + # pre-install hook + adapter-pip-installer.sh: | + {{ .Files.Get "files/adapter-pip-installer.sh" | nindent 4 }} + adapter-cm-generator.py: | + {{ .Files.Get "files/adapter-cm-generator.py" | nindent 4 }} + + # core + volume-linker.sh: | + {{ .Files.Get "files/volume-linker.sh" | nindent 4 }} diff --git a/helm-chart/values.yaml b/helm-chart/values.yaml index a160af63..b9ac3277 100644 --- a/helm-chart/values.yaml +++ b/helm-chart/values.yaml @@ -221,14 +221,8 @@ config: nickname = "" [napcat_server] # Napcat连接的ws服务设置 - host = "0.0.0.0" # Napcat设定的主机地址 - port = 8095 # Napcat设定的端口 heartbeat_interval = 30 # 与Napcat设置的心跳相同(按秒计) - [maibot_server] # 连接麦麦的ws服务设置 - host = "localhost" # 麦麦在.env文件中设置的主机地址,即HOST字段 - port = 8000 # 麦麦在.env文件中设置的端口,即PORT字段 - [chat] # 黑白名单功能 group_list_type = "whitelist" # 群组名单类型,可选为:whitelist, blacklist group_list = [] # 群组名单