数据保护背景下,安全团队引入了哪些新技术进行防控升级?点击学习案例 了解详情
写点什么

使用开源的 Crossplane 将 AWS 托管服务连接到 Argo CD 管道

  • 2020 年 3 月 13 日
  • 本文字数:5248 字

    阅读完需:约 17 分钟

使用开源的 Crossplane 将 AWS 托管服务连接到 Argo CD 管道

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


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


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


在本文中,我们将说明如何使用 Crossplane 和 Argo CD 来通过 Amazon Relational Database Service (Amazon RDS) 将一个简单的应用程序部署到两个 AWS 区域。



先决条件

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


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


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


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



安装并设置 Crossplane

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


Bash


kubectl create namespace crossplane-systemhelm repo add crossplane-alpha https://charts.crossplane.io/alphahelm install 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:


Bash


$ kubectl get pods -n crossplane-systemNAME                                        READY   STATUS      RESTARTS   AGEcrossplane-65bdd6599c-sxtr9                 1/1     Running     0          2m26scrossplane-stack-manager-5556749f76-9zvl4   1/1     Running     0          2m26sstack-aws-578bt                             0/1     Completed   0          2m18sstack-aws-858b7b8bb9-v2cz6                  1/1     Running     0          2m1s
复制代码


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


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


Bash


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 <<EOF---apiVersion: v1kind: Secretmetadata: name: aws-account-creds namespace: crossplane-systemtype: Opaquedata: credentials: ${BASE64ENCODED_AWS_ACCOUNT_CREDS}---apiVersion: aws.crossplane.io/v1alpha3kind: Providermetadata: name: aws-provider-westspec: credentialsSecretRef: name: aws-account-creds namespace: crossplane-system key: credentials region: us-west-2---apiVersion: aws.crossplane.io/v1alpha3kind: Providermetadata: name: aws-provider-eastspec: credentialsSecretRef: name: aws-account-creds namespace: crossplane-system key: credentials region: us-east-1EOF
kubectl apply -f "aws-credentials.yaml"
复制代码


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


Bash


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


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


Bash


kubectl create namespace wordpress-app
复制代码


安装 Argo CD

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


Bash


kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
复制代码


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


Bash


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


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


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


Bash


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


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


部署基础设施

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


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



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


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


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




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


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


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



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

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




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


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



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



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



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

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


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


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


清理

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


小结

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


欢迎参与

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



Dan Mangum

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


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/connecting-aws-managed-services-to-your-argo-cd-pipeline-with-open-source-crossplane/


2020 年 3 月 13 日 17:27514

评论

发布
暂无评论
发现更多内容

百度智能云遇到三一重机,工程机械维保有了新方案

百度大脑

人工智能 三一重工

镜像是什么意思?分类有哪些?

行云管家

网络安全 镜像 堡垒机 云厂商

字节跳动Android面试:2021Android大厂面试知识分享

欢喜学安卓

android 程序员 面试 移动开发

番外1. OpenCV 图像处理之图片加载与视频加载

梦想橡皮擦

8月日更

云计算以及云计算周边词概念简单介绍-行云管家

行云管家

云计算 服务器 云服务

Linux内核分析学习路线总结(内核人员必看)

Linux服务器开发

操作系统 Linux内核 内核源码 内核开发 驱动开发

5 分钟,快速入门 Python JWT 接口认证

星安果

Python JWT

拍乐云创始人赵加雨:沉浸式音视频加持数智化未来世界

拍乐云Pano

资深大牛带你了解源码!最新Android面试题整理

欢喜学安卓

android 程序员 面试 移动开发

FastApi-06-请求体-3

Python研究所

FastApi 8月日更

现有市值管理机器人|交Y机器人系统源码搭建

Geek_23f0c3

做市机器人 去中心化市值管理机器人

一个弱鸡管理者如何带领一支牛逼的队伍?

弱鸡管理者

安全 技术人 创新 技术人应知的创新思维模型 管理经验

华为大神珍藏版:SpringBoot全优笔记,面面俱到太全了

Java~~~

Java 面试 微服务 Spring Boot 架构师

Ipfs未来价值怎么样?Ipfs值得投资吗?

区块链 分布式存储 IPFS fil IPFS未来价值

写作7堂课——【1.框架式写作】

LeifChen

框架 结构化思维 写作技巧 8月日更

一个算法“拿下”两个榜单!爱奇艺ICCV 2021论文提出人手三维重建新方法

爱奇艺技术产品团队

vr 论文 ICCV2021 高精度三维重建

摘下手机赛场的夏季“金牌”,荣耀的“飞人之路”

脑极体

从关门“振动”说起,在这部剧本杀综艺里,爱奇艺隐藏了多少技术“小心机”

爱奇艺技术产品团队

综艺节目 互动视频技术 爱奇艺

【共识专栏】Quorum机制与PBFT

趣链科技

区块链 共识机制 PBFT 共识算法

最全总结 | 聊聊 Python 数据处理全家桶(存储过程篇)

星安果

Python 数据库

一周信创舆情观察(7.26~8.1)

统小信uos

Spark 架构剖析:一个任务是怎么运行的

程序员赤小豆

大数据 spark 架构

Jmeter分布式压测实战及踩坑处理(含参数化)

互联网架构师小马

开放搜索电商行业模版驱动业务增长实践

阿里云大数据AI技术

阿里首席官珍藏,SpringCloud精通日记,血汗全在这了

Java~~~

Java 面试 微服务 Spring Cloud 架构师

Python RPC 不会?不妨看看这篇文章

星安果

Python RPC RPC架构

维护数据隐私和增强竞争优势的秘密

九河云安全

为什么拥抱能源的数字未来意味着在云上全力以赴

九河云安全

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java~~~

Java 面试 微服务 多线程 架构师

Github首次开放,一天遭狂转 50w 次!阿里内部不外传的 100 万字 Java 面试手册!

Java 程序员 架构 面试 计算机

使用PyTorch构建神经网络模型进行手写识别

Shirakawa

神经网络 机器学习 深度学习 PyTorch 手写识别

使用开源的 Crossplane 将 AWS 托管服务连接到 Argo CD 管道_开源_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章