Rancher 2.1平台搭建及使用
Rancher 2.1平台搭建及使用
- 一、概述
- 1.1、什么是Rancher
- 1.2、Rancher架构
- 1.2.1、Docker简述
- 1.2.2、Kubernetes简述
- 1.2.、Rancher架构
- 二、相关术语
- 2.1、全局层
- 2.2、集层
- 2.、项目层
- 2.4、其他 (右上角登录菜单)
- 三、Rancher v2.1.0功能列表
- .1、K8S集管理
- .2、多租户功能
- .、容器主机管理
- .4、容器调度与管理
- .5、容器应用管理
- .6、容器管理
- .7、容器网络管理
- .8、负载均衡服务
- .9、容器存储服务
- .10、系统监控及日志
- .11、应用商店管理
- .12、系统管理及安全
- .1、镜像库功能
- .14、系统集成支持
- .15、CI/C功能
- 四、快速入门
- 4.1、入门须知
- 4.2、配置Linux主机
- 4.2.1、系统需求:
- 4.2.2、硬件需求:
- 4.2.、软件需求:
- 4.、安装Rancher
- 4.4、登录Rancher
- 4.5、创建K8S集
- 4.6、部署工作负载
- 五、安装
- 5.1、基础环境配置
- 5.1.1、主机配置
- 5.1.1.1、配置要求
- 5.1.2、Docker安装与配置
- 5.2、自签名ssl证书
- 5.2.1、配置自定义CA认证
- 5.2.、配置Rancher的自定义CA认证
- 5.、安装Rancher并配置SSL证书
- [参考文档]:
一、概述
1.1、什么是Rancher
Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。
Kubernetes不仅已经成为的容器编排标准,它也正在迅速成为各类云和虚拟化厂商提供的标准基础架构。Rancher用户可以选择使用Rancher Kubernetes Engine(RKE)创建Kubernetes集,也可以使用GKE,AKS和EKS等云Kubernetes服务。 Rancher用户还可以导入和管理现有的Kubernetes集。
Rancher支持各类集中式身份验证系统来管理Kubernetes集。例如,大型企业的员工可以使用其公司Active Directory凭证访问GKE中的Kubernetes集。IT管理员可以在用户,组,项目,集和云中设置访问控制和安全策略。 IT管理员可以在单个页面对所有Kubernetes集的健康状况和容量进行监控。
Rancher为DevOps工程师提供了一个直观的用户界面来管理他们的服务容器,用户不需要深入了解Kubernetes概念就可以开始使用Rancher。 Rancher包含应用商店,支持一键式部署Helm和Compose模板。Rancher通过各种云、本地生态系统产品认证,其中包括安全工具,监控系统,容器仓库以及存储和网络驱动程序。下图说明了Rancher在IT和DevOps组织中扮演的角。每个团队都会在他们选择的公共云或私有云上部署应用程序。
1.2、Rancher架构
Docker是容器打包和runtime标准。开发人员从Dockerfiles构建容器镜像,并从Docker镜像仓库中分发容器镜像。Docker Hub是最受欢迎的公共镜像仓库,许多组织还设置私有Docker镜像仓库。Docker主要用于管理各个节点上的容器。
【注意】:虽然Rancher 1.6支持Docker Swarm集技术,但由于Rancher2.0基于Kubernetes调度引擎,所以Rancher2.0不再支持Docker Swarm。
Kubernetes已成为容器集管理标准,通过YAML文件来管理配置应用程序容器和其他资源。Kubernetes执行诸如调度,扩展,服务发现,健康检查,密文管理和配置管理等功能。
一个Kubernetes集由多个节点组成:
-
etcd database
通常在一个节点上运行一个etcd实例服务,但生产环境上,建议通过个或5个(奇数)以上的节点来创建ETCD HA配置。 -
Master nodes
主节点是无状态的,用于运行API Server,调度服务和控制器服务。 -
Worker nodes
工作负载在工作节点上运行。
默认情况下Master节点也会有工作负载调度上去, 可通过命令设置其不加入调度
大多数Rancher2.0软件运行在Rancher Server节点上,Rancher Server包括用于管理整个Rancher部署的所有组件。
下图说明了Rancher2.0的运行架构。该图描绘了管理两个Kubernetes集的Rancher server安装:一个由RKE创建,另一个由GKE创建。
1.2..1、Rancher API服务器
Rancher API server建立在嵌入式Kubernetes API服务器和etcd数据库之上。它实现了以下功能:
-
Rancher API服务器
Rancher API server管理与外部身份验证提供程序(如Active Directory或GitHub)对应的用户身份 -
认证授权
Rancher API server管理访问控制和安全策略 -
项目
项目是集中的一组多个命名空间和访问控制策略的集合 -
节点
Rancher API server跟踪所有集中所有节点的标识。
1.2..2、集控制和Agent
集控制器和集代理实现管理Kubernetes集所需的业务逻辑:
-
集控制器实现Rancher安装所需的全局逻辑。它执行以下操作:
-
为集和项目配置访问控制策略
-
通过调用以下方式配置集:
- 所需的Docker machine驱动程序
- 像RKE和GKE这样的Kubernetes引擎
-
-
单独的集代理实例实现相应集所需的逻辑。它执行以下活动:
-
工作负载管理,例如每个集中的pod创建和部署
-
绑定并应用每个集全局策略中定义的角
-
集与Rancher Server之间的通信:事件,统计信息,节点信息和运行状况
-
1.2..、认证代理
该认证代理转发所有Kubernetes API调用。它集成了身份验证服务,如本地身份验证,Active Directory和GitHub。在每个Kubernetes API调用中,身份验证代理会对调用方进行身份验证,并在将调用转发给Kubernetes主服务器之前设置正确的Kubernetes模拟标头。Rancher使用服务帐户与Kubernetes集通信。
二、相关术语
【注意】:主要说明的内容和Rancher 2.1平台页面内容相关。
2.1、全局层
全局层主要对Rancher server自身的基础配置,比如Rancher Server URL、登录认证等。
1. 集
全局层的集菜单,用于列出集中所有的K8S集。
2. 主机驱动
用于与三方云平台API对接的中间件程序。
. 应用商店-全局
全局层的应用商店,负责应用商店的开关与添加。
4. 用户
添加或者删除用户,或者修改用户的权限。
5. 系统设置
全局下系统的基础配置,比如系统默认镜像仓库。
6. 安全
-
角
一组权限的集合 -
Pod安全策略
Pod安全设置 -
登录认证
用户的登录访问认证
2.2、集层
1. 集
集仪表盘,显示当前集的资源状态
2. 主机
当前集中添加的所有主机
. 存储
- 存储类
- 持久卷
4. 项目与命名空间
此集拥有的项目和命名空间
5. 集成员
6. 工具
- 告警
- 通知
- 日志
- CI/CD
2.、项目层
1. 工作负载
-
工作负载服务
-
负载均衡
-
服务发现
-
数据卷
-
CI/CD
2. 应用商店-项目
. 资源
-
告警
-
证书
-
配置映射
-
日志收集
-
镜像库
-
密文
4. 命名空间
5. 项目成员
2.4、其他 (右上角登录菜单)
1. API Keys
2. 主机模板
. 喜好设定
三、Rancher v2.1.0功能列表
.1、K8S集管理
功能 | |
---|---|
多集管理 | 容器平台能同时对多个Kubernetes集进行管理,包括创建集、删除集、集搜索、为集添加主机等。每个集有自己独立的管理视图,包括控制面板、主机视图、容器视图、应用视图,可图形化显示其所包含的节点状态和容器运行状态,并可以对节点和容器操作。每个集上运行的应用和其他集隔离。 |
集基础设施管理和部署 | 容器云平台能够指定Kubernetes集的部署角,包括etcd数据节点、API Server、Controller Manager控制节点、worker计算节点等。不同集能够指定不同的容器网络模式,灵活支持目前社区主流的容器网络解决方案,包括flannel、Calico、Canal等。平台能够提供自动化部署工具,快速灵活的部署kubernetes集。 |
集管理权限设定 | 可设定每个集的用户角和权限,除默认内置角外,支持在图形界面进行细粒度的RBAC权限自定义和角创建。管理员可以创建自定义角,指定对平台内各种资源对象(包括但不限于Cluster、Pod、Deployment、ConfigMap等)的创建、删除、编辑、枚举等各种细粒度的操作权限。 |
导入外部Kubernetes集管理 | 容器云平台必须能够导入外部Kubernetes集并进行管理的功能,以满足对各种Kubernetes集统一纳管的需求。导入的Kubernetes集能够通过容器云平台界面进行统一的角管理,应用部署等各种操作。 |
Kubernetes多版本支持 | 支持Kubernetes目前的主要稳定开源版本,包括1.9、1.10、1.11、1.12。用户在部署Kubernetes集时可以根据需要选择相应的版本进行部署。 |
集升级 | 通过平台创建的Kubernetes集,集的系统软件,如Kubernetes版本、网络等系统服务软件,可通过图形界面在线升级或回退,不影响集环境中业务的使用。 |
Windows 集支持 | 可管理 Windows Kubernetes 集主机。 |
.2、多租户功能
功能 | |
---|---|
基于独立集的多租户支持 | 容器云平台支持基于独立集的多租户隔离,可以为不同租户创建并使用独立的Kubernetes集。各集可以按需配置独立的管理员、用户及自定义角,彼此之间完全隔离。 |
基于共享集的多租户支持 | 容器云平台应支持集内部的多租户隔离,集内租户支持设置管理员、用户及自定义RBAC角,以满足权限管理需求。当基于单个集实现多租户隔离时,同一个集内部的租户应用彼此隔离,单个租户内部的用户仅能查看和管理自己租户内部的应用,且不同租户应用容器之间需要实现网络隔离。 |
租户权限管理 | 支持租户内用户角的管理和设置,支持RBAC自定义创建租户内用户角和权限,以实现灵活的权限管理。 |
.、容器主机管理
功能 | |
---|---|
纳管虚拟机 | 支持以图形界面在线添加虚拟机主机,新的主机被添加成功后将会显示活动状态,并可在图形界查看主机的具体配置信息,包括但不限于主机名,IP地址,docker引擎版本号,操作系统版本,CPU/内存/磁盘配置信息等。 |
纳管物理机 | 支持以图形界面在线添加物理机主机,新的主机被添加成功后将会显示活动状态,并可在图形界面看到主机的具体配置信息,包括但不限于主机名,IP地址,docker引擎版本号,操作系统版本,CPU/内存/磁盘配置信息等。 |
内置Docker Machine驱动管理 | 内置Docker Machine驱动,可以对各类Docker的machine drivers进行配置和管理,方便用户对接各类云平台、vSphere环境、OpenStack环境等。 |
主机分组管理 | 支持对不同的主机进行分组管理,可以使用标签(或类似方式)标识,如按物理区域、安全区域、组织架构、项目、应用划分打标签逻辑分组,支持多标签。 |
查看主机性能状态信息 | 系统提供便捷的图形化界面,以实现对容器主机相关性能和状态信息的监控和查看。可以查看的主机性能信息包括,CPU、内存、网络和磁盘,容器分配情况、端口使用情况、标签、存储等关键信息。 |
驱散容器功能 | 在对主机进行维护时,例如升级内核,硬件维护等,这个功能首先会禁止新的容器调度到这个节点,然后会对该节点上的容器有规则的进行驱散。完成主机维护后,可以恢复节点功能。 |
容器主机故障自动检测和自动应用漂移 | 当某个主机故障时,无法和管理节点时间正常通信时,则该主机将被表示为不可用状态,并在图形界面显示。该状态下管理节点将视图重连该主机,同时会将该主机上运行的容器自动漂移到其他正常主机节点,以保证该情况下相关容器的服务访问正常。 |
.4、容器调度与管理
功能 | |
---|---|
容器生命周期管理 | 平台提供便捷操作容器服务图形化界面,可以编辑容器信息,可以启动、重启、停止、删除、克隆容器。 并可在图形界面上展示容器的信息和运行状态,包括健康状态,容器名、IP地址、所在主机、镜像和命令等 |
查看容器状态和性能 | 管理平台可以通过图形界面查看容器关键性能和配置信息,可以查看标签、存储卷、端口映射、实时监控信等关键信息,包括但不限于: CPU、内存、网络和磁盘、容器IP、Image、所使用主机等情况。 |
容器控制台 | 图形化界面可以直接调出该容器控制台,管理界面可以操作容器的CLI,方便后台控制人员执行命令行操作容器。 |
查看容器日志 | 管理平台图形化界面可以直接展示容器日志信息,并实时刷新。 |
指定容器运行的主机 | 支持标签或其它方式唯一限定容器运行主机。系统提供图形化界面,设置容器编排调度规则。支持亲和性/反亲和性容器调度设置,系统提供图形化界面,设置容器编排调度规则,支持基于标签的亲和性/反亲和性调度,支持全部满足/部分等过滤条件。 |
.5、容器应用管理
功能 | |
---|---|
容器应用堆栈管理 | 支持使用应用模板一键创建容器应用栈。可以从应用集合,服务集合的角度对容器进行集中的管理和配置。 |
应用管理视图 | 支持以不同方式查看、展现应用容器。至少支持根据命令空间amespace、应用分类、容器运行节点、列表等方式展示容器列表。 |
通过上传编排文件直接部署应用 | 支持通过上yaml编排 文件,一键部署和启动应用。极大提高部署效率,降低部署难度和时间。 |
查看、下载编排配置文件 | 支持实时查看kubernetes编排文件配置内容。支持下载和保存kubernetes编排文件,方便配置编辑、保存、重新部署和故障恢复。 |
统一调用非容器化服务或系统 | 管理平台可方便的实现容器访问外部的应用和服务,容器可以访问如不适合进行容器化的大型应用(如MySQL/Oracle数据库)。支持通过图形界面创建相应的服务发现记录,包括外部IP地址、外部主机名、DS别名等多种方 |
.6、容器管理
功能 | |
---|---|
项目管理功能 | 项目是一个或多个 namespace 集合,集管理员和项目管理员可以从项目层级设置配额。可以配置该项目的CPU,内存,存储,Pod数量等等的配额。同时,在每个项目里,管理员也可以对每个namespace的配额进行控制。 |
容器服务健康检查 | 系统内置对容器服务的健康检查功能,支持在图形界面进行以下健康检查设置,包括: • 可以设定基于HTTP的健康检查。 • 可以设定基于TCP的健康检查。 • 可以设定基于命令行命令的健康检查。 • 可以设定健康检查的颗粒度,如检查次数、间隔、超时时间等。 支持通过图形界面对容器设置不同的Liveness Check和Readniess check规则。 |
容器服务伸缩 | 提供图形界面,可以便捷手动进行容器扩容和收缩。还提供容器基于CPU、内存等资源使用率状态数值触发的自动扩容缩容。 |
容器升级和回滚功能 | 提供图形界面,可以便捷实现容器的升级和回滚操作。部署应用时可以设置应用的升级策略,包括新旧容器启停顺序、批量大小、最小就绪时间等等。 |
支持灰度发布 | 可以实现灰度升级,升级过程中服务不中断。升级后,图形界面提供UI回滚到之前版本。当部署之前包括多个版本时,可提供多个版本进行回滚选择。 |
伴随容器服务 | 可以为主容器提供伴随容器服务,在进行复杂应用部署时,可以提供支持。支持通过图形界面创建伴随容器。 1.可以为主容器创建伴随容器。 2.伴随容器可以和主容器同时启动和同时关闭。 .伴随容器可以和主容器共享容器数据卷和容器网络。 |
容器可用性保障机制 | 可以设定服务容器的需要保证的有效数量,当系统故障时,平台可保证有效的的容器数量。可以保证应用服务维持一定的容器数量,用来保证服务正常。服务故障时可以重新创建容器,保证服务正常。 |
.7、容器网络管理
功能 | |
---|---|
容器网络访问策略控制 | 容器网络支持多租户隔离和策略控制,同集内部的不同租户可以实现网络的隔离和限制。 |
支持容器基本网络模式 | 支持容器共享主机网络方式,可以在管理界面上设置容器网络为主机共享网路模式,容器共享主机网络namespace,使用主机网卡进行容器内外部通信。 |
支持高级网络模式 | 支持多种网络模式,容器平台提供网络插件,实现对容器IP和容器网络的管理,支持容器网络IP的自定义和跨主机容器网络互访。至少同时支持Flannel/Calico、Canal主流网络技术。 |
.8、负载均衡服务
功能 | |
---|---|
内置负载均衡服务 | 内置容器负载均衡服务。通过图形界面创建负载均衡,可以进行端口指定、服务指定、SSL证书、会话保持、自定义负载均衡配置、标签及调度等各项功能。 |
可定义负载均衡会话保持策略 | 内置负载均衡服务可以配置可以配置并使用基于cookie的会话保持功能。 |
支持SSL终结功能 | 内置负载均衡服务可以配置可以配置并使用基于HTTPS的SSL终结功能。 |
负载均衡后端支持 | 提供图形界面,负载均衡后端同时支持Kubernetes Service对象和Pod直连,以支持话保持设置。 |
支持高级访问路由功能 | 提供图形界面,可以配置负载均衡高级路由功能,实现根据URL头信息、Domain name、访问路径等不同实现七层信息的转发。 |
.9、容器存储服务
功能 | |
---|---|
存储类型支持 | 容器云平台应支持Kubernetes社区版本内置支持的所有存储类型,包括FC、iSCSI、Ceph、Cinder、GlusterFS、AzureDisk、AWS EBS、ScaleIO等等。 方案提供方应该能够提供自主产权且开源的分布式块存储方案,以满足业务上对持久化存储的要求 |
Persistent Volume支持 | 支持通过图形界面创建Persistent Volume,支持的类型包括上述所列Kubernetes标准版本内置的存储类型。用户可以通过图形界面方便的设置相关存储参数。PV创建后可以在应用部署时通过图形界面创建PVC使用。 |
Storage Class支持 | 支持通过图形界面创建Storage Class以满足存储动态自动创建需求,支持的类型包括上述所列Kubernetes标准版本内置的存储类型。用户可以通过图形界面方便的设置相关存储参数。Storage Class创建后可以在应用部署时通过图形界面使用。 |
超融合存储支持 | 提供超融合存储解决方案,支持基于容器集宿主机本地磁盘构建存储池并与容器集进行集成。容器可利用本集内部的存储池实现数据的持久化和高可用。 |
.10、系统监控及日志
功能 | |
---|---|
系统监控 | 支持集和集内部租户不同层级的监控设置,监控内容至少应包括: • 系统组件健康状态,如etcd、API Server等 • 系统部署事件,如创建Deployment、Service对象等。 • 主机资源利用率,如CPU、内存等 • 应用可用状态,如Deployment中可用容器低于一定比例等。 |
系统告警 | • 需要提供系统内建的告警系统 • 告警系统支持通过图形界面设置告警目标,不同告警规则可按需设置告警目标。告警目标应支持多种企业级集成,至少要同时支持对、Slack、PageDuty系统的支持。同时需要提供 Webhook扩展方式,实现对其他告警方式的支持和扩展。 • 告警规则支持临时暂停、恢复,初始发送延迟、发送间隔等高级设置,以按需控制告警信息的发送。 |
系统日志 | 平台提供日志收集代理,支持自动收集容器和应用程序日志。 • 日志系统能够在集层面、项目层面分别对应不同的日志平台,以满足用户部门对日志功能使用的灵活性,以满足不同应用场景需求。 |
日志平台集成 | • 日志代理应支持业内主流日志平台集成,可以同时支持对ElasticSearch、Kafka、Splunk和Syslog的对接,用户在图形界面即可设置与上述平台的自动化集成对接。 • 日志系统能够在集层面、项目层面分别对应不同的日志平台,以满足用户部门对日志功能使用的灵活性 |
.11、应用商店管理
功能 | |
---|---|
容器应用商店 | 容器平台支持容器化应用商店,实现容器应用的模板化展示和快速部署。应用商店应支持Kubernetes社区的Helm Charts模板。 |
企业级应用商店展示、组织及管理 | 提供图形界面,可以查看应用商店、实现应用模板的组织和管理。支持搜索和分类选择展示。 |
支持用户交互的参数配置 | 在应用商店配置页面中可配置模板版本和自定义参数,在配置过程中可以通过界面进行自定义配置。在启动应用过程中,进行交互的参数可以自定义。同时不同的应用可以定义不同的参数。支持在应用商店模板中定义参数的类型、提示信息、默认值等相关设置,应用部署展示UI可根据参数定义动态生成并展示相关页面。 |
支持应用发布版本管理 | 可以在应用商店中选择应用的不同发布版本,并启动运行。应用商店出现该应用的新版本时,可自动提示正在运行的应用实例有新版本可以升级。 |
支持部署私有隔离的应用商店 | 管理平台可以设置不同的应用商店路径。每个路径都可以指向一个独立的应用商店,可以设置多个应用商店,应用可以放在不同的应用商店中进行隔离管理。 |
.12、系统管理及安全
功能 | |
---|---|
认证方式 | 容器云平台支持多种认证集成方式,除本地认证外,需支持主流的认证系统如微软活动目录、OpenLDAP、Github、Keycloak等,支持自定义认证插件实现集成认证。 |
容器安全策略 | 容器云平台支持设置容器安全策略,对创建的容器进行安全管控,例如限制启动特权容器、限制容器使用主机IPC模式、主机网络模式,限制容器可以映射的主机数据卷路径等。容器安全策略应当支持绑定到特定集和集内部的多租户隔离实现。 |
API秘钥管理 | 容器云平台支持为不同用户创建独立的API秘钥,API秘钥仅当首次创建时可查看。且支持进行API秘钥自动过期设置,以确保系统安全。 |
配置映射(configmap) | 提供图形化界面,配置configmap以供服务调用。 |
密文管理(secret) | 提供图形化界面,配置secret以供服务调用。 |
证书管理 | 平台提供图形界面,可以对SSL证书进行管理。包括导入证书、删除证书等。证书可用于应用访问SSL加密。 |
.1、镜像库功能
功能 | |
---|---|
对接外部私有镜像仓库 | 提供图形界面,设置连接外部的镜像仓库,可设置外部仓库的认证信息实现认证集成。可以设置默认镜像库,设置镜像库白名单等。 |
项目管理 | 支持公有和私有项目类型: • 公有: 公有项目中的镜像所有用户均有下载权限; • 私有: 私有项目中的镜像只有项目内的成员有相应的操作权限; 新建项目: 每当新建一个用户时,系统都会默认创建一个以该用户的用户名为项目名称的私有项目;系统管理员可以创建新的项目,项目详情页,可查看镜像和访问控制列表。 搜索项目: 支持输入关键字进行项目搜索; |
镜像生命周期管理 | 镜像生命生命周期主要功能如下所示: 镜像下载: 若镜像为私有镜像,用户至少要获得对应项目的下载权限才能成功下载镜像; 镜像上传: 用户首先要拥有对应项目的提交权限才能在该项目下上传镜像; 镜像修改: 用户可以修改镜像的描述信息,以及dockerfile; 镜像复制: 实现镜像在不同项目间的复制,用户至少必须同时拥有源项目与目标项目的提交权限; 镜像删除: 在镜像列表可以选择删除镜像的某个版本,也可以直接删除整个镜像。 |
异地镜像仓库同步 | 支持设置好同步关系,并且多镜像仓库之间镜像自动同步。镜像同步的最小颗粒度是容器项目。 |
.14、系统集成支持
功能 | |
---|---|
支持通过纯命令行方式进行配置和管理 | 容器平台提供命令行管理工具,可以通过命令行对容器管理平台进行配置和管理。 方便运维人员开发自动化运维脚本。 |
提供API接口 | 容器云平台应支持Restful API调用,以方便的与内部系统进行集成。API接口需求如下: *支持页面直接展现API调用内容 *所有页面上的操作都能通过API支持 支持基于多租户API调用的访问授权。 针对不同的用户,都可以生成Access key和Secret key秘钥对,在获取正确的秘钥对后方能对API接口进行访问。 |
容器操作系统 | 容器云厂商在提供容器平台的同时,还拥有知名的自主品牌的容器化操作系统平台,以实现容器宿主机的快速创建和部署,降低系统资源消耗和受攻击面。 |
.15、CI/C功能
功能 | |
---|---|
同时支持多源码管理 | CI/CD支持公有Github、Gitlab和私有Gitlab代码库的对接。 |
自动部署镜像 | 打通了从代码提交,自动测试,自动构建镜像,自动部署镜像的全流程。 |
与应用商店集成 | 打通与应用商店的集成,可根据CI/CD的产物动态更新应用商店中的配置文件,应用商店提示有更新可用。 |
灵活的流程控制 | 可以在最初的设置阶段配置符合某既定要求的表达式或标签,而系统会在执行阶段根据执行情况自动跳过不符合该表达式或标签的阶段或步骤。如此一来,不同的代码分支可以自动匹配不同的CI流程,从而支持较为复杂的流程控制。 |
四、快速入门
【注意】:本入门指南的目的是让你快速的运行一个Rancher2.0环境,它不适用于生产。有关更全面的说明,请查阅Rancher安装.
本章节将指导完成:
- 安装Rancher v2.0 ;
- 创建第一个集;
- 部署一个应用程序,如ginx;
4.1、入门须知
- 熟悉Linux基础命令;
- 了解SSH使用方法,了解公钥/私钥工作原理;
- 熟悉Docker基本使用方法及基础命令,比如:容器日志查看;
- 了解SSL证书使用方法;
- 了解负载均衡工作原理(L4/L7);
- 了解域名解析原理;
- 了解K8S基本概念
4.2、配置Linux主机
- Ubuntu 16.04 (64位)
- Centos/RedHat Linux 7.5(64位)
- RancherOS 1..0(64位)
- CPU: 2C
- 内存: 4GB > 注意: 此配置仅为满足小规模测试环境的最低配置。如用于生产,请参考基础配置要求。
- 软件: Docker
- 支持的Docker版本:
- 1.12.6
- 1.1.1
- 17.0.2
4.、安装Rancher
- 要想在主机上安装Rancher,需要先登录到主机上,接着进行以下步骤:
- 通过shell工具(例如PuTTy或远程终端连接)登录到主机
在shell中执行以下命令:
sudo docker run -d --restart=unless-stopped -p 80:80 -p 44:44 rancher/rancher
4.4、登录Rancher
登录并开始使用Rancher。登录后,你将进行一些一次性配置。
- 打开浏览器,输入https://<server_ip>,server_ip替换为运行Rancher容器主机的ip;
- 因为是自动使用的自签名证书,在第一次登录会提示安全授信问题,信任即可;
- 设置管理员密码
第一次登录会要求设置管理员密码,默认管理员账号为: admin- 设置Rancher Server URL
这个Rancher Server URL是agent节点注册的地址,需要保证这个地址能够被其他主机访问
4.5、创建K8S集
现在创建第一个Kubernetes集,可以使用自定义选项。你可以添加云主机、内部虚拟机或物理主机作为集节点,节点可以运行任何一种或多种主流Linux发行版:
- 页面右下角可以切换语言;
- 在全局视图下,点击菜单中的集 , 并点击添加集;
- 选择 Custom,并设置集名称,其他参数可不用修改,点击下一步;
- 选择节点运行的角
默认会勾选Worker角,根据需要可以一次勾选多种角。比如,假设我只有一个节点,那就需要把所有角都选择上,选择后上面的命令行会自动添加相应的命令参数;- 如果是云主机,需要添加主机的内网地址和对应的公网地址,如果是没有公网的云主机,可以跳过这步;
- 其他参数保持默认,点击命令行右侧的复制按钮,复制命令参数
如果是多台主机,根据角的不同,需要复制多次- 登录预添加集的主机,执行以上复制的命令;
- 在主机上执行完命令后,最后点击完成;
- 回到全局视图,可以查看集的部署状态;
- 点击集名称,进入集视图
- 点击菜单栏主机按钮
- 集创建完成
- 集创建完成后,默认会生成Default项目,点击Default切换到项目视图;
4.6、部署工作负载
工作负载是一个对象,包括pod以及部署应用程序所需的其他文件和信息。我们以nginx作为例如:
- 在Default视图下,点击工作负载—部署服务
- 在部署工作负载页面,设置工作负载名称、副本数量、镜像名称、命名空间、端口映射,其他参数保持默认,最后点击启动;
- 部署完成
- 通过1174端口去访问nginx服务。
五、安装
5.1、基础环境配置
5.1.1、主机配置
硬件需求根据Rancher部署的规模进行扩展。根据需求配置每个节点。
部署大小 | 集(个) | 节点(个) | vCPU | 内存 |
---|---|---|---|---|
小 | 不超过5 | 最多50 | 4C | 16GB |
中 | 不超过100 | 最多500 | 8C | 2GB |
5.1.1.2、操作系统选择
- Ubuntu 16.04(64位)
- Centos/RedHat Linux 7.5(64位)
- RancherOS 1..0(64位)
- Windows Server 180(64位)
5.1.1.、Docker版本选择
支持的Docker版本
- 1.12.6
- 1.1.1
- 17.0.2
- 17.06 (for Windows)
5.1.1.4、主机名配置
因为K8S的规定,主机名只支持包含 - 和 .(中横线和点)两种特殊符号,并且主机名不能出现重复。
5.1.1.5、Hosts
配置每台主机的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。
5.1.1.6、CentOS关闭selinux
sudo sed -i s/SELIUX=enforcing/SELIUX=disabled/g /etc/selinux/config
5.1.1.7、关闭防火墙(可选)或者放行相应端口
对于刚刚接触Rancher的用户,建议在关闭防火墙的测试环境或桌面虚拟机来运行rancher,以避免出现网络通信问题。
- 关闭防火墙
1、CentOSsystemctl stop firewalld.service && systemctl disable firewalld.service
2、Ubuntuufw disable
- 端口放行
端口放行请查看端口需求
5.1.1.8、配置主机时间、时区、系统语言
- 查看时区
date -R 或者 timedatectl
- 修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 修改系统语言环境
sudo echo LAG=en_US.UTF-8 >> /etc/profile;source /etc/profile
- 配置主机TP时间同步
5.1.1.9、Kernel性能调优
【注意】: 数值根据实际环境自行配置cat >> /etc/<<EOF net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.default.gc_thresh1=4096 net.default.gc_thresh2=6144 net.default.gc_thresh=8192 EOF
最后执行保存配置
sysctl -p
5.1.1.10、内核模块
加载以下模块
modprobe br_netfilter modprobe ip6_udp_tunnel modprobe ip_set modprobe ip_set_hash_ip modprobe ip_set_hash_net modprobe iptable_filter modprobe iptable_nat modprobe iptable_mangle modprobe iptable_raw modprobe nf_conntrack_netlink modprobe nf_conntrack modprobe nf_conntrack_ipv4 modprobe nf_defrag_ipv4 modprobe nf_nat modprobe nf_nat_ipv4 modprobe nf_nat_masquerade_ipv4 modprobe nfnetlink modprobe udp_tunnel modprobe VETH modprobe VXLA modprobe x_tables modprobe xt_addrtype modprobe xt_conntrack modprobe xt_comment modprobe xt_mark modprobe xt_multiport modprobe xt_nat modprobe xt_recent modprobe xt_set modprobe xt_statistic modprobe xt_tcpudp
5.1.1.11、ETCD集容错表
建议在ETCD集中使用奇数个成员,通过添加额外成员可以获得更高的失败容错。
集大小 | MAJORITY | 失败容错 |
---|---|---|
1 | 1 | 0 |
2 | 2 | 0 |
2 | 1 | |
4 | 1 | |
5 | 2 | |
6 | 4 | 2 |
7 | 4 | |
8 | 5 | |
9 | 5 | 4 |
如果需要详细了解docker有他相关操作,请详见《中兴飞流研发与交付部--docker在Ubuntu14.0.4 安装配置 v1.5》。以下操作步骤均在root用户下操作,2个版本任选其一
5.1.2.1、Ubuntu安装Docker
5.1.2.1.1、获取docker_17.0.2~ce的deb下载地址
1、进入
2、在页面中会看到ubuntu不同版本的代号,选择自己对应的版本进入,此次安装的是ubuntu16.04,因此选择xenial连接进入
、然后一路选择xenial/pool/stable/amd64/,stable是稳定版本,ubuntu需要的是amd64的软件格式
4、在
5、右键点击在所需要的版本上,选择复制连接地址,即可得到下载地址路径,如下:
.0.2~ce-0~ubuntu-xenial_amd64.deb
5.1.2.1.2、下载安装docker-ce_17.0.2~ce版本
1、检查内核是否符合要求,Docker 要求 Ubuntu 系统的内核版本高于 .10 ,建议在Ubuntu14.04版本
root@duke:/var/cache/apt/archives# uname -r
.1.0-15-generic
2、安装docker
root@jetflow2:~/docker# wget .0.2~ce-0~ubuntu-xenial_amd64.deb --2017-12-19 19:0:29-- .0.2~ce-0~ubuntu-xenial_amd64.deb 正在解析主机 download.docker (download.docker)... 52.85.158.200, 52.85.158.22, 52.85.158.109, ... 正在连接 download.docker (download.docker)|52.85.158.200|:44... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 1918424 (18M) [application/x-debian-package] 正在保存至: “docker-ce_17.0.2~ce-0~ubuntu-xenial_amd64.deb” docker-ce_17.0.2~ce-0~ubuntu-xenial_ 100%[======================================================================>] 18.29M 26.0KB/s in 11m 5s 2017-12-19 19:42:05 (27.0 KB/s) - 已保存 “docker-ce_17.0.2~ce-0~ubuntu-xenial_amd64.deb” [1918424/1918424]) root@jetflow2:~/docker# dpkg -i docker-ce_17.0.2~ce-0~ubuntu-xenial_amd64.deb
、启动docker 后台服务
root@duke: service docker start
start: Job is already running: docker
5.1.2.1.、获取docker-1.1.1的tgz包下载地址
1、进入
2、点击按钮,进入以页面就可以根据选择选取版本
、当前要选择docker-ce_17.0.2~ce或者docker-1.1.1,因此经过翻页后,到对应版本,点击进入页面,到downloads信息后,就可以ubuntu系统上进行下载
4、Docker的tgz包加压后,并不能加载到系统服务中,所以不太推荐此种方式安装,建议还是采用deb包安装方式,可以省去不必要的麻烦
5.1.2.1.4、下载docker-1.1.版本
1、检查内核是否符合要求,Docker 要求 Ubuntu 系统的内核版本高于 .10 ,建议在Ubuntu14.04版本
root@duke:/var/cache/apt/archives# uname -r
.1.0-15-generic
2、安装docker
root@jetflow2:~/docker# wget .1. --2017-12-20 1:57:2-- .1. 正在解析主机 get.docker (get.docker)... 54.182.1.40, 54.182.1.6, 54.182.1.148, ... 正在连接 get.docker (get.docker)|54.182.1.40|:44... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 27851024 (27M) [application/x-tar] 正在保存至: “docker-1.1.” docker-1.1. 100%[======================================================================>] 26.56M 56.1KB/s in 9m 5s 2017-12-20 14:07:00 (47. KB/s) - 已保存 “docker-1.1.” [27851024/27851024])
5.1.2.2、Centos安装Docker
- 修改系统源
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak cat > /etc/yum.repos.d/CentOS-Base.repo << EOF[base] name=CentOS-$releasever - Base - mirrors.aliyun failovermethod=priority baseurl=/$releasever/os/$basearch//$releasever/os/$basearch//$releasever/os/$basearch/ gpgcheck=1 gpgkey= updates [updates] name=CentOS-$releasever - Updates - mirrors.aliyun failovermethod=priority baseurl=/$releasever/updates/$basearch//$releasever/updates/$basearch//$releasever/updates/$basearch/ gpgcheck=1 gpgkey= packages that may be useful [extras] name=CentOS-$releasever - Extras - mirrors.aliyun failovermethod=priority baseurl=/$releasever/extras/$basearch//$releasever/extras/$basearch//$releasever/extras/$basearch/ gpgcheck=1 gpgkey= packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - mirrors.aliyun failovermethod=priority baseurl=/$releasever/centosplus/$basearch//$releasever/centosplus/$basearch//$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey= - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib - mirrors.aliyun failovermethod=priority baseurl=/$releasever/contrib/$basearch//$releasever/contrib/$basearch//$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=
- Docker-ce安装
因为CentOS的安全限制,通过RKE安装K8S集时候无法使用root账户。所以,建议CentOS用户使用非root用户来运行docker,不管是RKE还是custom安装k8s,详情查看无法为主机配置SSH隧道。# 添加用户(可选) sudo adduser `<new_user>` # 为新用户设置密码 sudo passwd `<new_user>` # 为新用户添加sudo权限 sudo echo <new_user> ALL=(ALL) ALL >> /etc/sudoers # 卸载旧版本Docker软件 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \container* # 定义安装版本 export docker_version=17.0.2 # step 1: 安装必要的一些系统工具 sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo .repo # Step : 更新并安装 Docker-CE sudo yum makecache all version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk {print $2} ) sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version} # 如果已经安装高版本Docker,可进行降级安装(可选) yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version} # 把当前用户加入docker组 sudo usermod -aG docker `<new_user>` # 设置开机启动 sudo systemctl enable docker
5.1.2.、Docker配置
对于通过systemd来管理服务的系统(比如CentOS7.X、Ubuntu16.X), Docker有两处可以配置参数: 一个是docker.service服务配置文件,一个是Docker daemon配置文件daemon.json。
-
docker.service
对于CentOS系统,docker.service默认位于/usr/lib/systemd/system/docker.service;对于Ubuntu系统,docker.service默认位于/lib/systemd/system/docker.service -
daemon.json
【注意】: 以下说明均基于systemd,并通过/etc/docker/daemon.json来修改配置。
daemon.json默认位于/etc/docker/daemon.json,如果没有可手动创建,基于systemd管理的系统都是相同的路径。通过修改daemon.json来改过Docker配置,也是Docker官方推荐的方法。
- 配置镜像下载和上传并发数
从Docker1.12开始,支持自定义下载和上传镜像的并发数,默认值上传为个并发,下载为5个并发。通过添加”max-concurrent-downloads”和”max-concurrent-uploads”参数对其修改:max-concurrent-downloads: , max-concurrent-uploads: 5
-
配置镜像加速地址
Rancher从v1.6.15开始到v2.x.x,Rancher系统相关的所有镜像(包括1.6.x上的K8S镜像)都托管在Dockerhub仓库。Dockerhub节点在国外,国内直接拉取镜像会有些缓慢。为了加速镜像的下载,可以给Docker配置国内的镜像地址。
编辑/etc/docker/daemon.json加入以下内容{ registry-mirrors: [/,https://IP:PORT/] }
【注意】: 可以设置多个registry-mirrors地址,以数组形式书写,地址需要添加协议头(https或者http)。 -
配置insecure-registries私有仓库
Docker默认只信任TLS加密的仓库地址(https),所有非https仓库默认无法登陆也无法拉取镜像。insecure-registries字面意思为不安全的仓库,通过添加这个参数对非https仓库进行授信。可以设置多个insecure-registries地址,以数组形式书写,地址不能添加协议头(http)。
编辑/etc/docker/daemon.json加入以下内容:{ insecure-registries: [192.168.1.100,IP:PORT] }
-
配置Docker存储驱动
OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)。
先决条件:- overlay2: Linux内核版本4.0或更高版本,或使用内核版本.10.0-514的RHEL或CentOS。
- overlay: 主机Linux内核版本.18
- 支持的磁盘文件系统
- ext4(仅限RHEL 7.1)
- xfs(RHEL7.2及更高版本),需要启用d_type=true。 >具体详情参考 Docker Use the OverlayFS storage driver
编辑/etc/docker/daemon.json加入以下内容{ storage-driver: overlay2, storage-opts: [_kernel_check=true] }
-
配置日志驱动
容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。限制单个日志文件为100M,最多产生个日志文件{ log-driver: json-file, log-opts: {max-size: 100m,max-file: } }
5.1.2.4、Ubuntu\Debian系统 ,docker info提示WARIG: o swap limit support
Ubuntu\Debian系统下,默认cgroups未开启swap account功能,这样会导致设置容器内存或者swap资源限制不生效。可以通过以下命令解决:
sudo sed -i s/GRUB_CMDLIE_LIUX=/GRUB_CMDLIE_LIUX=cgroup_enable=memory swapaccount=1 /g /etc/default/grub sudo update-grub【注意】:
通过以上命令可自动配置参数,如果/etc/default/grub非默认配置,需根据实际参数做调整。
【提示】:
以上配置完成后,建议重启一次主机。
5.2、自签名ssl证书
5.2.1.1、创建root CA私钥
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 65 -out
执行步骤如下:
root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 65 -out Generating a 4096 bit RSA private key ............................................. ............................................. writing new private key to ca.key ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished ame or a D. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter . , the field will be left blank. ----- Country ame (2 letter code) [AU]:C State or Province ame (full name) [Some-State]:anJing Locality ame (eg, city) []:anJing Organization ame (eg, company) [Internet Widgits Pty Ltd]:rancher Organizational Unit ame (eg, section) []:info technology Common ame (e.g. server FQD or YOUR name) []:duke Email Address []:hzw97@126
5.2.1.2、为服务端(web)生成证书签名请求文件
如果你使用类似demo.rancher的FQD域名访问,则需要设置demo.rancher作为C;如果你使用IP地址访问,C则为IP地址:
openssl req -newkey rsa:4096 -nodes -sha256 -keyout demo.rancher.key -out demo.
或者
openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0.
执行步骤如下:
【注意】:Commone ame一定要是你要授予证书的FQD域名或主机名,并且不能与生成root CA设置的Commone ame相同。
challenge password可以不填。
root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0. Generating a 4096 bit RSA private key .................................................................... .................................................................... writing new private key to 192.168.0.2.key ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished ame or a D. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter . , the field will be left blank. ----- Country ame (2 letter code) [AU]:C State or Province ame (full name) [Some-State]:anJing Locality ame (eg, city) []:anJing Organization ame (eg, company) [Internet Widgits Pty Ltd]:RACHER Organizational Unit ame (eg, section) []:info technology Common ame (e.g. server FQD or YOUR name) []:192.168.0.2 Email Address []:hzw97@126Please enter the following extra attributes to be sent with your certificate request A challenge password []:附属属性修改密码,可以不填 An optional company name []:附属属性另一个公司名称,可以不填
5.2.1.、用1.1创建的CA证书给1.2生成的签名请求进行签名
openssl x509 -req -days 65 -in 192.168.0. -CA -CAkey ca.key -CAcreateserial -out 192.168.0.
执行步骤如下:
root@duke:~# openssl x509 -req -days 65 -in 192.168.0. -CA -CAkey ca.key -CAcreateserial -out 192.168.0.
Signature ok
subject=/C=C/ST=anJing/L=anJing/O=RACHER/OU=info technology/C=192.168.0.2/emailAddress=hzw97@126
Getting CA Private Key
5.2.1.4、使用IP进行签名
如果你使用IP,例如192.168.0.2来连接,则可以改为运行以下命令
echo subjectAltame = IP:192.168.0.2 > extfilef
openssl x509 -req -days 65 -in 192.168.0. -CA -CAkey ca.key -CAcreateserial -extfile extfilef -out 192.168.0.
执行步骤如下:
【注意】:subjectAltame后的IP不需添加端口。root@duke:~# echo subjectAltame = IP:192.168.0.2 > extfilef
root@duke:~# openssl x509 -req -days 65 -in 192.168.0. -CA -CAkey ca.key -CAcreateserial -extfile extfilef -out 192.168.0.
Signature ok
subject=/C=C/ST=anJing/L=anJing/O=RACHER/OU=info technology/C=192.168.0.2/emailAddress=hzw97@126
Getting CA Private Key
5.2.1.5、检查文件
经过上面步骤操作后,会生成、ca.srl、ca.key、192.168.0.、192.168.0.2.key、192.168.0.、extfilef这几个文件。
执行步骤如下:
root@duke:~# ls
192.168.0. 192.168.0.2.key ca.srl docker-1.1. kubectl shipyard var 模板 图片 下载 桌面
192.168.0. anaconda ca.key docker extfilef mapd-docker-storage tigervncserver_1.6.80-4_amd64.deb 公共的 视频 文档 音乐
复制上面章节生成的密钥到指定存储路径
cp 192.168.0. 192.168.0.2.key /data/cert cd /data/cert cp 192.168.0. 192.168.0.2.pem cp ca.pem cp 192.168.0.2.key 192.168.0.2_key.pem
5.、安装Rancher并配置SSL证书
Rancher安装可以使用自己生成的自签名证书。
先决条件:
- 使用OpenSSL或其他方法创建自签名证书。
- 这里的证书不需要进行base64加密。
- 证书文件必须是PEM格式。
- 在你的证书文件中,包含链中的所有中间证书。有关示例,请参考SSL常见问题/故障排除。
你的Rancher安装可以使用你提供的自签名证书来加密通信。创建证书后,运行docker命令时把证书文件映射到容器中。
docker run -d --restart=unless-stopped \-p 80:80 -p 44:44 \-v /home/rancher/log:/var/log/auditlog \-e AUDIT_LEVEL= \-e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \-e AUDIT_LOG_MAXAGE=20 \-e AUDIT_LOG_MAXBACKUP=20 \-e AUDIT_LOG_MAXSIZE=100 \-v /data/cert/pem/192.168.0.2.pem:/etc/rancher/ssl/cert.pem \-v /data/cert/pem/192.168.0.2_key.pem:/etc/rancher/ssl/key.pem \-v /data/cert/pem/ca.pem:/etc/rancher/ssl/cacerts.pem \rancher/rancher:latest
[参考文档]:
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 13 条评论) |
本站网友 今晚的月色真美 | 16分钟前 发表 |
/var/cache/apt/archives# uname -r.1.0-15-generic 2 | |
本站网友 夏商 | 23分钟前 发表 |
软件需求 | |
本站网友 重庆市急救中心 | 14分钟前 发表 |
它实现了以下功能 | |
本站网友 深圳二手房房价 | 14分钟前 发表 |
Rancher包含应用商店,支持一键式部署Helm和Compose模板 | |
本站网友 innovator | 5分钟前 发表 |
/etc/rancher/ssl/key.pem \-v /data/cert/pem/ca.pem | |
本站网友 吟风弄月 | 16分钟前 发表 |
~# echo subjectAltame = IP | |
本站网友 首旅建国 | 29分钟前 发表 |
不管是RKE还是custom安装k8s | |
本站网友 管易通破解版 | 29分钟前 发表 |
.12 | |
本站网友 甲型 | 27分钟前 发表 |
OpenStack环境等 | |
本站网友 不良贷款比率 | 30分钟前 发表 |
应用划分打标签逻辑分组,支持多标签 | |
本站网友 高天宝 | 14分钟前 发表 |
自签名ssl证书 5.2.1 | |
本站网友 青春痘中医 | 7分钟前 发表 |
.1 |