您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

K8S部署指导书

时间:2020-08-11 11:05:28  来源:  作者:

K8S master 节点 10.10.10.12

k8s Minion节点10.10.10.14

系统centos 7.4

部署操作链接地址:文档:k8s部署手册.note

链接:http://note.youdao.com/noteshare?id=cbaacc7678f024ed6670a5eb803da920&sub=90A090192E4D44F58C79E91A14D960ED

一、master点安装部署步骤:

1、关闭防火墙,开启NTP服务

systemctl stop firewalld #停止防火墙 systemctl disable firewalld #禁用防火墙 yum -y install ntp #安装NTP服务器 ntpdate pool.ntp.org #更新时间同步 systemctl start ntpd #启动NTP setenforce 0 systemctl enable ntpd#enable #NTP关机开机后不需要在开启

2、yum安装相关组件,ETCD可以单独用一台服务器部署,也可以和 MASTER合在一块

yum install epel-release -y #安装eple 扩展源 yum install kubernetes-master etcd flannel -y

3、相关配置文件配置

1)ETCD配置文件如下所示:

备注:可以将原有配置文件情况,直接复制下面内容即可,但是需要修改配置文件对应的IP地址

[root@localhost ~]# more /etc/etcd/etcd.conf # [member] ETCD_NAME=etcd1 ETCD_DATA_DIR="/data/etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_COUNT="10000" #ETCD_HEARTBEAT_INTERVAL="100" #ETCD_ELECTION_TIMEOUT="1000" ETCD_LISTEN_PEER_URLS="http://10.10.10.12:2380" ETCD_LISTEN_CLIENT_URLS="http://10.10.10.12:2379,http://127.0.0.1:2379" ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" #ETCD_CORS="" # #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.10.12:2380" # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..." ETCD_INITIAL_CLUSTER="etcd1=http://10.10.10.12:2380" #ETCD_INITIAL_CLUSTER_STATE="new" #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://10.10.10.12:2379" #ETCD_DISCOVERY="" #ETCD_DISCOVERY_SRV="" #ETCD_DISCOVERY_FALLBACK="proxy" #ETCD_DISCOVERY_PROXY="" # #[proxy] #ETCD_PROXY="off" #ETCD_PROXY_FAILURE_WAIT="5000" #ETCD_PROXY_REFRESH_INTERVAL="30000" #ETCD_PROXY_DIAL_TIMEOUT="1000" #ETCD_PROXY_WRITE_TIMEOUT="5000" #ETCD_PROXY_READ_TIMEOUT="0" # #[security] #ETCD_CERT_FILE="" #ETCD_KEY_FILE="" #ETCD_CLIENT_CERT_AUTH="false" #ETCD_TRUSTED_CA_FILE="" #ETCD_PEER_CERT_FILE="" #ETCD_PEER_KEY_FILE="" #ETCD_PEER_CLIENT_CERT_AUTH="false" #ETCD_PEER_TRUSTED_CA_FILE="" # #[logging] #ETCD_DEBUG="false" # examples for -log-package-levels etcdserver=WARNING,security=DEBUG #ETCD_LOG_PACKAGE_LEVELS=""

2)创建ETCD数据目录并 启动etcd

mkdir -p /data/etcd/;chmod 757 -R /data/etcd/ systemctl restart etcd.service

3)查看etcd 进程 是否正常

[root@localhost ~]# ps -ef | grep etcd kube 3161 1 0 16:54 ? 00:02:04 /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://10.10.10.12:2379 --insecure-bind-address=0.0.0.0 --port=8080 --kubelet-port=10250 --allow-privileged=false --service-cluster-ip-range=10.254.0.0/16 --admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota etcd 4267 1 1 19:13 ? 00:01:08 /usr/bin/etcd --name=etcd1 --data-dir=/data/etcd --listen-client-urls=http://10.10.10.12:2379,http://127.0.0.1:2379 root 4299 1 0 19:13 ? 00:00:00 /usr/bin/flanneld -etcd-endpoints=http://10.10.10.12:2379 -etcd-prefix=/atomic.io/network root 4799 4706 0 21:05 pts/0 00:00:00 grep --color=auto etcd

