KubeEdge单机实验 2020-10-23 日常 暂无评论 5582 次阅读 # 单机实验 成功的例子:[Kubeedge安装,配置,HelloWorld](https://github.com/JingruiLea/blogs/blob/master/%E5%AE%89%E8%A3%85kubeedge.md) 在同一台WSL-Ubuntu子系统上,创建cloud、edge两个账户,来模拟云和边缘的服务器。 云和边缘将会使用同一个ip地址。 首先用`adduser`命令创建cloud和edge两个账户,账户密码设为1。 用原账户(pro)编译cloudcore,放到/home/cloud/;编译edgecore,放到/home/edge/。登录这三个账户,打开[KubeEdge文档](https://docs.kubeedge.io/en/latest/setup/local.html),开始实验。 ## 一、部署云端 ### 1.生成配置文件 cloudcore自带新手配置文件,使用命令`cloudcore --minconfig > cloudcore.yaml`就能生成。生成的配置文件如下: ``` # With --minconfig , you can easily used this configurations as reference. # It's useful to users who are new to KubeEdge, and you can modify/create your own configs accordingly. # This configuration is suitable for beginners. apiVersion: cloudcore.config.kubeedge.io/v1alpha1 kind: CloudCore kubeAPIConfig: kubeConfig: /root/.kube/config master: "" leaderelection: LeaderElect: false LeaseDuration: 0s RenewDeadline: 0s ResourceLock: "" ResourceName: "" ResourceNamespace: "" RetryPeriod: 0s modules: cloudHub: advertiseAddress: - 172.17.101.196 https: address: 0.0.0.0 enable: true port: 10002 nodeLimit: 1000 tlsCAFile: /etc/kubeedge/ca/rootCA.crt tlsCAKeyFile: /etc/kubeedge/ca/rootCA.key tlsCertFile: /etc/kubeedge/certs/server.crt tlsPrivateKeyFile: /etc/kubeedge/certs/server.key unixsocket: address: unix:///var/lib/kubeedge/kubeedge.sock enable: true websocket: address: 0.0.0.0 enable: true port: 10000 ``` ### 2.运行cloudcore `cloudcore --config cloudcore.yaml` ``` cloud@LAPTOP-NI4DNH6I:~$ sudo ./cloudcore --config cloudcore.yaml F1023 10:39:22.813455 164 server.go:55] [ kubeconfig: Invalid value: "/root/.kube/config": kubeconfig not exist ] ``` 要给ubuntu系统(云服务器)也装一个k8s。Windows主系统装的k8s没用。 #### Ubuntu装k8s - 参考 - 1.[在 Ubuntu 上安装 K8S教程](https://www.cnblogs.com/whuanle/p/12260471.html) - 2.[Docker 镜像加速](https://www.runoob.com/docker/docker-mirror-acceleration.html) - 3.[Kubernetes在WSL部署的官方教程](https://kubernetes.io/blog/2020/05/21/wsl-docker-kubernetes-on-the-windows-desktop/) - 4.[kind文档](https://kind.sigs.k8s.io/docs/user/quick-start/) - 要点: - 参考1,中的镜像加速已经不能用了,配置镜像加速的部分要看参考2 - 要打开 Docker for Windows,不然用kind创建集群的第一步就出错 - 用`kubeadm init` 是运行不了的,会提示“没启动docker服务”和“不支持Swap",让你用systemctl打开docker服务,并且禁用swap。由于WSL是以sysvinit启动的,不是systemd,所以用不了systemctl。用systemd代替sysvinit的方式行不通。正确的做法是按照参考3中的 [KinD: Kubernetes made easy in a container](https://kubernetes.io/blog/2020/05/21/wsl-docker-kubernetes-on-the-windows-desktop/#kind-kubernetes-made-easy-in-a-container) 写的,下载一个kind,覆盖掉从别处下载的kind。用`kind create cluster` 来代替`kubeadm init`来创建k8s集群和k8s控制面。 ``` cloud@LAPTOP-NI4DNH6I:~$ sudo kind create cluster --name wslkind Creating cluster "wslkind" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-wslkind" You can now use your cluster with: kubectl cluster-info --context kind-wslkind Thanks for using kind! 😊 cloud@LAPTOP-NI4DNH6I:~$ kubectl version Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:50:19Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port? ``` 然后就发生了一件奇怪的事:cloud账户、root账户、edge账户都没发现k8s的服务端,只有pro账户发现了k8s的服务端 这是连不上的cloud: ``` cloud@LAPTOP-NI4DNH6I:~/.kube$ kubectl cluster-info To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. The connection to the server localhost:8080 was refused - did you specify the right host or port? cloud@LAPTOP-NI4DNH6I:~/.kube$ kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port? ``` 这是连不上的root: ``` root@LAPTOP-NI4DNH6I:/home/cloud/.kube# kubectl cluster-info To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. Error from server (InternalError): an error on the server ("") has prevented the request from succeeding root@LAPTOP-NI4DNH6I:/home/cloud/.kube# kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} Error from server (InternalError): an error on the server ("") has prevented the request from succeeding ``` 这是能连上的: ``` pro@LAPTOP-NI4DNH6I:~/.kube$ kubectl cluster-info Kubernetes master is running at https://kubernetes.docker.internal:6443 KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. pro@LAPTOP-NI4DNH6I:~/.kube$ kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:04:18Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} ``` 原因可能与 ~/.kube/config 有关。 cloud的~/.kube/config 不存在 root的~/.kube/config:(连不上k8s服务端) ``` apiVersion: v1 clusters: - cluster: certificate-authority-data: LS***g== server: https://127.0.0.1:46351 name: kind-wslkind contexts: - context: cluster: kind-wslkind user: kind-wslkind name: kind-wslkind current-context: kind-wslkind kind: Config preferences: {} users: - name: kind-wslkind user: client-certificate-data: LS***o= client-key-data: LS***o= ``` pro的~/.kube/config:(能连上k8s服务端) ``` apiVersion: v1 clusters: - cluster: certificate-authority-data: LS***o= server: https://kubernetes.docker.internal:6443 name: docker-desktop contexts: - context: cluster: docker-desktop user: docker-desktop name: docker-desktop current-context: docker-desktop kind: Config preferences: {} users: - name: docker-desktop user: client-certificate-data: LS***0K client-key-data: LS***g== ``` Ubuntu子系统的IP是172.18.111.105,访问用Windows访问172.18.111.105:46351,页面是:"172.18.111.105 已拒绝连接"。估计服务是开着的,可能是被防火墙之类的挡住了,不然应该是404 not found。但我随便输入个端口,访问172.18.111.105:4634,页面也是"172.18.111.105 已拒绝连接",那就是我想错了。 用wget访问127.0.0.1:46351,出现这样的提示: ``` root@LAPTOP-NI4DNH6I:/home/cloud# wget https://127.0.0.1:46351 --2020-10-23 15:39:51-- https://127.0.0.1:46351/ Connecting to 127.0.0.1:46351... connected. Unable to establish SSL connection. ``` 安装一个libssl-dev:`apt-get install libssl-dev` 关掉刚才的kind集群:`kind delete cluster --name wslkind` 重启Ubuntu子系统(在Windows里):`wsl -t Ubuntu-20.04` 重新建一个kind集群:`kind create cluster',没创建成功,提示: ``` root@LAPTOP-NI4DNH6I:/home/cloud# kind create cluster Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✗ Starting control-plane 🕹️ ERROR: failed to create cluster: failed to remove master taint: command "docker exec --privileged kind-control-plane kubectl --kubeconfig=/etc/kubernetes/admin.conf taint nodes --all node-role.kubernetes.io/master-" failed with error: exit status 1 Command Output: The connection to the server kind-control-plane:6443 was refused - did you specify the right host or port? ``` 有可能是端口被占用了。把Docker for Windows 的k8s关掉,再试试: ``` root@LAPTOP-NI4DNH6I:/home/cloud# kind create cluster Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/ ``` 但还是连不上去: ``` root@LAPTOP-NI4DNH6I:/home/cloud# kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} Error from server (InternalError): an error on the server ("") has prevented the request from succeeding ``` 仔细看参考3,有一个[Docker Desktop: faster with WSL2](https://kubernetes.io/blog/2020/05/21/wsl-docker-kubernetes-on-the-windows-desktop/#docker-desktop-faster-with-wsl2),意思是说不需要在Ubuntu子系统里安装Docker,只需要在Windows的Docker里打开一个开关,就能让Ubuntu子系统直接用Windows主系统里的Docker。 所以下一步是卸载Ubuntu子系统里的Docker。卸载过程完全参考[ubuntu 完全干净的卸载docker](https://www.cnblogs.com/shmily3929/p/12085163.html) 再`kind create cluster`创建集群的时候,卡在“Starting control-plane”这一步,这一步是调用kubeadm创建k8s的管理面,Ctrl+C退出,运行`kubeadm init`,发现除了原来的“docker服务未启用”、“不能用swap”以外,多了一个“端口被占用”错误。 在Windows主系统运行`netstat -aon|findstr "端口号"` 发现是com.docker.backend.exe在占用这个端口,而重启Docker也不能解除占用。于是重启电脑。 重启电脑以后,root用户进入Ubuntu子系统,先看一下`kubectl version`,不出意外,没有服务端。看一下 /root/.kube/config,因为KubeEdge的cloudcore用的将是/root/.kube里的config。结果是: ``` apiVersion: v1 clusters: ``` 看来是配置里真没有k8s服务端。用kind创建k8s集群:`kind create cluster --name balrog` ``` root@LAPTOP-NI4DNH6I:~/.kube# kind create cluster --name balrog Creating cluster "balrog" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-balrog" You can now use your cluster with: kubectl cluster-info --context kind-balrog Have a nice day! 👋 ``` 创建成功了,再看一下 /root/.kube/config : ``` apiVersion: v1 clusters: - cluster: certificate-authority-data: LS***Cg== server: https://127.0.0.1:45311 name: kind-balrog contexts: - context: cluster: kind-balrog user: kind-balrog name: kind-balrog current-context: kind-balrog kind: Config preferences: {} users: - name: kind-balrog user: client-certificate-data: LS***o= client-key-data: LS***o= ``` 配置文件里现在有k8s服务器了。最后再看一下这个k8s服务器有没有连上去:`kubectl version` ``` root@LAPTOP-NI4DNH6I:~/.kube# kubectl version Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.1", GitCommit:"206bcadf021e76c27513500ca24182692aabd17e", GitTreeState:"clean", BuildDate:"2020-09-14T07:30:52Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} ``` 连上去了。这个k8s服务器是运行在Windows的Docker里的,kubectl的配置文件是在Ubuntu的 /root/.kube/config 里的,Ubuntu装k8s就完成了。 ### #### 继续运行cloudcore 运行:`./cloudcore --config cloudcore.yaml` ``` E1023 17:01:15.074745 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/cloudhub/cloudhub.go:122: Failed to list *v1alpha1.ClusterObjectSync: the server could not find the requested resource (get clusterobjectsyncs.reliablesyncs.kubeedge.io) E1023 17:01:15.550452 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/manager/device.go:40: Failed to list *v1alpha2.Device: the server could not find the requested resource (get devices.devices.kubeedge.io) E1023 17:01:21.107708 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/synccontroller/synccontroller.go:176: Failed to list *v1alpha1.ClusterObjectSync: the server could not find the requested resource (get clusterobjectsyncs.reliablesyncs.kubeedge.io) E1023 17:01:21.578724 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/cloudhub/cloudhub.go:123: Failed to list *v1alpha1.ObjectSync: the server could not find the requested resource (get objectsyncs.reliablesyncs.kubeedge.io) E1023 17:01:23.413810 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/synccontroller/synccontroller.go:177: Failed to list *v1alpha1.ObjectSync: the server could not find the requested resource (get objectsyncs.reliablesyncs.kubeedge.io) E1023 17:01:23.882356 2759 reflector.go:178] github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/manager/device.go:40: Failed to list *v1alpha2.Device: the server could not find the requested resource (get devices.devices.kubeedge.io) ``` 看到还是有一些报错。估计是k8s集群没跑[KubeEdge的配套程序](https://docs.kubeedge.io/en/latest/setup/local.html#create-crds)。执行这4个命令 ``` kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_devicemodel.yaml kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/objectsync_v1alpha1.yaml ``` 再次运行:`./cloudcore --config cloudcore.yaml`,就不报错了。 ``` root@LAPTOP-NI4DNH6I:/home/cloud# ./cloudcore --config cloudcore.yaml I1023 17:05:58.179721 2880 server.go:59] Version: v1.4.0-beta.0.218+c80ffce0dc75b6 I1023 17:05:58.179796 2880 module.go:34] Module cloudhub registered successfully I1023 17:05:58.179827 2880 module.go:34] Module edgecontroller registered successfully I1023 17:05:58.179838 2880 module.go:34] Module devicecontroller registered successfully I1023 17:05:58.180976 2880 module.go:34] Module synccontroller registered successfully W1023 17:05:58.181020 2880 module.go:37] Module cloudStream is disabled, do not register I1023 17:05:58.181082 2880 core.go:24] Starting module devicecontroller I1023 17:05:58.181100 2880 core.go:24] Starting module synccontroller I1023 17:05:58.181130 2880 core.go:24] Starting module cloudhub I1023 17:05:58.181142 2880 core.go:24] Starting module edgecontroller I1023 17:05:58.189046 2880 downstream.go:861] Start downstream devicecontroller I1023 17:05:58.189133 2880 upstream.go:100] start upstream controller I1023 17:05:58.214876 2880 downstream.go:450] start downstream controller I1023 17:05:58.285800 2880 server.go:262] Ca and CaKey don't exist in local directory, and will read from the secret I1023 17:05:58.290000 2880 server.go:266] Ca and CaKey don't exist in the secret, and will be created by CloudCore I1023 17:05:58.311389 2880 server.go:310] CloudCoreCert and key don't exist in local directory, and will read from the secret I1023 17:05:58.314819 2880 server.go:314] CloudCoreCert and key don't exist in the secret, and will be signed by CA I1023 17:05:58.331055 2880 signcerts.go:98] Succeed to creating token I1023 17:05:58.331753 2880 server.go:44] start unix domain socket server I1023 17:05:58.332241 2880 server.go:63] Starting cloudhub websocket server I1023 17:05:58.332579 2880 uds.go:72] listening on: //var/lib/kubeedge/kubeedge.sock I1023 17:06:00.189676 2880 upstream.go:62] Start upstream devicecontroller ``` 云端部署好了。这个命令窗口挂着就行了,新开一个cmd窗口,输入`wsl`进入Ubuntu子系统,开始部署边缘。 ## 二、部署边缘 ### 1. 生成配置文件 `edgecore --minconfig > edgecore.yaml` ### 2. 运行edgecore 如果cloudcore和edgecore不在同一台主机,那就需要edge先连上cloud的k8s集群,获取token,放到edge的 ~/.kube/config里。 我这是运行在同一台主机里,不需要设置token,而是要运行一下这个命令:`export CHECK_EDGECORE_ENVIRONMENT="false"` 然后就能运行edgecore了:`edgecore --config edgecore.yaml` ``` I1023 17:28:55.647285 3193 log.go:181] INFO: Configuration files: [] I1023 17:28:55.647358 3193 log.go:181] WARN: empty configurtion from [FileSource] I1023 17:28:55.647414 3193 log.go:181] INFO: invoke dynamic handler:FileSource E1023 17:28:55.647196 3193 csi_plugin.go:226] kubernetes.io/csi: CSIDriverLister not found on KubeletVolumeHost I1023 17:28:55.647486 3193 log.go:181] INFO: archaius init success I1023 17:28:55.647512 3193 fs_resource_analyzer.go:64] Starting FS ResourceAnalyzer I1023 17:28:55.647244 3193 common.go:98] client hub-client-sub-1603445335 isconnected: false E1023 17:28:55.647570 3193 common.go:100] connect error: Network Error : dial tcp 127.0.0.1:1883: connect: connection refused I1023 17:28:55.647632 3193 log.go:181] INFO: create new watcher F1023 17:28:55.655074 3193 certmanager.go:91] Error: token credentials are in the wrong format ``` 报错了。127.0.0.1:1883这个错误特别显眼。打开edgecore.yaml看看: ``` # With --minconfig , you can easily used this configurations as reference. # It's useful to users who are new to KubeEdge, and you can modify/create your own configs accordingly. # This configuration is suitable for beginners. apiVersion: edgecore.config.kubeedge.io/v1alpha1 database: dataSource: /var/lib/kubeedge/edgecore.db kind: EdgeCore modules: edgeHub: heartbeat: 15 httpServer: https://172.18.111.105:10002 tlsCaFile: /etc/kubeedge/ca/rootCA.crt tlsCertFile: /etc/kubeedge/certs/server.crt tlsPrivateKeyFile: /etc/kubeedge/certs/server.key token: "" websocket: enable: true handshakeTimeout: 30 readDeadline: 15 server: 172.18.111.105:10000 writeDeadline: 15 edged: cgroupDriver: cgroupfs cgroupRoot: "" cgroupsPerQOS: true clusterDNS: "" clusterDomain: "" devicePluginEnabled: false dockerAddress: unix:///var/run/docker.sock gpuPluginEnabled: false hostnameOverride: LAPTOP-NI4DNH6I interfaceName: eth0 nodeIP: 172.18.111.105 podSandboxImage: kubeedge/pause:3.1 remoteImageEndpoint: unix:///var/run/dockershim.sock remoteRuntimeEndpoint: unix:///var/run/dockershim.sock runtimeType: docker eventBus: mqttMode: 2 mqttQOS: 0 mqttRetain: false mqttServerExternal: tcp://127.0.0.1:1883 mqttServerInternal: tcp://127.0.0.1:1884 ``` 原来127.0.0.1:1883是mqtt服务端,我还没装mqtt,就先不管。配置文件里还出现了/etc/kubeedge/certs/server.crt,cat一下发现这个文件不存在,/etc/kubeedge 这个路径也不存在。 早先根据 [Kubeedge安装,配置,HelloWorld](https://github.com/JingruiLea/blogs/blob/master/%E5%AE%89%E8%A3%85kubeedge.md) 编译了keadm,是用来部署cloud和edge的。用这个来部署edge试试: ``` root@LAPTOP-NI4DNH6I:/home/edge# keadm join --cloudcore-ipport=172.18.111.105:10000 --edgenode-name=edge001 Reading package lists... Building dependency tree... Reading state information... mosquitto is already the newest version (1.6.9-1). 0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded. MQTT is installed in this host ... ... HTTP request sent, awaiting response... 200 OK Length: 86974688 (83M) [application/octet-stream] Saving to: ‘kubeedge-v1.4.0-linux-amd64.tar.gz’ kubeed 73%[=============> ] 60.64M 207KB/s eta 3m 23s ``` 这应该就对了,在安装KubeEdge的边缘端的必要文件。 。。。还是报错。 云端也用keadm部署:`keadm init --advertise-address="172.18.111.105"` 边缘用keadm加入: ``` keadm join --cloudcore-ipport=172.18.111.105:10000 --token=8ba22e4488b0757e318d9860d652573a4e17f1ff94094394923c0fd3dfe2ca34.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDM1NDI3OTF9.OJ2GIErFplOm95S-sFGklAyFB2yLso_RpdoBImK6oVs ``` ~~等等,是Go的环境变量丢了。重新设置一下GO的环境变量应该就好了。~~ ### 添加证书 ``` $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge ``` ### 开启MQTT ``` mosquitto -d -p 1883 ``` 标签: 边缘计算, kubeedge 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