 OpenShift Container Platform 4.14 Operatorproperty of their respective owners. 摘要 摘要 本文档提供有关在 OpenShift Container Platform 中使用 Operator 的信息。文中为集群管理员提供 了 Operator 的安装和管理说明,为开发人员提供了如何通过所安装的 Operator 创建应用程序的信 息。另外还提供了一些使用 Operator SDK 构建自用 Operator 目录 2.7. 多租户集群中的 OPERATOR 2.8. CRD 第 第 3 章 章 用 用户 户任 任务 务 3.1. 从已安装的 OPERATOR 创建应用程序 3.2. 在命名空间中安装 OPERATOR 第 第 4 章 章 管理 管理员 员任 任务 务 4.1. 在集群中添加 OPERATOR 4.2. 更新安装的 OPERATOR 4.3. 从集群中删除 OPERATOR 4 MANAGER 功能 4.5. 在 OPERATOR LIFECYCLE MANAGER 中配置代理支持 4.6. 查看 OPERATOR 状态 4.7. 管理 OPERATOR 条件 4.8. 允许非集群管理员安装 OPERATOR 4.9. 管理自定义目录 4.10. 在受限网络中使用 OPERATOR LIFECYCLE MANAGER 4.11. 目录源 POD 调度 4.12. 管理平台 OPERATOR0 码力 | 423 页 | 4.26 MB | 1 年前3 OpenShift Container Platform 4.14 Operatorproperty of their respective owners. 摘要 摘要 本文档提供有关在 OpenShift Container Platform 中使用 Operator 的信息。文中为集群管理员提供 了 Operator 的安装和管理说明,为开发人员提供了如何通过所安装的 Operator 创建应用程序的信 息。另外还提供了一些使用 Operator SDK 构建自用 Operator 目录 2.7. 多租户集群中的 OPERATOR 2.8. CRD 第 第 3 章 章 用 用户 户任 任务 务 3.1. 从已安装的 OPERATOR 创建应用程序 3.2. 在命名空间中安装 OPERATOR 第 第 4 章 章 管理 管理员 员任 任务 务 4.1. 在集群中添加 OPERATOR 4.2. 更新安装的 OPERATOR 4.3. 从集群中删除 OPERATOR 4 MANAGER 功能 4.5. 在 OPERATOR LIFECYCLE MANAGER 中配置代理支持 4.6. 查看 OPERATOR 状态 4.7. 管理 OPERATOR 条件 4.8. 允许非集群管理员安装 OPERATOR 4.9. 管理自定义目录 4.10. 在受限网络中使用 OPERATOR LIFECYCLE MANAGER 4.11. 目录源 POD 调度 4.12. 管理平台 OPERATOR0 码力 | 423 页 | 4.26 MB | 1 年前3
 OpenShift Container Platform 4.8 Service Mesh7. 流量管理 2.8. 在 SERVICE MESH 上部署应用程序 2.9. 数据可视化和可观察性 2.10. 自定义资源 2.11. 使用 3SCALE ISTIO 适配器 2.12. 删除 SERVICE MESH 3 3 3 27 32 33 38 40 42 48 58 62 77 79 90 103 111 113 115 144 154 173 183 191 的支持,并弃用了 ServiceMeshExtention API。 1.2.2.4.3. ROSA 支持 此发行版本引进了对 AWS(ROSA)上的 Red Hat OpenShift 的服务网格支持,包括多集群联邦。 1.2.2.4.4. istio-node DaemonSet 重命名 在此发行版本中,istio-node DaemonSet 被重命名为 istio-cni-node,以匹配上游 Istio Service Mesh Federation 添加了新的自定义资源定义(CRD)以支持联邦服务网格(federating service mesh)。服务网格可以整合 到同一集群中或跨不同的 OpenShift 集群。这些新资源包括: ServiceMeshPeer - 使用单独的服务网格定义联邦,包括网关配置、root 信任证书配置和状态字 段。在一对联邦网格中,每个网格将定义自己的独立 ServiceMeshPeer0 码力 | 344 页 | 3.04 MB | 1 年前3 OpenShift Container Platform 4.8 Service Mesh7. 流量管理 2.8. 在 SERVICE MESH 上部署应用程序 2.9. 数据可视化和可观察性 2.10. 自定义资源 2.11. 使用 3SCALE ISTIO 适配器 2.12. 删除 SERVICE MESH 3 3 3 27 32 33 38 40 42 48 58 62 77 79 90 103 111 113 115 144 154 173 183 191 的支持,并弃用了 ServiceMeshExtention API。 1.2.2.4.3. ROSA 支持 此发行版本引进了对 AWS(ROSA)上的 Red Hat OpenShift 的服务网格支持,包括多集群联邦。 1.2.2.4.4. istio-node DaemonSet 重命名 在此发行版本中,istio-node DaemonSet 被重命名为 istio-cni-node,以匹配上游 Istio Service Mesh Federation 添加了新的自定义资源定义(CRD)以支持联邦服务网格(federating service mesh)。服务网格可以整合 到同一集群中或跨不同的 OpenShift 集群。这些新资源包括: ServiceMeshPeer - 使用单独的服务网格定义联邦,包括网关配置、root 信任证书配置和状态字 段。在一对联邦网格中,每个网格将定义自己的独立 ServiceMeshPeer0 码力 | 344 页 | 3.04 MB | 1 年前3
 Zabbix 6.0 ManualZabbix 6.0.0 新功能 Zabbix server 的高可用集群 新版本附带了针对 Zabbix server 的原生高可用解决方案。 该解决方案由多个 zabbix_server 实例或节点组成,其中一次只能有一个节点处于活动状态(工作),而其他节点处于待机状态,准备好 在当前节点停止或故障时接管。 另请参阅:高可用集群。 服务 对服务的监控进行了一些更新。服务监控提供了 Zabbix • 图形名称 不再支持位置宏 自 Zabbix 4.0 起已弃用的监控项名称 ($1, $2...$9) 中对位置宏的支持已被完全删除。 不再支持监控项名称中的用户宏 自 Zabbix 4.0 起已弃用的监控项名称(包括发现规则名称)中对用户宏的支持已被完全删除。 Prometheus 指标的批量处理 在预处理队列中引入了依赖监控项的批量处理,以提高检索 Prometheus 指标的性能。 Kubernetes 集群状态 • 通过 HTTP 的 Kubernetes API 服务器 • 通过 HTTP 的 Kubernetes 控制器管理器 • 基于 HTTP 的 Kubernetes 调度程序 • 基于 HTTP 的 Kubernetes kubelet 要启用 Kubernetes 监控,您需要使用新工具 Zabbix Helm Chart,它会在 Kubernetes 集群中安装 Zabbix0 码力 | 1741 页 | 22.78 MB | 1 年前3 Zabbix 6.0 ManualZabbix 6.0.0 新功能 Zabbix server 的高可用集群 新版本附带了针对 Zabbix server 的原生高可用解决方案。 该解决方案由多个 zabbix_server 实例或节点组成,其中一次只能有一个节点处于活动状态(工作),而其他节点处于待机状态,准备好 在当前节点停止或故障时接管。 另请参阅:高可用集群。 服务 对服务的监控进行了一些更新。服务监控提供了 Zabbix • 图形名称 不再支持位置宏 自 Zabbix 4.0 起已弃用的监控项名称 ($1, $2...$9) 中对位置宏的支持已被完全删除。 不再支持监控项名称中的用户宏 自 Zabbix 4.0 起已弃用的监控项名称(包括发现规则名称)中对用户宏的支持已被完全删除。 Prometheus 指标的批量处理 在预处理队列中引入了依赖监控项的批量处理,以提高检索 Prometheus 指标的性能。 Kubernetes 集群状态 • 通过 HTTP 的 Kubernetes API 服务器 • 通过 HTTP 的 Kubernetes 控制器管理器 • 基于 HTTP 的 Kubernetes 调度程序 • 基于 HTTP 的 Kubernetes kubelet 要启用 Kubernetes 监控,您需要使用新工具 Zabbix Helm Chart,它会在 Kubernetes 集群中安装 Zabbix0 码力 | 1741 页 | 22.78 MB | 1 年前3
 Serverless Kubernetes - KubeCon- 无需管理服务器节点 容器调度与编排 经典Kubernetes容器服务 - 按照集群节点数量付费 ECS Pod Pod Pod Pod ECS Pod Pod Pod Pod ECS Pod Pod Pod Pod 经典Kubernetes集群 容器调度与编排 Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Serverless Kubernetes集群 Serverless Kubernetes vs. 传统Kubernetes集群 Kubernetes + Serverless addon混合集群 容器调度与编排 Pod Pod Pod … Elastic Container Instance (ECI) Pod Viking agent Container Container Kernel Containerd 创建/删除Pod 上报Pod状态 Pod状态逼近 创建/删除SLB 节点绑定、路由规则变更 创建/删除DNS Entry 与云平台深度集成 ECI Viking agent Pod Container Container0 码力 | 16 页 | 4.25 MB | 1 年前3 Serverless Kubernetes - KubeCon- 无需管理服务器节点 容器调度与编排 经典Kubernetes容器服务 - 按照集群节点数量付费 ECS Pod Pod Pod Pod ECS Pod Pod Pod Pod ECS Pod Pod Pod Pod 经典Kubernetes集群 容器调度与编排 Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Pod Serverless Kubernetes集群 Serverless Kubernetes vs. 传统Kubernetes集群 Kubernetes + Serverless addon混合集群 容器调度与编排 Pod Pod Pod … Elastic Container Instance (ECI) Pod Viking agent Container Container Kernel Containerd 创建/删除Pod 上报Pod状态 Pod状态逼近 创建/删除SLB 节点绑定、路由规则变更 创建/删除DNS Entry 与云平台深度集成 ECI Viking agent Pod Container Container0 码力 | 16 页 | 4.25 MB | 1 年前3
 Zabbix 5.0 Manual过程中,大型表的初始压缩可能需要很多时间。 Note: 推荐用户在使用压缩之前熟悉 TimescaleDB 压缩说明文档。 注意, 压缩是有一定限制的, 确切地说: • 压缩块的编辑 (插入,删除,更新) 是不支持的 • 压缩表的架构更改是不支持的 压缩设置可以在位于 Zabbix 前端 Administration → General → Housekeeping 中的 History 对于创建字符和日志类型的历史数据映射并有相应类型的修改,也需要执行类似的请求。 Note: 要使用 Elasticsearch,请参考安装条件页面 以获取更多信息。 Note: Housekeeper 不会删除任何 Elasticsearch 中的数据。 在多个基于日期的索引中存储历史数据 本节将介绍使用 pipelines 和 ingest 节点所需的其他配置步骤。 首先,您必须为索引创建一个模板。 如果出现错误(导出文件无法写入数据、无法重命名导出文件或重命名后无法创建新的导出文件),数据项将被删除,并且永远不会写入导 出文件。它只写入 Zabbix 数据库中。当写入问题解决后,即可恢复将数据写入导出文件的操作。 有关导出数据的详细信息,请参考导出协议 页面。 注意:如果在收到数据后、服务器导出数据之前,删除了主机/监控项,那么主机/监控项将没有元数据(例如:主机组、主机名、监控项名 称等)。 配置0 码力 | 2715 页 | 28.60 MB | 1 年前3 Zabbix 5.0 Manual过程中,大型表的初始压缩可能需要很多时间。 Note: 推荐用户在使用压缩之前熟悉 TimescaleDB 压缩说明文档。 注意, 压缩是有一定限制的, 确切地说: • 压缩块的编辑 (插入,删除,更新) 是不支持的 • 压缩表的架构更改是不支持的 压缩设置可以在位于 Zabbix 前端 Administration → General → Housekeeping 中的 History 对于创建字符和日志类型的历史数据映射并有相应类型的修改,也需要执行类似的请求。 Note: 要使用 Elasticsearch,请参考安装条件页面 以获取更多信息。 Note: Housekeeper 不会删除任何 Elasticsearch 中的数据。 在多个基于日期的索引中存储历史数据 本节将介绍使用 pipelines 和 ingest 节点所需的其他配置步骤。 首先,您必须为索引创建一个模板。 如果出现错误(导出文件无法写入数据、无法重命名导出文件或重命名后无法创建新的导出文件),数据项将被删除,并且永远不会写入导 出文件。它只写入 Zabbix 数据库中。当写入问题解决后,即可恢复将数据写入导出文件的操作。 有关导出数据的详细信息,请参考导出协议 页面。 注意:如果在收到数据后、服务器导出数据之前,删除了主机/监控项,那么主机/监控项将没有元数据(例如:主机组、主机名、监控项名 称等)。 配置0 码力 | 2715 页 | 28.60 MB | 1 年前3
 Zabbix 5.2 Manualwith Elasticsearch please refer to Requirement page for additional information. Note: Housekeeper 不会删除任何 Elasticsearch 中的数据 Note: Housekeeper is not deleting any data from Elasticsearch. 历史数据存储于多个基于时间的索引 precise details on what information is exported, see the export protocol page. 请注意,如果在收到数据后,在服务器导出数据之前删除了主机/监控项,主机/监控项可能没有元数据(例如:主机组,主机名,监控项 名称)。Note that host/item can have no metadata (host groups, host 执行 housekeeping 的频率 (单位为小时)。 housekeeping 负责从 数据库中删除过期的信 息。 注意: 为了防止 housekeeper 负载过 大 (例如, 当历史和趋势 周期大大减小时), 对于 每一个监控项,不会在 一个 housekeeping 周 期内删除超过 4 倍 HousekeepingFre- quency 的过期数据。 因此, 如果 Housekeep-0 码力 | 1725 页 | 11.53 MB | 1 年前3 Zabbix 5.2 Manualwith Elasticsearch please refer to Requirement page for additional information. Note: Housekeeper 不会删除任何 Elasticsearch 中的数据 Note: Housekeeper is not deleting any data from Elasticsearch. 历史数据存储于多个基于时间的索引 precise details on what information is exported, see the export protocol page. 请注意,如果在收到数据后,在服务器导出数据之前删除了主机/监控项,主机/监控项可能没有元数据(例如:主机组,主机名,监控项 名称)。Note that host/item can have no metadata (host groups, host 执行 housekeeping 的频率 (单位为小时)。 housekeeping 负责从 数据库中删除过期的信 息。 注意: 为了防止 housekeeper 负载过 大 (例如, 当历史和趋势 周期大大减小时), 对于 每一个监控项,不会在 一个 housekeeping 周 期内删除超过 4 倍 HousekeepingFre- quency 的过期数据。 因此, 如果 Housekeep-0 码力 | 1725 页 | 11.53 MB | 1 年前3
 Keras: 基于 Python 的深度学习库GPU 数据并行的支持。 • 优步的 Horovod 对 Keras 模型有第一流的支持。 • Keras 模型可以被转换为 TensorFlow 估计器并在 Google Cloud 的 GPU 集群上训练。 • Keras 可以在 Spark(通过 CERN 的 Dist-Keras)和 Elephas 上运行。 为什么选择 KERAS? 7 2.6 Keras 的发展得到深度学习生态系统中的关键公司的支持 from keras.models import load_model model.save('my_model.h5') # 创建 HDF5 文件 'my_model.h5' del model # 删除现有模型 # 返回一个编译好的模型 # 与之前那个相同 model = load_model('my_model.h5') 3.3.6.2 只保存/加载模型的结构 如果您只需要保存模型的结 等方法 全部都会更新模型中有 状态层的状态。这使你不仅可以进行有状态的训练,还可以进行有状态的预测。 3.3.16 如何从 Sequential 模型中移除一个层? 你可以通过调用 .pop() 来删除 Sequential 模型中最后添加的层: model = Sequential() model.add(Dense(32, activation='relu', input_dim=784))0 码力 | 257 页 | 1.19 MB | 1 年前3 Keras: 基于 Python 的深度学习库GPU 数据并行的支持。 • 优步的 Horovod 对 Keras 模型有第一流的支持。 • Keras 模型可以被转换为 TensorFlow 估计器并在 Google Cloud 的 GPU 集群上训练。 • Keras 可以在 Spark(通过 CERN 的 Dist-Keras)和 Elephas 上运行。 为什么选择 KERAS? 7 2.6 Keras 的发展得到深度学习生态系统中的关键公司的支持 from keras.models import load_model model.save('my_model.h5') # 创建 HDF5 文件 'my_model.h5' del model # 删除现有模型 # 返回一个编译好的模型 # 与之前那个相同 model = load_model('my_model.h5') 3.3.6.2 只保存/加载模型的结构 如果您只需要保存模型的结 等方法 全部都会更新模型中有 状态层的状态。这使你不仅可以进行有状态的训练,还可以进行有状态的预测。 3.3.16 如何从 Sequential 模型中移除一个层? 你可以通过调用 .pop() 来删除 Sequential 模型中最后添加的层: model = Sequential() model.add(Dense(32, activation='relu', input_dim=784))0 码力 | 257 页 | 1.19 MB | 1 年前3
 Kubernetes for Edge Computing across
Inter-Continental Haier Production Sites外包开发模式 资源利用率KPI 01 04 02 03 海尔集团业务转型 - 架构演进 工业互联网 - 行业分析 海尔工业互联网 -才云整体解决方案 海尔工业互联网 - 才云整体解决方案 多集群管理 存 储 网 络 混合云 监控日志 基础服务 镜像仓库 认证鉴权 资源管理 面向业务开发 CI/CD 微服务 应用商店 面向业务管理 弹性伸缩 API Gateway 负载均衡 程的可视化。 模型训练 模型版本管理,模型推理服务的部署 、监控、管理和升级,提供 A/B test 和滚动升级。 模型服务 实现对 GPU 集群资源进行管理,根 据用户作业请求自动分配和回收 GPU 资源。 GPU 集群管理 对接存储系统,管理数据集;提供 notebook 交互式代码开发和调试工 具;管理数据预处理批作业。 模型开发 海尔工业互联网 – 才云数据解决方案 这些机器上跑了一些容器服务 4. 因为机器数量不多,不希望每个工厂组成一个 k8s 集群 5. 也不可能将这些工厂的机器作为node 节点添加到青岛 的 k8s 集群,因为可能受到vpn 等网络的限制 6. 这些分布在各个工厂的零散的机器上跑的容器服务就称 为边缘容器服务 7. 海尔希望有一个多租户平台既能管理多个 k8s 集群,也 能把这些边缘节点管理起来,为每个租户提供 k8s 分区 资源和边缘节点资源。0 码力 | 33 页 | 4.41 MB | 1 年前3 Kubernetes for Edge Computing across
Inter-Continental Haier Production Sites外包开发模式 资源利用率KPI 01 04 02 03 海尔集团业务转型 - 架构演进 工业互联网 - 行业分析 海尔工业互联网 -才云整体解决方案 海尔工业互联网 - 才云整体解决方案 多集群管理 存 储 网 络 混合云 监控日志 基础服务 镜像仓库 认证鉴权 资源管理 面向业务开发 CI/CD 微服务 应用商店 面向业务管理 弹性伸缩 API Gateway 负载均衡 程的可视化。 模型训练 模型版本管理,模型推理服务的部署 、监控、管理和升级,提供 A/B test 和滚动升级。 模型服务 实现对 GPU 集群资源进行管理,根 据用户作业请求自动分配和回收 GPU 资源。 GPU 集群管理 对接存储系统,管理数据集;提供 notebook 交互式代码开发和调试工 具;管理数据预处理批作业。 模型开发 海尔工业互联网 – 才云数据解决方案 这些机器上跑了一些容器服务 4. 因为机器数量不多,不希望每个工厂组成一个 k8s 集群 5. 也不可能将这些工厂的机器作为node 节点添加到青岛 的 k8s 集群,因为可能受到vpn 等网络的限制 6. 这些分布在各个工厂的零散的机器上跑的容器服务就称 为边缘容器服务 7. 海尔希望有一个多租户平台既能管理多个 k8s 集群,也 能把这些边缘节点管理起来,为每个租户提供 k8s 分区 资源和边缘节点资源。0 码力 | 33 页 | 4.41 MB | 1 年前3
 Python 标准库参考指南 3.6.15 属性来获得。 optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0(没有优化;__debug__ 为真)、1(断言被删除,__debug__ 为假)或 2(文档字符串也被删除)。 如果编译的源码不合法,此函数会触发SyntaxError 异常;如果源码包含 null 字节,则会触 发ValueError 异常。 7 The Python Library 您可以使用下划线将代码文字中的数字进行分组。 delattr(object, name) setattr() 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象 允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。 class dict(**kwarg) class dict(mapping, **kwarg) class property(fget=None, fset=None, fdel=None, doc=None) 返回 property 属性。 fget 是获取属性值的函数。fset 是用于设置属性值的函数。fdel 是用于删除属性值的函数。并且 doc 为 属性对象创建文档字符串。 一个典型的用法是定义一个托管属性 x: class C: def __init__(self): self._x = None def0 码力 | 1886 页 | 8.95 MB | 9 月前3 Python 标准库参考指南 3.6.15 属性来获得。 optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0(没有优化;__debug__ 为真)、1(断言被删除,__debug__ 为假)或 2(文档字符串也被删除)。 如果编译的源码不合法,此函数会触发SyntaxError 异常;如果源码包含 null 字节,则会触 发ValueError 异常。 7 The Python Library 您可以使用下划线将代码文字中的数字进行分组。 delattr(object, name) setattr() 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象 允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。 class dict(**kwarg) class dict(mapping, **kwarg) class property(fget=None, fset=None, fdel=None, doc=None) 返回 property 属性。 fget 是获取属性值的函数。fset 是用于设置属性值的函数。fdel 是用于删除属性值的函数。并且 doc 为 属性对象创建文档字符串。 一个典型的用法是定义一个托管属性 x: class C: def __init__(self): self._x = None def0 码力 | 1886 页 | 8.95 MB | 9 月前3
 Python 标准库参考指南 3.6.15 属性来获得。 optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0(没有优化;__debug__ 为真)、1(断言被删除,__debug__ 为假)或 2(文档字符串也被删除)。 如果编译的源码不合法,此函数会触发SyntaxError 异常;如果源码包含 null 字节,则会触 发ValueError 异常。 7 The Python Library 您可以使用下划线将代码文字中的数字进行分组。 delattr(object, name) setattr() 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象 允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。 class dict(**kwarg) class dict(mapping, **kwarg) class property(fget=None, fset=None, fdel=None, doc=None) 返回 property 属性。 fget 是获取属性值的函数。fset 是用于设置属性值的函数。fdel 是用于删除属性值的函数。并且 doc 为 属性对象创建文档字符串。 一个典型的用法是定义一个托管属性 x: class C: def __init__(self): self._x = None def0 码力 | 1886 页 | 8.95 MB | 9 月前3 Python 标准库参考指南 3.6.15 属性来获得。 optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0(没有优化;__debug__ 为真)、1(断言被删除,__debug__ 为假)或 2(文档字符串也被删除)。 如果编译的源码不合法,此函数会触发SyntaxError 异常;如果源码包含 null 字节,则会触 发ValueError 异常。 7 The Python Library 您可以使用下划线将代码文字中的数字进行分组。 delattr(object, name) setattr() 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象 允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。 class dict(**kwarg) class dict(mapping, **kwarg) class property(fget=None, fset=None, fdel=None, doc=None) 返回 property 属性。 fget 是获取属性值的函数。fset 是用于设置属性值的函数。fdel 是用于删除属性值的函数。并且 doc 为 属性对象创建文档字符串。 一个典型的用法是定义一个托管属性 x: class C: def __init__(self): self._x = None def0 码力 | 1886 页 | 8.95 MB | 9 月前3
共 62 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7














 
 