4)配置MASTER节点主配置文件,注意配置文件里面的IP地址,可以将原有配置文件清空 ,复制以下内容即可。目录如下 [root@localhost ~]# more /etc/kubernetes/config

[root@localhost ~]# more /etc/kubernetes/config ### # kubernetes system config # # The following values are used to configure various aspects of all # kubernetes services, including # # kube-apiserver.service # kube-controller-manager.service # kube-scheduler.service # kubelet.service # kube-proxy.service # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged Docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" #是否开启docker容器的超级权限,默认不开启,也可以开启为true # How the controller-manager, scheduler, and proxy find the apiserver KUBE_MASTER="--master=http://10.10.10.12:8080"

5)配置api组件配置文件,可以直接复制以下内容,注意IP地址

[root@localhost ~]# [root@localhost ~]# more /etc/kubernetes/apiserver # kubernetes system config # The following values are used to configure the kube-apiserver # The address on the local server to listen to. KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" # The port on the local server to listen on. KUBE_API_PORT="--port=8080" # Port minions listen on KUBELET_PORT="--kubelet-port=10250" # Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://10.10.10.12:2379" # Address range to use for i KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" #这个配置无需修改 # default admission control policies #KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" # Add your own! KUBE_API_ARGS=""

6)启动相关组件

for I in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $I systemctl enable $I systemctl status $I done

7)查询相关组件端口

netstat -anltp

8)到此为止 MASTER 节点配置完成

----------------------------------------------------------------------------------------------------------------------------

二、minion 节点部署步骤

1)关闭防火墙开启NTP

systemctl stop firewalld #停止防火墙 systemctl disable firewalld #禁用防火墙 yum -y install ntp #安装NTP服务器 ntpdate pool.ntp.org #更新时间同步 systemctl start ntpd #启动NTP setenforce 0 systemctl enable ntpd#enable #NTP关机开机后不需要在开启

2)部署相关组件如下:

yum install epel-release -y yum install kubernetes-node docker flannel *rhsm* -y

3)修改配置文件,注意IP指向主节点,文件复制即可

[root@localhost ~]# more /etc/kubernetes/config # kubernetes system config # The following values are used to configure various aspects of all # kubernetes services, including # kube-apiserver.service # kube-controller-manager.service # kube-scheduler.service # kubelet.service # kube-proxy.service # logging to stderr means we get it in the systemd journal KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" # How the controller-manager, scheduler, and proxy find the apiserver KUBE_MASTER="--master=http://10.10.10.12:8080" #指向主节点

4)修改kubelet 配置文件 如下所示,注意IP地址

[root@localhost kubernetes]# more /etc/kubernetes/kubelet ### # kubernetes kubelet (minion) config # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces) KUBELET_ADDRESS="--address=0.0.0.0" # The port for the info server to serve on KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname KUBELET_HOSTNAME="--hostname-override=10.10.10.14" # location of the api-server KUBELET_API_SERVER="--api-servers=http://10.10.10.12:8080" # pod infrastructure container #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.0.123:5000/centos68" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" # Add your own! KUBELET_ARGS=""

5)启动

for I in kube-proxy kubelet docker do systemctl restart $I systemctl enable $I systemctl status $I done

6)查看相关端口

netstat -anltp

---------------------------------------------------------------------------------------------------------------------------

三、部署FLANNELD 组件

1)修改MASTER 节点 配置文件如下 路径/etc/sysconfig/flanneld

[root@localhost kubernetes]# more /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://10.10.10.12:2379"#指定ETCD的访问入口 # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network" #指定ETCD的KEY # Any additional options that you want to pass #FLANNEL_OPTIONS=""

2)修改minon 节点配置文件 路径 /etc/sysconfig/flanneld,注意IP指向MASTER

