Crossplane 使用开源的 管道 托管服务连接到 Argo CD 将 AWS (crosspro是什么牌子的轮胎)

Crossplane 使用开源的 管道 托管服务连接到 Argo CD 将 AWS (crosspro是什么牌子的轮胎)

云基础设施正在迅速成熟起来,使得企业能够利用新架构和服务以及运行在Amazon Elastic Container Service (Amazon ECS)上的应用程序。基础设施团队发现他们在使用AWS CloudFormation等工具管理传统云环境,同时还在管理 Amazon ECS 或 Kubernetes 等托管的容器本机系统。

为了弄清此功能和复杂性提高的情况,用户转而使用 GitOps 及和等工具来管理其工作流程。这样一来,组织可以采用自行决定的工作流程来编写和部署应用程序,但这些应用程序必须特定于该环境或平台。

这便是Crossplane项目的用武之地。Crossplane 基于许可证发布,支持从对复杂的应用程序和基础设施进行定义、部署和管理。Crossplane 使用 Kubernetes API 明确定义、部署和管理云基础设施,包括 SaaS 服务。Crossplane 的功能可以包含在 CI/CD 管道中,从而提供一种单一方法来定义和部署任何资源,无论该资源在 Kubernetes 本机上还是属于托管服务的组件。

在本文中,我们将说明如何使用 Crossplane 和 Argo CD 来通过Amazon Relational>

先决条件

要设置部署管道,我们需要在“控制”Kubernetes 集群中安装 Crossplane 和 Argo CD。控制集群与“引导”集群的概念相似,但不同之处在于,它在“引导”集群创建完成后继续对其进行管理。从控制集群中,我们可以预置更多的 Kubernetes 集群,将应用程序部署到这些集群中,并且能对应用程序将使用的托管服务进行部署。虽然公开 Kubernetes API 的任何计算服务都适合我们的使用案例,我们仍选择将Amazon Elastic Kubernetes Service (Amazon EKS)用于控制集群。

Argo CD 可使我们从任何托管的 Git 存储库中进行持续部署。在本文中,我们将使用 GitHub,以及公开存储库和已经存在于之上的基础设施。如果您想使用自己的存储库,或者希望从现有存储库的分支来进行部署,您将需要 GitHub 账户。

最后,使用分发 Crossplane。为了轻松安装 Crossplane 和必要的提供商,必须安装 Helm。我们将使用 Helm 3 安装 Crossplane,但使用旧版 Helm 的说明可参见Crossplane 安装文档。

开始之前,请确保您已完成以下全部操作:

安装并设置 Crossplane

要在 AWS 上部署托管服务,我们必须在 Amazon EKS 集群中安装 Crossplane 和提供商 AWS。使用 Helm 3 时,可以通过以下命令完成此操作:

kubectl create namespace crossplane-systemhelm repo add crossplane-alphainstall crossplane --namespace crossplane-system crossplane-alpha/crossplane --version 0.8.0 --set clusterStacks.aws.deploy=true --set clusterStacks.aws.version=v0.6.0 --disable-openapi-validation
复制代码

完成安装后,您应该可以在 crossplane-system 命名空间中看到以下四个 pod:

$ kubectl get pods -n crossplane-systemNAMEREADYSTATUSRESTARTSAGEcrossplane-65bdd6599c-sxtr91/1Running02m26scrossplane-stack-manager-5556749f76-9zvl41/1Running02m26sstack-aws-578bt0/1Completed02m18sstack-aws-858b7b8bb9-v2cz61/1Running02m1s
复制代码

我们还希望将 AWS 凭证加载到控制集群中,以便 Crossplane 能够代表我们预置基础设施。Crossplane 文件中包含丰富的文档,介绍如何添加 AWS 凭证。但是我们打算在此教程中创建两个单独的 AWS 提供商 对象:一个用于在中预置资源,另一个用于。这两个对象都可以引用同一个账户,但字段应不同。

要创建凭证,请运行以下命令(假设使用 默认 配置文件):

