From e677a24508d96c9b859def724f4e4e5720066bc1 Mon Sep 17 00:00:00 2001 From: duanmengkk Date: Thu, 16 May 2024 16:28:09 +0800 Subject: [PATCH] add propasal for virtaulcluster plugin Signed-off-by: duanmengkk --- docs/proposals/kubenetstplugin/img/image.png | Bin 0 -> 91716 bytes .../kubenetstplugin/kubenest_plugin-zh_CN.md | 220 ++++++++++++++++++ .../kubenetstplugin/kubenest_plugin.md | 219 +++++++++++++++++ 3 files changed, 439 insertions(+) create mode 100644 docs/proposals/kubenetstplugin/img/image.png create mode 100644 docs/proposals/kubenetstplugin/kubenest_plugin-zh_CN.md create mode 100644 docs/proposals/kubenetstplugin/kubenest_plugin.md diff --git a/docs/proposals/kubenetstplugin/img/image.png b/docs/proposals/kubenetstplugin/img/image.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea8cd18d8bc2ddcd84889f28a6e75b1bf5a28b1 GIT binary patch literal 91716 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 AJpcdz literal 0 HcmV?d00001 diff --git a/docs/proposals/kubenetstplugin/kubenest_plugin-zh_CN.md b/docs/proposals/kubenetstplugin/kubenest_plugin-zh_CN.md new file mode 100644 index 000000000..5f3e8bbd2 --- /dev/null +++ b/docs/proposals/kubenetstplugin/kubenest_plugin-zh_CN.md @@ -0,0 +1,220 @@ +# Summary + +目前的kubenest在创建virtualcluster的时候,需要根据不同的场景创建集群中的插件,除了k8s内置的组件外,其他像node-local-dns、apiserver-network-proxy等增强功能,我们没办法在代码中写死这些代码,需要提供插件化的方式安装这些。 + +# Motivation + +提供插件化的集群组件安装方式 + +## Goals + +使用CRD描述插件,每个插件使用单独的CR表示。在创建集群的时候,可以在virtualCluster中指定需要安装或者不需要安装的插件。当安装集群的状态为AllNodeReady的时候,开始安装virtualCluster中配置的需要安装的插件。当所有插件都完成安装后(如何判断插件安装成功,还是暂时先不判断),virtualCluster的状态变为competed。 + +## Non-Goals + +# Proposal + +提供Kube in kube 方案的插件化安装组件方式 + +## Function overview + +1. 通过virtualCluster指定要安装或不安装的插件 + +2. 定义插件的CRD,支持多种方式的插件安装 + +3. 判断插件安装成功之后将集群的状态设置为completed + +## User Stories (Optional) + +## story 1 + +# Design Details + +## 整体架构 + +![image.png](img/image.png) + +virtual-cluster-operator: 监听VirtualCluster资源,并创建控制面和Plugin-excutor-job + +webhook:根据virtualCluster 和VirtualClusterPlugin的配置动态注入Plugin-excutor-job的yaml,将pv或hostpath注入进去 + +Plugin-excutor-job:ansible-operator,内置helm,kostumize,kubectl等工具,负责安装VirtualClusterPlugin的配置的插件,并根据successCmommand的命令判断是否安装成功。如果不填就不判断。 + +Plugin: plugin是个crd,配置yaml或helm文件的存储位置及参数等 + +storage: storage是plugin文件的存储位置,包含hostpath,pv,对象存储,url等存储方式 + +## CRD设计 + +一、VirtualCluster增加插件相关字段 + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualCluster +metadata: + name: tenant1-cluster +spec: + kubeconfig: XXXXXX + promoteResources: + nodes: + - node1 + - node2 + resources: + cpu: 10 + memory: 100Gi + pluginSet: + enabled: + - name: pluginA + - name: pluginB + disabled: + - name: pluginC + +``` + +通过pluginSet指定需要安装和不需要安装的插件 + +二、增加VirtualClusterPlugin 的CRD + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualClusterPlugin +metadata: + name: apiserver-network-proxy +spec: + successStateCommand: "kubectl get pods -n default -l app=test --field-selector=status.phase!=Running | grep -q 'No resources found' && echo "所有的Pod都处于Running状态。" || echo "有Pod不处于Running状态。"" + pluginSources: + chart: + name: xxx + repo: xxx + storage: + pvPath: /root + hostPath: /root + uri: https://XXXX.yaml + values: xxx + valuesFile: + pvPath: /root + hostPath: /root + uri: https://XXXX.yaml + yaml: + path: + pvPath: /root + hostPath: + path: /root + nodeName: node1 + uri: https://XXXX.yaml +``` + +## 整体流程 + +以使用pv方式存储部署文件为例 + +1. 创建绑定pv的服务 + +```YAML +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ubuntu-statefulset +spec: + serviceName: "ubuntu" + replicas: 1 + selector: + matchLabels: + app: ubuntu + template: + metadata: + labels: + app: ubuntu + spec: + containers: + - name: ubuntu + image: ubuntu + command: ["sleep", "infinity"] + volumeMounts: + - mountPath: "/pv" + name: plugin-store + volumeClaimTemplates: + - metadata: + name: plugin-store + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "openebs-hostpath" + resources: + requests: + storage: 1Gi + +``` + +1. 查看pv + +```Shell +pvc-bdac7fb6-a311-46a1-85ea-85099372a73e 1Gi RWO Delete Bound default/plugin-store-ubuntu-statefulset-0 openebs-hostpath 8s +``` + +1. 拷贝部署文件到pv + +```Shell +kubectl cp test.yaml ubuntu-statefulset-0:/pv +``` + +1. 创建plugin + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualClusterPlugin +metadata: + name: apiserver-network-proxy +spec: + pluginSources: + yaml: + path: + pvPath: plugin-store-ubuntu-statefulset-0:/pv +``` + +这边没有设置successCommand,因此virtual-cluster-operator在部署的时候是直接apply的,不会根据successCommand判断是否创建成功 + +如果是需要动态传参部署插件,则必须选择helm或者kostumize的方式,yaml方式只支持直接apply,不支持动态传参。 + +1. 整体流程分析 + +用户到一个新环境,就将plugin提前创建好。 + +后续当创建VirtualCluster的CR时,operator会根据vc里配置的plugin安装组件。安装时,每个plugin的安装会创建一个叫做plugin-excutor-job的job安装插件。 + +job的示例: + +```Shell +apiVersion: batch/v1 +kind: Job +metadata: + name: apply-yaml-job +spec: + templat + spec: + containers: + - name: kubectl-container + image: bitnami/kubectl + command: ["kubectl", "apply", "-f", "/mnt/example.yaml"] + volumeMounts: + - name: mypvc + mountPath: /pv + restartPolicy: Never + volumes: + - name: mypvc + persistentVolumeClaim: + claimName: plugin-store-ubuntu-statefulset-0 + backoffLimit: 4 +``` + +如果plugin设置了sucessCommand,则启动命令需要先执行完部署任务之后加上wait successCommand的命令。 + +所有plugin的job执行完毕之后更新VirtualCluster的状态为completed。 + +# Test plan + +## Unit Test + +## E2E Test + + + diff --git a/docs/proposals/kubenetstplugin/kubenest_plugin.md b/docs/proposals/kubenetstplugin/kubenest_plugin.md new file mode 100644 index 000000000..000d31bfa --- /dev/null +++ b/docs/proposals/kubenetstplugin/kubenest_plugin.md @@ -0,0 +1,219 @@ +# Summary + +At present, when creating a virtual cluster in Kubernetes, it is necessary to create plugins within the cluster based on different scenarios. Besides the built-in components of k8s, we cannot hardcode other enhancements like node-local-dns, apiserver-network-proxy, etc. It is necessary to provide a plugin-based approach for installing these. +# Motivation + +Offer a pluggable installation method for cluster components + +## Goals + +Use CRDs to describe plugins, with each plugin represented by an individual CR. When creating a cluster, you can specify in the virtualCluster which plugins need to be installed or not. The installation of plugins specified in the virtualCluster begins when the cluster's status reaches AllNodeReady. After all plugins are installed (how to determine if a plugin installation is successful will be set aside for now), the status of the virtualCluster changes to completed. +## Non-Goals + +# Proposal + +The plugin-based installation method for the Kube in kube solution + + +## Function overview + +1. Specify the plugins to be installed or not installed through virtualCluster + +2. Define the plugin's CRD, supporting various methods of plugin installation + +3. After determining the plugin installation is successful, set the cluster's status to completed + +## User Stories (Optional) + +## story 1 + +# Design Details + +## Overall structure + +![image.png](img/image.png) + +virtual-cluster-operator: Monitors the VirtualCluster resource and creates the control plane and Plugin-executor-job + +webhook: Dynamically injects the yaml of Plugin-executor-job based on the configuration of virtualCluster and VirtualClusterPlugin, injecting pv or hostpath into it + +Plugin-executor-job: ansible-operator, built-in helm, kustomize, kubectl, and other tools, responsible for installing the plugins configured by VirtualClusterPlugin, and determines whether the installation is successful based on the commands of successCommand. If it is not filled in, then it is not judged. + +Plugin: plugin is a crd, configuring the storage location and parameters of yaml or helm files + +storage: storage is the storage location of the plugin files, including hostpath, pv, object storage, url, and other storage methods + +## design of CRD + +一、VirtualCluster adds fields related to plugins + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualCluster +metadata: + name: tenant1-cluster +spec: + kubeconfig: XXXXXX + promoteResources: + nodes: + - node1 + - node2 + resources: + cpu: 10 + memory: 100Gi + pluginSet: + enabled: + - name: pluginA + - name: pluginB + disabled: + - name: pluginC + +``` + +Specify the plugins to install and not to install through pluginSet + +二、Add CRD for VirtualClusterPlugin + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualClusterPlugin +metadata: + name: apiserver-network-proxy +spec: + successStateCommand: "kubectl get pods -n default -l app=test --field-selector=status.phase!=Running | grep -q 'No resources found' && echo "所有的Pod都处于Running状态。" || echo "有Pod不处于Running状态。"" + pluginSources: + chart: + name: xxx + repo: xxx + storage: + pvPath: /root + hostPath: /root + uri: https://XXXX.yaml + values: xxx + valuesFile: + pvPath: /root + hostPath: /root + uri: https://XXXX.yaml + yaml: + path: + pvPath: /root + hostPath: + path: /root + nodeName: node1 + uri: https://XXXX.yaml +``` + +## Overall process + +For example, using the pv method to store deployment files + +1. Create a service that binds to a pv + +```YAML +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ubuntu-statefulset +spec: + serviceName: "ubuntu" + replicas: 1 + selector: + matchLabels: + app: ubuntu + template: + metadata: + labels: + app: ubuntu + spec: + containers: + - name: ubuntu + image: ubuntu + command: ["sleep", "infinity"] + volumeMounts: + - mountPath: "/pv" + name: plugin-store + volumeClaimTemplates: + - metadata: + name: plugin-store + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "openebs-hostpath" + resources: + requests: + storage: 1Gi + +``` + +1. Check pv + +```Shell +pvc-bdac7fb6-a311-46a1-85ea-85099372a73e 1Gi RWO Delete Bound default/plugin-store-ubuntu-statefulset-0 openebs-hostpath 8s +``` + +1. Copy deployment files to pv + +```Shell +kubectl cp test.yaml ubuntu-statefulset-0:/pv +``` + +1. create plugin + +```YAML +apiVersion: kosmos.io/v1alpha1 +kind: VirtualClusterPlugin +metadata: + name: apiserver-network-proxy +spec: + pluginSources: + yaml: + path: + pvPath: plugin-store-ubuntu-statefulset-0:/pv +``` + +This side does not have a successCommand set therefore when the virtual-cluster-operator is deploying it applies directly without determining success based on the successCommand + +If there is a need to dynamically pass parameters for the deployment of plugins, one must choose either helm or customize methods Yaml methods only support direct application and do not support dynamic parameter passing + +1. Overall process analysis + +When users arrive at a new environment they pre-create the plugin + +Subsequently, when creating the VirtualCluster's CR, the operator will install components based on the plugin configured in the vc During installation, the installation of each plugin will create a job named plugin-executor-job to install the plugin + +Example of a job + +```Shell +apiVersion: batch/v1 +kind: Job +metadata: + name: apply-yaml-job +spec: + templat + spec: + containers: + - name: kubectl-container + image: bitnami/kubectl + command: ["kubectl", "apply", "-f", "/mnt/example.yaml"] + volumeMounts: + - name: mypvc + mountPath: /pv + restartPolicy: Never + volumes: + - name: mypvc + persistentVolumeClaim: + claimName: plugin-store-ubuntu-statefulset-0 + backoffLimit: 4 +``` + +If a plugin has set successCommand, then the start command needs to first complete the deployment task followed by adding a wait for the successCommand command. + +After all the plugin's jobs have been executed, update the VirtualCluster's status to completed. + +# Test plan + +## Unit Test + +## E2E Test + + +