[root@localhost kubernetes]# more /etc/sysconfig/flanneld # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://10.10.10.12:2379" #指定ETCD的访问入口 # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/atomic.io/network" #指定ETCD的KEY # Any additional options that you want to pass #FLANNEL_OPTIONS=""

3)在MASTER节点指向下面命令,在Master服务器,测试Etcd集群是否正常,同时在Etcd配置中心创建flannel网络配置: 最后一条命令是创建ETCD KEY-VALUES 不创建的话 FLANNELD组件无法启动

etcdctl member list etcdctl cluster-health etcdctl get /atomic.io/network/config etcdctl ls /atomic.io/network/subnets etcdctl rm /atomic.io/network/ --recursive etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

4)启动组件

service flanneld restart

5)查看配置

MASTER

[root@localhost kubernetes]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.12 netmask 255.255.255.0 broadcast 10.10.10.255 inet6 fe80::5236:328f:e632:35f3 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:c6:56:7d txqueuelen 1000 (Ethernet) RX packets 82765 bytes 72168174 (68.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 39638 bytes 17434838 (16.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472 inet 172.17.63.0 netmask 255.255.0.0 destination 172.17.63.0 inet6 fe80::cf87:5bc:e7e9:a6bd prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 786 bytes 928034 (906.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 561 bytes 50704 (49.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

MINLION

[root@localhost kubernetes]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472 inet 172.17.30.1 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::42:dbff:fe9a:b8bd prefixlen 64 scopeid 0x20<link> ether 02:42:db:9a:b8:bd txqueuelen 0 (Ethernet) RX packets 4164 bytes 1655177 (1.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4392 bytes 467421 (456.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.10.10.14 netmask 255.255.255.0 broadcast 10.10.10.255 inet6 fe80::a4d2:c607:2321:4812 prefixlen 64 scopeid 0x20<link> inet6 fe80::5236:328f:e632:35f3 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:cb:19:44 txqueuelen 1000 (Ethernet) RX packets 654860 bytes 589926691 (562.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 283773 bytes 23145156 (22.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472 inet 172.17.30.0 netmask 255.255.0.0 destination 172.17.30.0 inet6 fe80::5c5a:2bef:c481:fb02 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 558 bytes 50560 (49.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 789 bytes 928178 (906.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

6)测试户ping一下flannel0: 接口的IP是不是能通 能通则正常,如果不通MASTER和minion节点分别指向下面命令

MASTER

service etcd restart;service flanneld restart;service docker restart;iptables -P FORWARD ACCEPT

minion

service etcd restart;service flanneld restart;service docker restart;iptables -P FORWARD ACCEPT

--------------------------------------------------------------------------------------------------------------------------

四、安装web 组件

以下在minion节点操作

如下为配置kubernetes dashboard完整过程,提前导入两个列表镜像

pod-infrastructure

kubernetes-dashboard-amd64

Docker镜像导入指令如下:

n docker load <pod-infrastructure.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk '{print $3}') registry.access.redhat.com/rhel7/pod-infrastructure

docker load <kubernetes-dashboard-amd64.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk '{print $3}') bestwu/kubernetes-dashboard-amd64:v1.6.3

---------------------------------------------------------

以下操作全部在MASTER完成

在Master端,创建dashboard-controller.yaml,代码如下:

[root@localhost k8s]# more dashboard-controller.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-App: kubernetes-dashboard kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: kubernetes-dashboard template: metadata: labels: k8s-app: kubernetes-dashboard annotations: scheduler.alpha.kubernetes.io/critical-pod: '' scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]' spec: containers: - name: kubernetes-dashboard image: bestwu/kubernetes-dashboard-amd64:v1.6.3 resources: # keep request = limit to keep this container in guaranteed class limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi ports: - containerPort: 9090 args: - --apiserver-host=http://10.10.10.12:8080 livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30

创建dashboard-service.yaml,代码如下:

[root@localhost k8s]# more dashboard-service.yaml apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" spec: selector: k8s-app: kubernetes-dashboard ports: - port: 80 targetPort: 9090

创建dashboard dashborad pods模块:

kubectl create -f dashboard-controller.yaml kubectl create -f dashboard-service.yaml

创建完成后,查看Pods和Service的详细信息:,最后一条可以不执行

kubectl get namespace kubectl get deployment --all-namespaces kubectl get svc --all-namespaces kubectl get pods --all-namespaces kubectl get pod -o wide --all-namespaces kubectl describe service/kubernetes-dashboard --namespace="kube-system" kubectl describe pod/kubernetes-dashboard-530803917-816df --namespace="kube-system" kubectl delete pod/kubernetes-dashboard-530803917-816df --namespace="kube-system" --grace-period=0 --force

7)测试

http://10.10.10.12:8080/ui



Tags:K8S   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景:目前prometheus 给pod的内存告警阀值设置的85%,由于JVM 设置最高申请内存为pod limit 的75%,通过arthas-boot查看到堆内存和元空间占用内存之和跟prometheus告警值不同。...【详细内容】
2021-09-16  Tags: K8S  点击:(104)  评论:(0)  加入收藏
近期由于工作原因,在项目支持的过程中,进行了一次K8S的基础环境部署,云平台一直是公司的重要底座,而我由于一系列原因,一直没有亲自尝试,通过本次的机会,让我重新做了一遍,也找到了...【详细内容】
2021-09-09  Tags: K8S  点击:(90)  评论:(0)  加入收藏
概述谷歌云使用先进的 Andromeda 网络来实现 VPC 内实例之间的相互访问,以及 Google Kubernetes Engine (GKE) 的 Pod 的跨节点互访,避免了配置静态路由或者 Overlay 网络带来...【详细内容】
2021-08-20  Tags: K8S  点击:(103)  评论:(0)  加入收藏
1.创建yaml模板 kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml 2.修改模板 vim web.yamlapiVersion: apps/v1kind: Deploymentmetadata:label...【详细内容】
2021-07-20  Tags: K8S  点击:(160)  评论:(0)  加入收藏
Jenkins 是目前最常用的持续集成工具,拥有近50%的市场份额,他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性!这份Jenkins宝典从入门介绍到结合Docker+SpringC...【详细内容】
2021-06-09  Tags: K8S  点击:(145)  评论:(0)  加入收藏
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署:# 创建一个 Master 节点$ kubeadm init # 将一...【详细内容】
2021-04-29  Tags: K8S  点击:(276)  评论:(0)  加入收藏
K8S 网络设计与实现是在学习 K8S 网络过程中总结的内容。本文按照 K8S 网络设计原则、Pod 内部网络、Pod 之间网络等几个步骤讲解 K8S 复杂的网络架构。 图片出自:《你女儿也...【详细内容】
2021-04-01  Tags: K8S  点击:(266)  评论:(0)  加入收藏
记录在 ubuntu-20.04.2-live-server系统上通过rancher安装k8s的过程。0. 更换阿里云软件源为了保障下载速度,将ubuntu软件源替换为阿里云软件源。如果网络通畅,可跳过。0.1....【详细内容】
2021-03-26  Tags: K8S  点击:(324)  评论:(0)  加入收藏
1.创建一个简单的应用程序在安装好Docker后,现在让我们来创建一个简单的应用程序。我们先创建一个简单的Node.js Web应用,然后将它打包到镜像中。该应用可以接受HTTP请求并返...【详细内容】
2021-03-10  Tags: K8S  点击:(219)  评论:(0)  加入收藏
一、日志收集的需求背景:&bull; 业务发展越来越庞大,服务器越来越多​ &bull; 各种访问日志、应用日志、错误日志量越来越多​ &bull; 开发人员排查问题,需要到服务器上查日志,...【详细内容】
2021-03-05  Tags: K8S  点击:(189)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条