BASE64ENCODED_AWS_ACCOUNT_CREDS=$(echo -e "[default]\naws_access_key_id = $(aws configure get aws_access_key_id --profile default)\naws_secret_access_key = $(aws configure get aws_secret_access_key --profile default)" | base64| tr -d "\n")cat > aws-credentials.yaml <<EOFapiVersion: v1kind: Secretname: aws-account-credsnamespace: crossplane-systemtype: Opaquecredentials: ${BASE64ENCODED_AWS_ACCOUNT_CREDS}apiVersion: aws.crossplane.io/v1alpha3kind: Providername: aws-provider-westcredentialsSecretRef:name: aws-account-credsnamespace: crossplane-systemkey: credentialsregion: us-west-2apiVersion: aws.crossplane.io/v1alpha3kind: Providername: aws-provider-eastcredentialsSecretRef:name: aws-account-credsnamespace: crossplane-systemkey: credentialsregion: us-east-1kubectl apply -f "aws-credentials.yaml"
复制代码

完成这些步骤后,您应该会看见以下资源创建:

secret/aws-account-creds 已创建provider.aws.crossplane.io/aws-provider-west 已创建provider.aws.crossplane.io/aws-provider-east 已创建
复制代码

最后,创建一个新的命名空间,以用于本指南剩余部分中创建的资源:

kubectl create namespace wordpress-app
复制代码

安装 Argo CD

Argo CD 可以使用以下命令安装:

kubectl create namespace argocdkubectl apply -n argocd -f复制代码

要在您的本地计算机上查看 Argo CD UI,您可以从 Amazon EKS 集群进行端口转发:

kubectl port-forward svc/argocd-server -n argocd 8080:443
复制代码

请注意,Argo CD 使用自签名证明,可能需要在本地主机上启用不安全的连接来利用端口转发功能。

现在,如果您导航至localhost:8080,您应该能够查看 Argo CD UI。初次登录时,用户名为,密码为 Argo CD API 服务器的 pod 名称。要查找您生成的 pod 名称,请运行以下命令:

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2</code
复制代码

有关更多信息,请查看 Argo CD入门指南。

部署基础设施

由于 Crossplane 可使应用程序以与基础设施无关的方式部署,我们将同时在和预置基础设施,然后将 WordPress 部署到每一个基础设施。要开始,我们可以通过启动 UI、登录并转至设置|项目|新项目来设置 ArgoCD 项目。您可以按照您认为合适的方式配置您的项目,但如果您打算在长期生产场景下运行,最简单的方法是授予对此教程最高级别的访问权并缩小范围。重要的是,您至少必须将您打算使用的所有 Crossplane 集群范围对象类型加入白名单。此外,您必须至少启用in-cluster作为目标。

Argo CD 附带一个默认项目,具有完整的权限,为了简单起见,我们将在整个教程中使用该项目:

现在,我们已经配置一个项目,我们希望着手预置我们的基础设施。在 Argo CD 中,使用术语应用程序指代应作为一个单位部署的一组配置文件。应用程序使您可以为配置文件指定源存储库,然后再根据观察到的变化监视 Kubernetes 集群中的更新和创建或更新对象。

如前所述,我们已经在GitHub 存储库中为本教程定义了我们的基础设施。如果您查看了目录,您将发现和的子目录。这些目录中的配置文件在两个不同区域中指定相同的基础设施,包括从 VPC 到 Amazon EKS 集群的一切。有些资源用于以统计方式在 AWS 上预置资源(例如,在创建 Kubernetes 对象时立即创建外部资源),另一些是用于动态预置的类别(例如,创建一个可用于稍后以抽象方式预置资源的配置)。您可以在Crossplane 文档中阅读有关静态和动态预置的更多信息。

要创建我们的基础设施应用程序,请转至应用程序|新应用程序并设置以指向存储库的目录。目的地应设置为,表示我们打算在安装了 Crossplane 和 Argo CD 的相同 Kubernetes 集群中创建这些资源。应用程序的完整配置应如下所示:

点击创建,您应该能够通过点击应用程序来查看每个资源及其状态。您将注意到,我们在每个区域创建 VPC,并为这些 VPC 创建子网和网络组件,并且在每个 VPC 中预置 Amazon EKS 集群。如果为凭证被用于账户凭证的账户转至 AWS 控制台,您应看到这些资源在其各自控制面板中创建。

