文章目录
ArgoCD
ArgoCD 简介
总结ArgoCD是基于 kubernetes 的声明式 Gitops 持续部署工具
- 应用定义,配置和环境变量管理等等,都是声明式基于云原生的。
- 所有声明清单都存储在代码仓库中,受版本管理
- 应用发布和生命周期管理都是自动化的,可审计的。
Argo CD 是一个基于 GitOps 的持续交付工具,用于管理和部署应用程序到 Kubernetes 集群。它通过将声明性配置文件与实际状态进行比较,并自动调整实际状态以保持一致,实现了基于 GitOps 的持续交付和应用程序管理。
以下是 Argo CD 的一些主要特点和功能:
- 声明性配置: Argo CD 使用 Kubernetes 的声明性配置文件(如 YAML 文件)来描述应用程序的期望状态。这些配置文件存储在 Git 存储库中,使其易于版本控制和跟踪。一般使用Kustomize。
- 自动同步: Argo CD 监听 Git 存储库中的配置文件变更,并自动将应用程序的实际状态与配置文件进行比较和同步。这样,您只需将更改推送到 Git 存储库,Argo CD 将负责将应用程序部署到集群中。
- 多环境支持: Argo CD 支持多个环境(例如开发、测试、生产)的管理。您可以使用相同的配置文件和工作流程来部署和管理不同环境中的应用程序。
- 应用程序生命周期管理: Argo CD 提供应用程序的全生命周期管理,包括部署、更新、回滚和删除。它可以跟踪应用程序的版本历史,并支持回滚到先前的版本。
- 同步策略和选项: Argo CD 允许您配置同步策略和选项,以定义应用程序的自动同步行为。您可以控制何时触发同步、是否进行修剪操作以及其他同步行为的细节。
- 应用程序比较: Argo CD 使用 Kubernetes API 与集群进行通信,获取当前部署的应用程序的实际状态。然后,它将实际状态与声明性配置文件中定义的期望状态进行比较。
- 状态同步: 如果实际状态与期望状态不一致,Argo CD 将自动采取必要的操作来调整实际状态,使其与期望状态保持一致。这可能涉及创建、更新或删除 Kubernetes 资源。
- 应用程序健康检查: Argo CD 监测应用程序的健康状态,以确保部署成功。它可以通过检查容器的就绪状态、服务的可用性和自定义的健康检查指标来确定应用程序是否正常运行。
- 持续交付和自动化: 通过与 CI/CD 工具集成,Argo CD 可以实现持续交付流程。它可以自动部署新的代码版本,通过自动化流水线进行构建、测试和部署,并在部署完成后更新应用程序的状态。
- 可视化界面和监控: Argo CD 提供了一个直观的 Web 界面,用于查看和管理应用程序的状态。它显示了应用程序的拓扑图、部署历史、健康状态和同步状态。此外,Argo CD 还提供了监控和警报功能,以帮助用户监测应用程序的性能和可用性。
Argo CD 是一个强大的工具,可以简化和自动化 Kubernetes 应用程序的部署和管理过程。它遵循 GitOps 的最佳实践,提供了可靠、可扩展和可观察的持续交付解决方案。无论是单个应用程序还是大规模的多环境部署,Argo CD 都可以帮助您实现一致性和可控性。
GitOps介绍
GitOps 是一种基于 Git 的运维方法论,它将应用程序的配置和部署状态存储在版本控制系统中,通常是 Git。通过使用 GitOps,团队可以实现基础设施即代码(Infrastructure as Code)和持续交付(Continuous Delivery),以实现更高效、可靠和可重复的应用程序部署和管理。
GitOps 的核心思想是将应用程序的期望状态(Desired State)以声明性的方式定义并存储在版本控制系统中。这包括应用程序的配置、部署规范、服务拓扑和环境变量等。团队成员可以通过提交代码到版本控制系统来更新应用程序的期望状态。
GitOps 的工作流程如下:
- 应用程序的期望状态以声明性的方式定义在版本控制系统中,例如 Git 存储库。
- 运维工具(例如 Argo CD)会监测版本控制系统中的变更,并将期望状态与实际状态进行比较。
- 如果实际状态与期望状态不一致,运维工具会自动采取必要的操作来调整实际状态,使其与期望状态保持一致。
- 运维工具会定期轮询版本控制系统,以确保实际状态与期望状态保持同步。
通过使用 GitOps,团队可以实现以下优势:
- 基础设施即代码:通过将应用程序的配置和部署规范存储在版本控制系统中,团队可以将基础设施视为代码,并应用软件开发中的最佳实践,例如版本控制、代码审查和自动化测试。
- 可重复性和可审计性:由于应用程序的期望状态存储在版本控制系统中,团队可以轻松地重现和审计每个部署的过程,确保一致性和可靠性。
- 自动化和持续交付:通过自动化工具监测版本控制系统并自动调整实际状态,团队可以实现持续交付,并快速、可靠地部署应用程序。
- 多环境管理:GitOps 支持多环境部署,团队可以轻松地在不同的环境中部署和管理应用程序,例如开发、测试和生产环境。
总而言之,GitOps 提供了一种强大的方式来管理和部署应用程序,通过将应用程序的期望状态存储在版本控制系统中,并通过自动化工具实现状态的自动调整,使团队能够实现持续交付、可靠性和可审计性。
Argo CD 的工作流程
Argo CD 的工作流程如下:
- 创建应用程序: 用户通过 Argo CD 的命令行界面或 Web 界面创建应用程序。在创建应用程序时,用户需要指定应用程序的名称、Git 存储库的 URL、分支或标签以及路径等信息。
- GitOps 同步: Argo CD 定期轮询配置的 Git 存储库,检测应用程序配置文件的变更。一旦发现变更,它会触发同步过程。
- 应用程序同步: Argo CD 从 Git 存储库中获取应用程序的声明性配置文件(例如 YAML 文件),并将其与当前的实际状态进行比较。
- 状态比较: Argo CD 使用 Kubernetes API 与集群进行通信,获取当前部署的应用程序的实际状态。然后,它将实际状态与声明性配置文件中定义的期望状态进行比较。
- 状态同步: 如果实际状态与期望状态不一致,Argo CD 将自动采取必要的操作来调整实际状态,使其与期望状态保持一致。这可能涉及创建、更新或删除 Kubernetes 资源。
- 应用程序健康检查: Argo CD 监测应用程序的健康状态,以确保部署成功。它可以通过检查容器的就绪状态、服务的可用性和自定义的健康检查指标来确定应用程序是否正常运行。
- 持续同步: Argo CD 会定期轮询 Git 存储库,以确保应用程序的状态与声明性配置文件保持同步。如果发现配置文件有更新,它将触发新一轮的同步过程,以将实际状态调整为期望状态。
- 可视化界面和监控: Argo CD 提供了一个直观的 Web 界面,用于查看和管理应用程序的状态。用户可以在界面上查看应用程序的拓扑图、部署历史、健康状态和同步状态。此外,Argo CD 还提供了监控和警报功能,以帮助用户监测应用程序的性能和可用性。
通过以上工作流程,Argo CD 实现了基于 GitOps 的持续交付和应用程序管理。它简化了应用程序的部署和更新过程,并提供了可视化界面和监控功能,使用户能够轻松地管理和监控 Kubernetes 环境中的应用程序。
argocd和jinkens对比
下面是对 Argo CD 和 Jenkins 进行比较的扩展表格:
特点 | Argo CD | Jenkins |
---|---|---|
功能定位 | 应用程序部署和持续交付 | 自动化构建、测试和部署 |
架构和工作原理 | 基于 Kubernetes 架构,使用 GitOps 方法 | 独立的自动化服务器,可在不同操作系统上运行 |
CI/CD 功能 | 应用程序版本控制、回滚、自动化部署和健康检查 | 广泛的构建、测试和部署功能 |
社区和生态系统 | 活跃的社区,与其他云原生工具有良好的集成 | 庞大的用户社区和丰富的插件生态系统 |
可扩展性 | 支持多集群部署,可与其他工具和平台集成 | 丰富的插件生态系统,可定制和扩展功能 |
可视化界面 | 提供直观的 Web 界面和应用程序拓扑图 | 提供 Web 界面和流水线可视化编辑器 |
配置管理 | 使用声明性配置文件进行应用程序管理 | 支持流水线脚本和可视化编辑器进行配置 |
持续交付流程 | 基于 GitOps 方法实现自动化部署和更新 | 可以定义复杂的流水线来处理构建和部署流程 |
可观测性 | 提供应用程序状态监控和事件通知 | 支持构建和部署日志记录和报告 |
安全性 | 支持 RBAC 权限控制和敏感数据管理 | 提供安全性插件和功能来保护构建和部署过程 |
Argo CD 和 Jenkins 是两个在持续集成和持续交付 (CI/CD) 领域常用的工具,它们有一些共同的目标,但在功能和使用方式上有一些区别。下面是对 Argo CD 和 Jenkins 进行对比的一些关键点:
- 功能定位:
- Argo CD:Argo CD 是一个专注于应用程序部署和持续交付的工具,它使用 GitOps 方法来自动化应用程序的部署和更新。它主要关注于将应用程序与 Git 存储库中的声明性配置文件进行同步,并确保应用程序始终处于所需的状态。
- Jenkins:Jenkins 是一个功能强大的自动化服务器,它提供了广泛的插件生态系统,用于构建、测试和部署软件。Jenkins 可以处理复杂的构建流程、集成测试和部署任务,并支持多种编程语言和工具。
- 架构和工作原理:
- Argo CD:Argo CD 基于 Kubernetes 架构,通过自定义资源 (Custom Resource) 和控制器来管理应用程序的部署和更新。它使用 Git 存储库中的声明性配置文件来定义应用程序的期望状态,并通过与 Kubernetes API 交互来实现状态的同步。
- Jenkins:Jenkins 是一个独立的自动化服务器,它可以在不同的操作系统上运行。Jenkins 使用插件来扩展其功能,并提供了一个 Web 界面和流水线脚本 (Pipeline Script) 来定义和执行构建和部署流程。
- CI/CD 功能:
- Argo CD:Argo CD 提供了应用程序的持续交付功能,它可以自动检测 Git 存储库中的变更,并将应用程序部署到 Kubernetes 集群中。它支持应用程序的版本控制、回滚、自动化部署和健康检查等功能。
- Jenkins:Jenkins 是一个通用的 CI/CD 工具,它提供了广泛的插件来支持不同的构建、测试和部署场景。Jenkins 可以根据代码的提交、定时触发或其他触发条件来执行构建和部署任务,并支持复杂的流水线定义和集成测试。
- 社区和生态系统:
- Argo CD:Argo CD 是一个相对较新的项目,但已经得到了广泛的关注和采用。它有一个活跃的社区,并且与其他云原生工具和项目(如 Kubernetes、Helm 等)有良好的集成。
- Jenkins:Jenkins 是一个成熟的项目,拥有庞大的用户社区和丰富的插件生态系统。它已经被广泛应用于各种软件开发和交付流程中,并有大量的文档和教程可供参考。
综上所述,Argo CD 和 Jenkins 在功能和使用方式上有一些区别。Argo CD 更专注于应用程序的部署和持续交付,使用 GitOps 方法来实现自动化。Jenkins 则是一个通用的自动化服务器,提供了广泛的插件和流水线功能,适用于各种构建、测试和部署场景。选择使用哪个工具取决于具体的需求和使用情景。
kustomize介绍
Kustomize 是一个用于 Kubernetes 应用程序配置管理的开源工具。它允许您对 Kubernetes 配置进行自定义和重用,以便根据不同的环境、部署目标或团队需求生成不同的配置。
以下是 Kustomize 的一些主要特点和功能:
- 声明式配置: Kustomize 使用声明性配置文件来描述应用程序的期望状态。您可以定义资源对象(如部署、服务、配置映射等)以及它们的属性和关联关系,而无需编写复杂的模板。
- 配置重用: Kustomize 提供了一种配置重用机制,称为“基础”。您可以定义一组通用的基础配置,并在不同的环境或部署目标中引用它们。这样,您可以避免重复编写相似的配置,并轻松管理和更新共享的配置片段。
- 覆盖和合并: Kustomize 允许您使用覆盖和合并的方式来修改基础配置。您可以定义“覆盖”文件,其中包含对基础配置的修改,以满足特定环境或需求。Kustomize 将自动合并基础配置和覆盖文件,生成最终的配置。
- 资源生成: Kustomize 提供了一些资源生成选项,用于自动生成一些常见的资源配置,如命名空间、标签选择器和服务账户等。这样,您可以简化配置的编写,并确保生成的配置符合最佳实践和约定。
- 可插拔: Kustomize 是一个可插拔的工具,可以与其他工具和流程集成。它可以与持续集成/持续交付 (CI/CD) 系统、GitOps 工具和其他 Kubernetes 工具链中的组件进行配合使用。
Kustomize 的设计理念是提供一种简单而灵活的方式来管理 Kubernetes 应用程序的配置。它强调声明性配置和可重用性,使得配置管理变得更加可维护和可扩展。无论是单个应用程序还是复杂的多环境部署,Kustomize 都可以帮助您轻松管理和定制 Kubernetes 配置。
ArgoCD和kustomize关系
Argo CD 和 Kustomize 是两个独立但可以互补的工具,它们在 Kubernetes 应用程序的部署和管理过程中可以一起使用。
在实际应用中,您可以使用 Kustomize 来管理和定制应用程序的配置,将其组织为可重用的基础配置和环境特定的覆盖文件。然后,您可以将这些配置文件存储在 Git 存储库中,并使用 Argo CD 来监视和部署这些配置文件。Argo CD 可以与 Kustomize 集成,自动识别和应用 Kustomize 配置,以确保应用程序的部署和同步符合预期。
因此,Argo CD 和 Kustomize 可以一起使用,以实现基于 GitOps 的持续交付和灵活的配置管理。您可以使用 Kustomize 来生成和管理应用程序的配置,然后使用 Argo CD 来自动化部署和管理这些配置。这种组合可以提供更高效、可重复和可控的应用程序交付和配置管理流程。
安装argocd
kubekey | k9s
介绍两种安装方式,方式1:在kubesphere3.3中开启devops组件也会安装argocd;方式2:在k8s中部署如下:
- 部署argocd
# kubectl create namespace argocd
# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install .yaml
- 暴露argocd控制台
- argocd控制台admin账号密码获取
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
- 登录argocd控制验证部署
argocd控制台介绍
首页
首页展示引用列表,以及左上方有应用创建的入口
应用创建表单
在 Argo CD 中创建应用时,您需要提供一些配置信息来定义应用的源代码、目标环境和部署方式。这些配置信息在 Argo CD 中分为四个主要部分:General(常规)、Source(源代码)、Destination(目标环境)和Directory(目录)。
- General(常规): 在常规配置中,您需要提供应用的名称、命名空间和项目名称。应用名称是在 Argo CD 中唯一标识应用的名称,命名空间是应用将被部署到的 Kubernetes 命名空间,项目名称用于将应用组织到逻辑项目中。
- Source(源代码): 在源代码配置中,您需要指定应用的源代码存储库和路径。您可以选择使用 Git 存储库或 Helm 存储库作为源代码存储库。对于 Git 存储库,您需要提供存储库 URL、分支或标签以及路径。对于 Helm 存储库,您需要提供存储库名称、存储库 URL 和 Helm 配置文件路径。
- Destination(目标环境): 在目标环境配置中,您需要指定应用程序将要部署到的 Kubernetes 环境。您可以选择将应用程序部署到单个 Kubernetes 集群或多个集群中。对于单个集群,您需要提供集群的名称和命名空间。对于多个集群,您需要提供一个目标服务器定义(Target Server Definition),其中包含每个集群的名称、服务器 URL、证书和其他连接详细信息。
- Directory(目录): 在目录配置中,您可以选择性地指定应用程序的根目录和配置文件路径。如果您的应用程序是使用 Kustomize 进行管理的,您可以指定 Kustomize 根目录,并选择要应用的 Kustomize overlays。如果您的应用程序使用其他配置文件,请指定配置文件的路径。
通过提供这些配置信息,您可以在 Argo CD 中创建一个应用程序,并将其与源代码存储库关联起来,指定目标环境以及配置文件的位置。Argo CD 将使用这些信息来自动部署和同步应用程序的状态,确保它与配置文件的期望状态保持一致。
SYNC OPTIONS(同步选项)
在 Argo CD 的 SYNC OPTIONS 中,还有一些其他选项可以用于更精细地控制应用程序的同步行为。以下是这些选项的介绍:
- SKIP SCHEMA VALIDATION (跳过模式验证): 默认情况下,Argo CD 会对应用程序的声明性配置文件进行模式验证,以确保其符合 Kubernetes 资源的模式。但有时可能需要跳过模式验证,特别是当使用自定义的资源模式时。通过设置 SKIP SCHEMA VALIDATION 为 true,可以跳过模式验证。
- AUTO-CREATE NAMESPACE (自动创建命名空间): 如果应用程序的声明性配置文件中指定了不存在的命名空间,Argo CD 默认会拒绝同步操作。但有时可能希望自动创建不存在的命名空间。通过设置 AUTO-CREATE NAMESPACE 为 true,可以自动创建命名空间。
- PRUNE LAST (最后修剪): 在同步操作中,Argo CD 默认会先创建或更新资源,然后再删除不再需要的资源。但有时可能希望先删除不再需要的资源,然后再创建或更新资源。通过设置 PRUNE LAST 为 true,可以将删除操作放在同步操作的最后。
- APPLY OUT OF SYNC ONLY (仅应用不同步的资源): 默认情况下,Argo CD 会应用所有资源的变更,无论它们是否与声明性配置文件中的定义一致。但有时可能只希望应用与声明性配置文件不一致的资源变更。通过设置 APPLY OUT OF SYNC ONLY 为 true,可以仅应用不同步的资源变更。
- RESPECT IGNORE DIFFERENCES (遵守忽略的差异): 在同步操作中,Argo CD 默认会忽略声明性配置文件中标记为忽略的差异。但有时可能希望遵守忽略的差异,即使它们与实际状态不一致。通过设置 RESPECT IGNORE DIFFERENCES 为 true,可以遵守忽略的差异。
这些 SYNC OPTIONS 可以根据具体需求进行配置,以实现更精确的同步行为。通过灵活使用这些选项,可以满足特定场景下的同步需求,并确保应用程序的状态与预期保持一致。
SYNC POLICY(同步策略)
在 Argo CD 中,SYNC POLICY(同步策略)用于定义应用程序的自动同步行为。它允许您配置何时以及如何触发应用程序的同步操作。以下是 Argo CD 中的一些常见 SYNC POLICY 选项:
- Automated Sync (自动同步): 这是 Argo CD 的默认同步策略。当应用程序的声明性配置文件发生变化时,自动触发同步操作。这意味着 Argo CD 会自动检测并应用配置文件的更改,以确保应用程序与声明性配置文件保持一致。
- Manual Sync (手动同步): 在手动同步策略下,应用程序的同步操作不会自动触发。您需要手动执行同步操作,以将应用程序的实际状态与声明性配置文件同步。这种策略适用于需要手动控制同步时机的情况。
- Prune (修剪): 在修剪策略下,Argo CD 会自动删除不再需要的资源。当声明性配置文件中不再包含某个资源定义时,Argo CD 会自动将其删除。这可以确保应用程序的实际状态与声明性配置文件保持一致,避免遗留的无效资源。
- Sync Wave (同步波): 同步波是一种分批同步的策略,用于控制应用程序的同步速率。通过将应用程序分为多个同步波,可以逐步同步应用程序的不同部分,以减轻集群的负载和避免突发的大规模同步操作。
- Sync Options (同步选项): SYNC POLICY 还可以与 SYNC OPTIONS 结合使用,以进一步细化同步行为。SYNC OPTIONS 允许您配置诸如跳过模式验证、自动创建命名空间、最后修剪、仅应用不同步的资源等选项,以满足特定的同步需求。
通过合理配置 SYNC POLICY,您可以根据应用程序的特性和需求,定义适合的同步策略,确保应用程序在 Kubernetes 环境中始终保持最新和一致的状态。
应用功能面板
功能如下,可手动同步、删除、回滚等。
历史记录和回滚
点击历史记录和回滚,可查看部署历史记录及回滚到历史版本
应用详情
在 Argo CD 的应用详情中,您会看到以下几个部分的信息:SUMMARY(概要)、PARAMETERS(参数)、MANIFEST(清单)和EVENTS(事件)。下面是对每个部分的介绍:
- SUMMARY(概要): SUMMARY 部分提供了有关应用的基本信息的总览。它包括应用的名称、命名空间、项目名称、源代码存储库和目标环境等。还显示了应用的当前状态和最新的同步状态,以及最后一次同步的时间戳。
- PARAMETERS(参数): PARAMETERS 部分列出了应用的参数列表。参数是在部署过程中用于配置应用的可配置项。在 PARAMETERS 部分,您可以查看每个参数的名称、值和描述。如果允许,您可以在此处修改参数的值,以便在下一次同步时应用新的配置。
- MANIFEST(清单): MANIFEST 部分显示了应用的配置文件清单。它列出了应用的所有配置文件,包括 YAML 或 JSON 文件。您可以查看每个配置文件的内容,以了解应用的详细配置信息。通过 MANIFEST 部分,您可以检查应用的配置文件是否正确,并对需要进行修改的配置文件进行编辑。
- EVENTS(事件): EVENTS 部分显示了与应用相关的事件日志。这些事件包括同步事件、资源创建和更新事件等。您可以查看每个事件的详细信息,包括事件类型、资源名称、时间戳和事件描述。EVENTS 部分提供了一个历史记录,帮助您了解应用的状态变化和操作记录。
SUMMARY(概要)
PARAMETERS(参数)
在 Argo CD 的应用参数(PARAMETERS)部分,有几个参数:VERSION、NAME PREFIX 和 NAME SUFFIX。下面是对每个参数的介绍:
- VERSION: VERSION 参数用于指定应用的版本。它可以是一个字符串或数字,用于标识应用的不同版本。通过在应用的配置文件中使用 VERSION 参数,您可以轻松地管理和跟踪不同版本的应用。
- NAME PREFIX: NAME PREFIX 参数用于为应用的资源名称添加前缀。资源名称是 Kubernetes 中的对象标识符,用于唯一标识每个资源。通过使用 NAME PREFIX 参数,您可以为应用的资源名称添加一个统一的前缀,以便更好地组织和识别应用的资源。
- NAME SUFFIX: NAME SUFFIX 参数用于为应用的资源名称添加后缀。与 NAME PREFIX 类似,NAME SUFFIX 允许您为应用的资源名称添加一个统一的后缀,以便更好地组织和识别应用的资源。通过使用 NAME SUFFIX 参数,您可以在资源名称的末尾添加一个标识符或描述性的后缀。
这些参数提供了一种在部署应用时进行自定义配置的方式。通过设置 VERSION 参数,您可以管理不同版本的应用。而使用 NAME PREFIX 和 NAME SUFFIX 参数,可以为应用的资源名称添加统一的前缀和后缀,以便更好地组织和识别资源。这些参数可以根据您的需求进行自定义,并根据应用的特定要求进行配置。
argocd CD过程实战
参考官网文档第6小节 ,使用 GitOps 实现应用持续部署
- 将argocd测试项目迁移至gitlab,项目目录介绍如下:
Application | Description |
---|---|
guestbook | 作为普通 YAML 的 hello word 留言簿应用程序 |
ksonnet-guestbook | 作为 ksonnet 应用 |
helm-guestbook | 作为 Helm 图表的留言板应用 |
jsonnet-guestbook | 作为原始 jsonnet 的留言板应用 |
jsonnet-guestbook-tla | 作为原始 jsonnet,支持顶级参数 |
kustomize-guestbook | Kustomize应用程序,部署项目用到的k8s资源清单。和helm类似封装到了一起 |
pre-post-sync | 演示 Argo CD PreSync 和 PostSync 钩子 |
sync-waves | 演示带有钩子的 Argo CD 同步 |
helm-dependency | 演示如何从上游存储库自定义 OTS(现成的)helm 图表 |
sock-shop | 微服务演示应用 (https://microservices-demo.github.io)) |
plugins | 演示配置管理插件用法的应用 |
修改argocd-example-appskustomize-guestbookguestbook-ui-deployment.yaml下镜像,使用《6.云原生之DevOps和CICD》章节CICD制作上传到harbor的镜像。
- 创建应用
- GENERAL常规配置
- SOURCE配置
- DESTINATION目的地配置
- 点击CREATE创建应用
- 点击进入详情面板,手动同步
- 查看同步情况
- 登录kubesphere查看部署情况,验证完成
原文地址:https://blog.csdn.net/weixin_45690643/article/details/135722042
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_61107.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!