华为云用户手册

  • 用量统计 此处默认统计近1小时、近8小时和近24小时的各维度资源用量。如需查看更多监控信息,请单击“查看全部监控”,跳转至“仪表盘”页面,相应指导请参见仪表盘。 您可以将鼠标悬停在图表上,以便查看每分钟的监控数据。 CPU 单位时间内集群CPU使用情况的统计。 图4 CPU 内存 单位时间内集群内存使用情况的统计。 图5 内存 网络 容器网络流量,用于监控容器的网络负载情况,以及容器之间的网络通信情况。 图6 网络 网络丢包率 数据包丢失部分与所传数据包总数的比值。 图7 网络丢包率 PVC存储状态 PVC和PV的绑定情况。 图8 PVC存储状态 Pod状态趋势 实时监控集群Pod的状态。 图9 Pod状态趋势 Pod总重启次数趋势 近5分钟的集群的Pod重启次数总和。 图10 Pod总重启次数趋势 节点状态趋势 实时监控集群节点的状态。 图11 节点状态趋势
  • 纳管节点 在安装节点使用./ucs-ctl config generator -t node -o node.csv命令生成节点安装配置文件。 将所需节点写入配置文件(使用英文逗号分隔)。配置文件参数如下: Node IP(添加节点IP) User(SSH连接用户) Password(SSH连接密码) 192.168.0.12 root root 执行节点安装命令./ucs-ctl create node -c [集群名称] -m node.csv,完成节点纳管。
  • 节点卸载 方法一: 在安装节点使用 ./ucs-ctl delete node -c [集群名称] -n [node ip1],[node ip2],… 使用-n指定具体IP,使用英文逗号分隔。 方法二: 在安装节点使用 ./ucs-ctl delete node -c [集群名称] -m node.csv 使用-m指定安装使用的节点文件,可以一次性卸载。 如果命令执行失败,请参考如何手动清理本地集群节点?处理。
  • 支持的巡检项 表1 CCE集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群版本是否超期 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 集群npd插件状态是否正常 集群配置 安全组配置是否正确 核心插件 coredns插件状态 coredns近24小时cpu使用率最大值是否超过80% coredns近24小时内存使用率最大值是否超过80% coredns近24小时是否存在 域名 解析失败请求次数 coredns近24小时P99请求时延是否超过5s coredns插件状态 everest插件状态 everest插件状态 everest近24小时CPU使用率最大值是否超过80% everest近24小时内存使用率最大值是否超过80% kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM kube-prometheus-status在Server部署模式下,prometheus-server的PVC使用率是否超过80% log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 autoscaler插件状态 集群在开启节点池弹性扩缩容条件下,autoscaler插件状态是否可用 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户E CS 配额充足是否超过90% 表2 本地集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 集群log-agent插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM log-agent插件状态 log-agent插件状态 LTS日志组、日志流是否创建成功 LTS日志组结构化是否创建成功 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90% 表3 附着集群、多云集群、伙伴云集群巡检项 巡检维度 集群巡检场景 巡检项 集群 集群资源规划能力 集群Master节点是否高可用 集群CPU的Request水位是否超过80% 集群CPU的Limit水位是否超过150% 集群内存的Request水位是否超过80% 集群内存的Limit水位是否超过150% 集群运维能力 集群kube-prometheus-stack插件状态是否正常 核心插件 kube-prometheus-stack插件状态 kube-prometheus-stack近24小时CPU使用率最大值是否超过80% kube-prometheus-stack近24小时内存使用率最大值是否超过80% kube-prometheus-status插件状态 kube-prometheus-status近24小时是否出现OOM 节点 节点状态 节点状态是否就绪 节点状态不可调度 节点kubelet状态 节点配置 节点内存的Requset是否超过80% 节点CPU的Request是否超过80% 节点内存的Limit检查是否超过150% 节点CPU的Limit检查是否超过150% 节点资源水位诊断 节点24小时内CPU使用率最大值是否超过80% 节点24小时内内存使用率最大值是否超过80% 节点磁盘使用率是否超过80% 节点PID使用量是否正常 节点24小时内是否发生OOM事件 负载 Pod状态 Pod状态检查 Pod负载状态 Pod在24小时内是否发生OOM Pod的24小时内CPU使用率最大值是否超过80% Pod的24小时内内存使用率最大值是否超过80% Pod配置 Pod中的容器是否配置Request Pod中的容器是否配置Limit Pod探针配置 Pod中的容器是否配置存活探针 Pod中的容器是否配置就绪探针 外部依赖 租户节点资源配额 租户云硬盘配额是否超过90% 租户ECS配额充足是否超过90%
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建工作负载。 查看工作负载详情 单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。 查看YAML:可以查看相应实例的YAML文件。 编辑YAML 单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。 升级 单击工作负载名称后的“升级”。 更改工作负载信息,操作步骤与创建工作负载时一致。 单击“提交”,升级工作负载。 删除 单击工作负载名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的工作负载。 单击左上角的“批量删除”。 单击“是”进行确认。
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建工作负载。 查看工作负载详情 单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。 查看YAML:可以查看相应实例的YAML文件。 编辑YAML 单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。 升级 单击工作负载名称后的“升级”。 更改工作负载信息,操作步骤与创建工作负载时一致。 单击“提交”,升级工作负载。 删除 单击工作负载名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的工作负载。 单击左上角的“批量删除”。 单击“是”进行确认。
  • 本地资源清理 该操作可能导致与该集群有绑定关系的资源(比如指定调度集群的负载等)无法正常使用,请谨慎操作,避免对运行中的业务造成影响。 在控制台注销并没有真正删除本地集群,您需要手动进入集群内完成删除过程。 复制卸载之后控制台返回的卸载命令。 进入本地集群中的节点内,执行卸载命令。 ./ucs-ctl delete cluster cluster_name cluster_name取决于集群具体的名字。
  • 在控制台注销本地集群 仅在控制台进行注销操作,不会删除集群。 进入 UCS 界面,左侧导航栏选择“容器舰队”。 找到待删除的本地集群: 已加入容器舰队的本地集群,先进入对应的容器舰队控制台,然后再左侧导航栏选择容器集群。 未加入容器舰队的本地集群,单击容器舰队列表最上面的“未加入舰队的集群”即可。 单击本地集群右上角红色的注销按钮,会弹出注销确认框。 确认待注销的集群名称等信息,并勾选“我已阅读并知晓上述信息”,单击“确定”即可在控制台注销本地集群。
  • 事件 事件搜索 事件页面的主要功能是展示按照一定条件搜索出的指定资源的事件信息,包括Normal/Warning事件趋势和详情。这样,用户可以更加方便地查看与该资源相关的事件信息。 您可以按照如下几种方式进行事件搜索。 在输入框里输入要搜索的事件名称,选择命名空间或者事件类型,单击“搜索”按钮进行搜索。 单击“高级搜索”,按照工作负载、节点、容器组、事件内容、资源类型或者资源名称进行搜索。 也可以在左上角选择事件发生的时间范围,包括近1小时、近1天、近1周和自定义。 图4 搜索事件 事件列表 您可以在列表中查看满足搜索条件的事件详情,包括最近发生时间、事件名称、资源类型、资源名称、事件内容、事件类型和发生次数。单击操作列的“历史事件”,在弹出的对话框中将展示当前资源类型和资源名称下的所有事件。 图5 事件列表
  • 监控 在此处,您可以方便地查看实例在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见仪表盘。 CPU 单位时间内Pod CPU平均使用情况。 图5 CPU 内存 单位时间内Pod内存平均使用情况。 图6 内存 网络速率 容器网络流量,用于监控容器的网络负载情况,以及容器之间的网络通信情况。 图7 网络速率 Pod历史状态 Pod的生命周期。 图8 Pod历史状态 容器CPU 单位时间内容器CPU平均使用情况的统计。 图9 容器CPU 容器内存 单位时间内容器内存平均使用情况的统计。 图10 容器内存 容器CPU受限 容器的生命周期中度过的受限的CPU周期总数与总周期数的比率。 图11 容器CPU受限 容器网络丢包率 容器数据包丢失部分与所传数据包总数的比值。 图12 容器网络丢包率 容器历史状态 容器的生命周期。 图13 容器历史状态
  • 复杂场景下负载伸缩策略使用流程 使用负载伸缩策略的流程如图1,具体流程如下: 准备工作。在创建负载伸缩策略前,您需要准备两个已注册至UCS的华为云集群,并为其安装Kubernetes Metrics Server插件,并构建一个名称为hpa-example的镜像。 创建工作负载。基于准备工作中的镜像创建无状态工作负载与服务,并为其创建与部署调度策略。 创建负载伸缩策略。使用命令行工具创建FederatedHPA策略与CronFederatedHPA策略。 观察负载伸缩过程。查看工作负载中的Pod的数量变动,观察所创建的负载伸缩策略效果。 图1 复杂场景下负载伸缩策略使用流程
  • 创建工作负载 使用构建的hpa-example镜像创建无状态工作负载,Pod数为1。镜像地址与上传到的SWR仓库有关,需要替换为实际取值。 kind: Deployment apiVersion: apps/v1 metadata: name: hpa-example spec: replicas: 1 selector: matchLabels: app: hpa-example template: metadata: labels: app: hpa-example spec: containers: - name: container-1 image: 'hpa-example:latest' # 替换为您上传到SWR的镜像地址 resources: limits: # limits与requests建议取值保持一致,避免扩缩容过程中出现震荡 cpu: 500m memory: 200Mi requests: cpu: 500m memory: 200Mi imagePullSecrets: - name: default-secret 创建一个端口号为80的服务。 kind: Service apiVersion: v1 metadata: name: hpa-example spec: ports: - name: cce-service-0 protocol: TCP port: 80 targetPort: 80 nodePort: 31144 selector: app: hpa-example type: NodePort 为工作负载和服务创建一个调度策略,并将其部署到cluster01和cluster02两个集群,使用权重拆分的方式部署,每个集群的权重为1,以保证两个集群的相同优先级。 apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: hpa-example-pp namespace: default spec: placement: clusterAffinity: clusterNames: - cluster01 - cluster02 replicaScheduling: replicaDivisionPreference: Weighted replicaSchedulingType: Divided weightPreference: staticWeightList: - targetCluster: clusterNames: - cluster01 weight: 1 - targetCluster: clusterNames: - cluster02 weight: 1 preemption: Never propagateDeps: true resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: hpa-example namespace: default - apiVersion: v1 kind: Service name: hpa-example namespace: default
  • 创建负载伸缩策略 为工作负载创建FederatedHPA策略。 vi hpa-example-hpa.yaml YAML文件内容如下。该策略作用于名称为hpa-example的负载,稳定窗口时长为扩容0秒、缩容100秒,最大Pod数为100、最小Pod数为2,包含一条系统指标规则,期望的CPU利用率为50%。 apiVersion: autoscaling.karmada.io/v1alpha1 kind: FederatedHPA metadata: name: hpa-example-hpa # FederatedHPA策略名称 namespace: default # 工作负载所在命名空间名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: hpa-example # 工作负载名称 behavior: scaleDown: stabilizationWindowSeconds: 100 # 缩容的稳定窗口时长为100秒 scaleUp: stabilizationWindowSeconds: 0 # 扩容的稳定窗口时长为0秒 minReplicas: 2 # 最小Pod数为2 maxReplicas: 100 # 最大Pod数为100 metrics: - type: Resource resource: name: cpu # 扩缩指标基于CPU数据 target: type: Utilization # 指标类型为利用率 averageUtilization: 50 # 期望的平均利用率 创建CronFederatedHPA策略。 vi cron-federated-hpa.yaml YAML文件内容如下。该策略作用于名称为hpa-example-hpa的FederatedHPA策略,期望每天8:30扩容工作负载至10个Pod,每天10:00缩容工作负载至2个Pod。 apiVersion: autoscaling.karmada.io/v1alpha1 kind: CronFederatedHPA metadata: name: cron-federated-hpa # CronFederatedHPA策略名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: FederatedHPA # 作用于FederatedHPA策略 name: hpa-example-hpa # FederatedHPA的名称 rules: - name: "Scale-Up" # 规则名称 schedule: 30 08 * * * # 触发时间 targetReplicas: 10 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区 - name: "Scale-Down" # 规则名称 schedule: 0 10 * * * # 触发时间 targetReplicas: 2 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区
  • 观察负载伸缩过程 查看FederatedHPA策略,结果显示工作负载的CPU使用率为0%。 kubectl get FederatedHPA hpa-example-hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 6m 通过如下命令访问工作负载,其中{ip:port}为负载的访问地址,可以在工作负载的详情页中查询。 while true;do wget -q -O- http://{ip:port}; done 观察工作负载自动扩容过程。 查看FederatedHPA策略,可以看到6m23s时负载的CPU使用率为200%,超过了目标值,此时触发了FederatedHPA策略,将工作负载扩容为4个Pod,随后的几分钟内,CPU使用并未下降,直到到8m16s时CPU使用率才开始下降,这是因为新创建的Pod并不一定创建成功,可能是因为资源不足Pod处于Pending状态,这段时间内在扩容节点。 到8m16s时CPU使用率开始下降,说明Pod创建成功,开始分担请求流量,到8分钟时下降到81%,还是高于目标值,在容忍度范围外,说明还会再次扩容,到9m31s时再次扩容到7个Pod,这时CPU使用率降为51%,在容忍度范围内,不会再次扩缩,因此此后Pod数量一直稳定在7个。 kubectl get federatedhpa hpa-example-hpa --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 6m hpa-example-hpa Deployment/hpa-example 200%/50% 1 100 1 6m23s hpa-example-hpa Deployment/hpa-example 200%/50% 1 100 4 6m31s hpa-example-hpa Deployment/hpa-example 210%/50% 1 100 4 7m16s hpa-example-hpa Deployment/hpa-example 210%/50% 1 100 4 7m16s hpa-example-hpa Deployment/hpa-example 90%/50% 1 100 4 8m16s hpa-example-hpa Deployment/hpa-example 85%/50% 1 100 4 9m16s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 9m31s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 10m16s hpa-example-hpa Deployment/hpa-example 51%/50% 1 100 7 11m 查看FederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe federatedhpa hpa-example-hpa 停止访问负载,观察工作负载自动缩容过程。 查看FederatedHPA策略,可以看到从13m开始CPU使用率为21%,18m时Pod数量缩为3个,到23m时Pod数量缩为1个。 kubectl get federatedhpa hpa-example-hpa --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-example-hpa Deployment/hpa-example 50%/50% 1 100 7 12m hpa-example-hpa Deployment/hpa-example 21%/50% 1 100 7 13m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 7 14m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 7 18m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 18m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 19m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 23m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 3 23m hpa-example-hpa Deployment/hpa-example 0%/50% 1 100 1 23m 查看FederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe federatedhpa hpa-example-hpa 达到CronFederatedHPA策略的触发时间后,观察工作负载的自动扩缩容过程。 可以看到118m时Pod数量扩为4个,到123m时Pod数量扩为10个。 kubectl get cronfederatedhpa cron-federated-hpa --watch NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cron-federated-hpa Deployment/hpa-example 50%/50% 1 100 1 112m cron-federated-hpa Deployment/hpa-example 21%/50% 1 100 1 113m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 114m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 118m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 118m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 4 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 119m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 7 123m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 10 123m cron-federated-hpa Deployment/hpa-example 0%/50% 1 100 10 123m 查看CronFederatedHPA策略事件,可以看到策略的生效时间。 kubectl describe cronfederatedhpa cron-federated-hpa
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
  • 概览 单击节点名称,可以进入节点概览页,在这里,您可以方便地查看资源概况,包括节点状态、Pod数量以及异常事件。此外,还可以浏览近一小时的监控概览,其中包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 同时,概览页面还提供了Pod使用趋势功能,您可以从中了解节点中各Top5的Pod的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表左上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表右上角进行切换)。 图3 Pod使用趋势 如需了解更多指标,请前往监控页面查看。
  • Pod列表 Pod列表中包含了实例名称、状态、命名空间、实例IP、所在节点、重启次数、CPU申请/限制、内存申请/限制,以及CPU和内存使用率等详细信息。 图4 Pod列表 您可以通过在列表上方按照实例名称、状态、命名空间、实例IP和所在节点进行筛选,快速找到需要的实例。在列表的右上角,您可以单击按钮来导出全部实例数据,或者选择部分实例进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 单击实例名称可以查看实例的详细监控数据。更多相关内容,请参见Pod。
  • 监控 在此处,您可以方便地查看节点在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见仪表盘。 CPU 单位时间内节点CPU使用情况。 图5 CPU 内存 单位时间内节点内存使用情况。 图6 内存 网络 节点上的容器网络流量,用于监控节点上的容器网络负载情况。 图7 网络 节点平均负载 节点的平均负载是指在一定时间内,节点上正在运行的进程数量的平均值,用来评估节点上正在运行的进程数量是否过多,是否超出了节点的处理能力。通常情况下,节点平均负载应该保持在一个合理的范围内,以确保节点的稳定性和可靠性。包括1min、5min和15min的数据。 图8 节点平均负载 节点CPU单核使用率 单位时间内节点单核CPU使用情况。 图9 节点CPU单核使用率 磁盘读I/O 节点磁盘近五分钟的数据读取次数。 图10 磁盘读I/O 磁盘写I/O 节点磁盘近五分钟的数据写入次数。 图11 磁盘写I/O Pod CPU使用率 单位时间内Pod CPU使用情况。 图12 Pod CPU使用率 Pod内存使用率 单位时间内Pod内存使用情况。 图13 Pod内存使用率 Pod状态趋势 实时监控节点Pod状态。 图14 Pod状态趋势 Pod数量变化趋势 节点已分配的容器组数量。 图15 Pod数量变化趋势
  • 节点列表 节点列表中包含节点名称、状态、IP地址、容器组(已分配/总额度)、CPU申请比率/限制比率/使用率,以及内存申请比率/限制比率/使用率等信息。 图1 节点列表 您可以通过在列表上方按照节点名称、状态、私有地址和公网地址进行筛选,快速找到需要的节点。在列表的右上角,您可以单击按钮来导出全部节点数据,或者选择部分节点进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 当节点的CPU限制比率或内存限制比率超过100%时,意味着节点资源超分,节点上的负载限制值(可使用的最大值)之和已经超过了节点规格。如果负载占用资源过高,可能会导致节点异常。
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
  • 相关操作 通过UCS控制台,您还可以执行表2中的操作。 表2 相关操作 操作 说明 YAML创建 单击右上角“YAML创建”,可使用已有的YAML创建工作负载。 查看工作负载详情 单击已创建工作负载的名称,在“实例列表”页签下,可以查看Pod相关详情信息。 事件:可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 容器列表:可以查看相应实例的容器名称、状态、镜像以及启停次数等。 查看YAML:可以查看相应实例的YAML文件。 编辑YAML 单击工作负载名称后的“编辑YAML”,可查看并编辑当前工作负载的YAML文件。 升级 单击工作负载名称后的“升级”。 更改工作负载信息,操作步骤与创建工作负载时一致。 单击“提交”,升级工作负载。 删除 单击工作负载名称后的“删除”,并单击“是”进行确认。 批量删除 勾选需要删除的工作负载。 单击左上角的“批量删除”。 单击“是”进行确认。
  • k8clone备份使用方法 k8clone工具支持在Linux(x86、arm)和Windows环境中运行,使用方法相似。本文将以Linux(x86)环境为例进行介绍。 若使用Linux(arm)或Windows环境,请将下述命令中的k8clone-linux-amd64分别替换为k8clone-linux-arm64或k8clone-windows-amd64.exe。 在k8clone工具所在目录下执行./k8clone-linux-amd64 backup -h,可以查看k8clone工具备份的使用方法。 -k, --kubeconfig:指定kubectl的KubeConfig位置,默认是$HOME/.kube/config。kubeConfig文件:用于配置对Kubernetes集群的访问,KubeConfig文件中包含访问注册kubernetes集群所需要的认证凭据以及Endpoint(访问地址),详细介绍可参见Kubernetes文档。 -s, --api-server:Kubernetes API Server URL,默认是""。 -q, --context:Kubernetes Configuration Context,默认是""。 -n, --namespace:备份指定命名空间的云原生应用,多个命名空间用逗号分隔(如:ns1,ns2,ns3),默认是"",表示备份整个集群。 -e, --exclude-namespaces:排除指定命名空间对象的备份,不能和--namespace一起使用。 -x, --exclude-kind:排除指定资源类型的备份。 -y, --exclude-object:排除指定资源对象的备份。 -w, --exclude-having-owner-ref:排除拥有ownerReferences资源对象的备份,默认是false。 -d, --local-dir:备份数据放置的路径,默认是当前目录下k8clone-dump文件夹。 $ ./k8clone-linux-amd64 backup -h Backup Workload Data as yaml files Usage: k8clone backup [flags] Flags: -s, --api-server string Kubernetes api-server url -q, --context string Kubernetes configuration context -w, --exclude-having-owner-ref Exclude all objects having an Owner Reference -x, --exclude-kind strings Ressource kind to exclude. Eg. 'deployment' -e, --exclude-namespaces strings Namespaces to exclude. Eg. 'temp.*' as regexes. This collects all namespaces and then filters them. Don't use it with the namespace flag. -y, --exclude-object strings Object to exclude. Eg. 'configmap:kube-system/kube-dns' -h, --help help for backup -k, --kubeconfig string The kubeconfig of k8s cluster's. Default is the $HOME/.kube/config. -d, --local-dir string Where to dump yaml files (default "./k8clone-dump") -n, --namespace string Only dump objects from this namespace 示例如下: 整个集群对象的备份,默认路径为当前目录下“k8clone-dump”文件夹 ./k8clone-linux-amd64 backup 整个集群对象的备份,并指定备份数据路径 ./k8clone-linux-amd64 backup -d ./xxxx 指定命名空间对象的备份 ./k8clone-linux-amd64 backup -n default 排除命名空间对象的备份 ./k8clone-linux-amd64 backup -e kube-system,kube-public,kube-node-lease 排除指定资源类型的备份 ./k8clone-linux-amd64 backup -x endpoints,endpointslice 排除指定资源对象的备份 ./k8clone-linux-amd64 backup -y configmap:kube-system/kube-dns 排除拥有ownerReferences资源对象的备份 ./k8clone-linux-amd64 backup -w true
  • Oozie原理 Oozie是一个工作流引擎服务器,用于运行MapReduce任务工作流。同时Oozie还是一个Java Web程序,运行在Tomcat容器中。 Oozie工作流通过HPDL(一种通过XML自定义处理的语言,类似JBOSS JBPM的JPDL)来构造。包含“Control Node”(可控制的工作流节点)、“Action Node”。 “Control Node”用于控制工作流的编排,如“start”(开始)、“end”(关闭)、“error”(异常场景)、“decision”(选择)、“fork”(并行)、“join”(合并)等。 Oozie工作流中拥有多个“Action Node”,如MapReduce、Java等。 所有的“Action Node”以有向无环图DAG(Direct Acyclic Graph)的模式部署运行。所以在“Action Node”的运行步骤上是有方向的,当上一个“Action Node”运行完成后才能运行下一个“Action Node”。一旦当前“Action Node”完成,远程服务器将回调Oozie的接口,这时Oozie又会以同样的方式执行工作流中的下一个“Action Node”,直到工作流中所有“Action Node”都完成(完成包括失败)。 Oozie工作流提供各种类型的“Action Node”用于支持不同的业务需要,如MapReduce,HDFS,SSH,Java以及Oozie子流程。
  • Oozie结构 Oozie引擎是一个Web App应用,默认集成到Tomcat中,采用pg数据库。 基于Ext提供WEB Console,该Console仅提供对Oozie工作流的查看和监控功能。通过Oozie对外提REST方式的WS接口,Oozie client通过该接口控制(启动、停止等操作)Workflow流程,从而编排、运行Hadoop MapReduce任务,如图1所示。 图1 Oozie框架 图1中各部分的功能说明如表1所示。 表1 结构图说明 名称 描述 Console 提供对Oozie流程的查看和监控功能。 Client 通过接口控制Workflow流程:可以执行提交流程,启动流程,运行流程,终止流程,恢复流程等操作。 SDK 软件开发工具包SDK(SoftwareDevelopmentKit)是被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 Database pg数据库。 WebApp(Oozie) WebApp(Oozie)即Oozie server,可以用内置的Tomcat容器,也可以用外部的,记录的信息比如日志等放在pg数据库中。 Tomcat Tomcat服务器是免费的开放源代码的Web应用服务器。 Hadoop组件 底层执行Oozie编排流程的各个组件,包括MapReduce、Hive等。
  • 购买集群 通过在 MRS 服务管理面,客户可以按需或者包年包月购买MRS集群,通过选择集群所建的区域及使用的云资源规格,一键式购买适合企业业务的MRS集群。MRS服务会根据用户选择的集群类型、版本和节点规格,帮助客户自动完成华为云企业级大数据平台的安装部署和参数调优。 MRS服务为客户提供完全可控的大数据集群,客户在创建时可设置虚拟机的登录方式(密码或者密钥对),所创建的MRS集群资源完全归客户所用。同时MRS支持在两节点4U8G的ECS上部署大数据集群,为客户测试开发提供更多的灵活选择。 MRS集群类型包括分析集群、流式集群和混合集群。 分析集群:用来做离线数据分析,提供Hadoop体系的组件。 流式集群:用来做流处理任务,提供流式处理组件。 混合集群:既可以用来做离线数据分析,又可以用来做流处理任务,提供Hadoop体系的组件和流式处理组件。 自定义:根据业务需求,可以灵活搭配所需组件(MRS 3.x及后续版本)。 MRS集群节点类型包括Master节点、Core节点和Task节点。 Master节点:集群中的管理节点。分布式系统的Master进程和Manager以及数据库均部署在该节点;该类型节点不可扩容。该类型节点的处理能力决定了整个集群的管理上限,MRS服务支持将Master节点规格提高,以支持更大集群的管理。 Core节点:支持存储和计算两种目标的节点,可扩容、缩容。因承载数据存储功能,因此在缩容时,为保证数据不丢失,有较多限制,无法进行弹性伸缩。 Task节点:仅用于计算的节点,可扩容、缩容。因只承载计算任务,因此可以进行弹性伸缩。 MRS购买集群方式支持自定义购买集群和快速购买集群两种。 自定义购买集群:自定义购买可以灵活地选择计费模式、配置项,针对不同的应用场景,可以选择不同规格的弹性云服务器,全方位贴合您的业务诉求。 快速购买集群:用户可以根据应用场景,快速购买对应配置的集群,提高了配置效率,更加方便快捷。当前支持快速购买Hadoop分析集群、HBase集群、Kafka集群、ClickHouse集群、实时分析集群。 Hadoop分析集群:Hadoop分析集群完全使用开源Hadoop生态,采用YARN管理集群资源,提供Hive、Spark离线大规模分布式数据存储和计算,SparkStreaming、Flink流式数据计算,Presto交互式查询,Tez有向无环图的分布式计算框等Hadoop生态圈的组件,进行海量数据分析与查询。 HBase集群:HBase集群使用Hadoop和HBase组件提供一个稳定可靠,性能优异、可伸缩、面向列的分布式 云存储 系统,适用于海量数据存储以及分布式计算的场景,用户可以利用HBase搭建起TB至PB级数据规模的存储系统,对数据轻松进行过滤分析,毫秒级得到响应,快速发现数据价值。 Kafka集群:Kafka集群使用Kafka和Storm组件提供一个开源高吞吐量,可扩展性的消息系统。广泛用于日志收集、监控数据聚合等场景,实现高效的流式数据采集,实时数据处理存储等。 ClickHouse集群:ClickHouse集群是一个用于联机分析的列式数据库管理系统,具有压缩率和极速查询性能。广泛用于互联网广告、App和Web流量、电信、金融、物联网等众多领域。 实时分析集群:实时分析集群使用Hadoop、Kafka、Flink和ClickHouse组件提供一个海量的数据采集、数据的实时分析和查询的系统。
  • 变更配置 在开通MRS前有多种实例供您选择,您可根据业务需要选择合适的Master和Core节点实例。当集群启动后,MRS提供如下几种变更配置的方式。 配置Task节点:新增Task节点,请参见扩容集群中的“相关任务”。 扩容:手动扩容Core或Task节点,请参见扩容集群。 升级规格:升级Master节点的实例规格,请参见升级Master节点规格。 配置弹性伸缩:根据业务数据量的变化动态调整集群Task节点数量以增减资源,请参见配置弹性伸缩规则。 若MRS提供的变更配置方式不满足您的要求,您也可以通过重建集群,然后做数据迁移的方式实现集群配置的变更。
  • 欠费 包年/包月集群,没有欠费的概念。 按需购买的集群是按每小时扣费,当余额不足,无法对上一个小时的费用进行扣费,就会导致集群欠费,集群欠费后有保留期。您续费后即可解冻集群,可继续正常使用,请注意在保留期进行的续费,是以原到期时间作为生效时间,您应当支付从进入保留期开始到续费时的服务费用。 您购买的集群欠费后,会导致部分操作受限,建议您尽快续费。具体受限操作如下所示: 创建集群 扩容集群 缩容集群 新增Task节点 升级Master节点规格
  • 客户价值 MRS的自动弹性伸缩可以帮助用户实现以下价值。 降低使用成本 部分企业并不是时刻都在进行批量分析,例如一般情况下数据持续接入,而到了特定时间段(例如凌晨3点)进行批量分析,可能仅需要消耗2小时。 MRS提供的弹性伸缩能力,可以帮助用户在进行批量分析操作时,将分析节点扩容到指定规模,而计算完毕后,则自动释放计算节点,尽可能的降低使用成本。 平衡突发查询 大数据集群上,由于有大量的数据,企业会经常面临临时的分析任务,例如支撑企业决策的临时数据报表等,都会导致对于资源的消耗在极短时间内剧增。MRS提供的弹性伸缩能力,可以在突发大数据分析时,及时补充计算节点,避免因为计算能力不足,导致业务宕机。用户无需手动购买额外资源,当突发事件结束后,MRS会自动判断缩容时机,自动完成缩容。 聚焦核心业务 大数据作为二次开发平台,开发人员时常难以判断具体的资源消耗,由于查询分析的条件复杂性(例如全局排序,过滤,合并等)以及数据的复杂性(例如增量数据的不确定性等),都会导致预估计算量难以进行,而使用弹性伸缩能力,可以让业务人员专注于业务开发,无需分心再做各种资源评估。
  • 特性简介 随着企业的数据越来越多,越来越多的企业选择使用Spark/Hive等技术来进行分析,由于数据量大,任务处理繁重,资源消耗较高,因此使用成本也越来越高。当前并不是每个企业在每时每刻在进行分析,而一般是在一天的一个时间段内进行分析汇总,因此MRS提供了弹性伸缩能力,可以自动在业务在繁忙时申请额外资源,业务不繁忙时释放闲置资源,让用户按需使用,尽可能的帮助客户降低使用成本,聚焦核心业务。 在大数据应用,尤其是周期性的数据分析处理场景中,需要根据业务数据的周期变化,动态调整集群计算资源以满足业务需要。MRS的弹性伸缩规则功能支持根据集群负载对集群进行弹性伸缩。此外,如果数据量为周期有规律的变化,并且希望在数据量变化前提前完成集群的扩缩容,可以使用MRS的资源计划特性。 MRS服务支持规则和时间计划两种弹性伸缩的策略: 弹性伸缩规则:根据集群实时负载对Task节点数量进行调整,数据量变化后触发扩缩容,有一定的延后性。 资源计划:若数据量变化存在周期性规律,则可通过资源计划在数据量变化前提前完成集群的扩缩容,避免出现增加或减少资源的延后。 弹性伸缩规则与资源计划均可触发弹性伸缩,两者既可同时配置也可单独配置。资源计划与基于负载的弹性伸缩规则叠加使用可以使得集群节点的弹性更好,足以应对偶尔超出预期的数据峰值出现。 当某些业务场景要求在集群扩缩容之后,根据节点数量的变化对资源分配或业务逻辑进行更改时,手动扩缩容的场景需要用户登录集群节点进行操作。对于弹性伸缩场景,MRS支持通过自定义弹性伸缩自动化脚本来解决。自动化脚本可以在弹性伸缩前后执行相应操作,自动适应业务负载的变化,免去了人工操作。同时,自动化脚本给用户实现个性需求提供了途径,完全自定义的脚本与多个可选的执行时机基本可以满足用户的各项需求,使弹性伸缩更具灵活性。
共100000条