我们对argo-west-clusterargo-east-cluster的准备情况特别感兴趣,它们是我们在每个区域中创建的 Amazon EKS 集群的申明。Crossplane 中的申明指的是用作抽象请求以具体实施托管服务的 Kubernetes 对象。

在本例中,申明argo-west-clusterargo-east-cluster指的是通过EKSCluster满足的KubernetesCluster申明。我们可以像其他提供商提供的托管 Kubernetes 产品一样来轻松满足这些申明。此过程可能需要一些时间,但如对它们进行完全预置,Crossplane 将能够在每个集群上计划我们的应用程序。您将在它们做好准备后看到 Argo CD UI 中的每个集群的相应和KubernetesTarget

在 us-west-2 中部署应用程序

我们首先将在Amazon EKS 集群中部署我们的应用程序,即 WordPress 博客。为执行此操作,请创建一个新的 Argo CD 应用程序,目前将指向目录。

创建时,我们应立即看到两个资源正在创建:KubernetesApplicationMySQLInstanceKubernetesApplication对象指定我们希望部署到Amazon EKS 集群中的资源。您将在/app-1/kubernetesapplication.yaml文件中找到命名空间部署服务的模板。它们是在 Kubernetes 中运行面向公众的 WordPress 博客的必要 Kubernetes 组件,但我们还需要一个数据库来支持应用程序。虽然我们可以在集群中运行 MySQL 数据库,利用 Amazon RDS 之类的托管服务可使我们将此责任交给有经验的云提供商。/app-1/mysqlinstanceclaim.yaml为 MySQL 数据库定义申明,该申明将由我们作为基础设施部署的一部分创建的RDSInstanceClass满足。

创建这些资源可使 Crossplane 预置 Amazon RDS 实例、获取连接信息,然后将实例注入 WordPress 应用程序中,之后再将该应用程序部署到中的 Amazon EKS 集群。当此过程完成时,您应该看到与MySQLInstance相关的 Argo CD UI 中显示。

不久之后,您应该能够点击wordpress-west-serviceKubernetesApplicationResource并在 YAML 清单底部看到主机名称。

复制并粘贴到您的浏览器后,您应进入 WordPress 设置页面。

在 us-east-1 中部署应用程序

能够将应用程序与其相关基础设施的申明一起部署非常有价值,但此模型真正的强大之处在于其便携性。为了进行演示,我们将在另一个区域中部署相同的应用程序配置。

在此教程中,我们将使用指向目录的来创建新的 Argo CD 应用程序。然而,如果您是存储库的拥有者,您只需将KubernetesApplication上的targetSelector更改为app: wordpress-east,将MySQLInstance申明上的classSelector更改为region: east即可修改我们用于的配置。事实上,如果您对两个应用程序目录进行比较,您将发现,除了上述更改外,配置几乎相同。

为我们的WordPress 应用程序创建 Argo CD 应用程序之后,我们应在wordpress-east-service KubernetesApplicationResource上再一次看到主机名称。导航至该地址,您将看到 WordPress 设置页面。

清理

要清理所有的已部署应用程序和基础设施组件,您可以简单地删除我们创建的每个 Argo CD 应用程序。所有的 AWS 基础设施组件及其相应的 Kubernetes 资源都将从集群中删除。

小结

Crossplane 项目可使基础设施拥有者使用 Kubernetes API 以标准化方式定义它们的自定义云资源,包括托管服务。该操作反过来可使应用程序开发人员以抽象方式编写工作负载,以便可以部署到任何位置,并且可以明确进行管理。

欢迎参与

Crossplane.io 项目是完全是开源的,我们非常欢迎您加入社区,帮助我们塑造云计算的未来。在和加入我们,收看两周一次的直播“The Binding Status”,并在上关注该项目。

Dan Mangum 是 Upbound 的软件工程师,主要负责该公司的开源 Crossplane 项目。他还是 Kubernetes 发行团队的成员,是 Kubernetes 项目及其他多个开源项目的积极贡献者。他是两周一次的直播“The Binding Status”的主播,这档节目专注于扩展 Kubernetes、构建 Crossplane 和塑造云计算的未来。请关注他的 Twitter@hasheddan。

原文链接:

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。