基于Kubernetes的自定义AWS云平台搭建指南

2024/11/5 21:03:29

本文主要是介绍基于Kubernetes的自定义AWS云平台搭建指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

无论你是资深开发者还是刚入门的新手,你很可能已经接触过 Kubernetes。它可以说是部署容器化应用最流行的平台之一,用于部署容器化应用。

但我们是否仅仅应该把Kubernetes当作容器编排器来使用,还是它还有更多功能呢?

Kubernetes 允许你通过自己的自定义资源和功能来自定义其机制。它的可扩展 API 允许你定义这些资源,这些资源位于应用之外,比如云资源(例如在 GCP 中的一个 MySQL 实例或在 AWS 中的一个 S3 存储桶)。

这使你能够通过 Kubernetes 管理所有系统组件,从云资源到运行的应用。轻松地构建您自己的内部开发平台,该平台专门为您量身定制,让开发者能够管理并提供他们所需的一切来推出产品。

通过这个博客,我们将建立一个友好的平台,它将让我们能够简单地将应用部署到K8s上,并且配置AWS资源,例如。我们将使用AWS S3桶操作符来创建桶,并且使用Cyclops来获取一个极其简单的Kubernetes界面。

任何软件工程师现在可以选择几个选项,而在幕后,这会自动展开为一个专为您的组织设计和易于管理的复杂云架构。

支持一下我们!🙏

我们知道Kubernetes可能有些复杂。这就是为什么我们创建了Cyclops,一个真正地面向开发者的Kubernetes平台。简化了Kubernetes的复杂性,通过一个可定制的UI来部署和管理你的应用,符合你的需求。

我们正在将Cyclops作为一个开源项目来开发。如果有兴趣试试,这里有一个快速上手指南,可以在我们的仓库里找到。如果你喜欢Cyclops,可以给它点个⭐支持一下。

Support us with GitHub stars

什么是Kubernetes操作员?

Kubernetes operators 允许你通过自定义资源和逻辑来扩展 K8s 的功能,使 K8s 更加灵活。Operators 自然遵循 Kubernetes 的控制循环理念,即通过控制循环将资源的实际状态调整到定义的状态。

你可以将 Kubernetes 操作符分成两部分:

  • 自定义资源 - 通过自定义资源定义(CRDs),我们可以在Kubernetes API中扩展和添加新的类型和种类,使其更加灵活。
  • 控制器 - 实现上述的 控制循环,确保通过CRD定义的理想状态得以实现。控制器监听自定义资源的变动,并做出响应,确保系统达到理想状态。

例如,Kubernetes Deployments 是定义如何部署我们应用程序的资源,而控制器管理器实现控制循环,创建 Replica Sets 和 Pods,以确保我们的应用正常运行。

无需修改Kubernetes代码,你可以利用集群内的机制,如API和数据库。我们写了一篇关于CRDs以及Kubernetes是否只是一个高级数据库的问题的博客。它解释了如何让下面的命令成为一个有效的kubectl命令——详情请点击这里查看!

    kubectl get apples

    名字          年龄:
    green-apple   6秒

进入全屏 退出全屏

你完全可以自己动手实现一个 Kubernetes operator,但也可以选择直接安装已有的许多 operators 到你的集群中。在这个网站 https://operatorhub.io/,你可以找到一个长长的列表,看看这些适用于各种场景的知名 operators。

用于 Kubernetes 的 AWS 控制器

有一系列控制器可以帮助你管理 AWS 云资源,例如 S3 存储桶、数据库和应用程序。AWS Kubernetes 控制器 是一个项目,实现了一系列控制器来管理每个 AWS 服务。

例如,一个控制器定义了一个 Kubernetes 自定义资源,用于管理一个 AWS S3 存储桶,并确保所有的 S3 存储桶都已创建。其他 AWS 服务也一样,每个服务都有自己专用的控制器来管理。

如果我们使用提到的 S3 存储桶控制器的话,我们可以在 Kubernetes 集群中使用以下 YAML 来定义一个 S3 存储桶:

apiVersion: s3.services.k8s.aws/v1alpha1
kind: 存储桶 (cúnchù tǒng)
metadata:
# 名称:my-new-bucket
  name: my-new-bucket
spec:
  name: my-new-bucket
  标签配置 (bāojiān pèizhì):
    标签集 (bāojiān jí):
    - 键 (jiàn): env
      值 (zhí): prod
# 值:prod (键值对中的值表示生产环境)

进入全屏 退出全屏

spec 里,我们可以添加我们所需的 S3 桶的所有配置项,比如权限设置、对象生命周期策略和网站托管功能……但这次是通过 Kubernetes 资源来配置的。

一旦你将上述清单应用到配置了 S3 控制器的 Kubernetes 集群中,控制器就会在你的 AWS 账户中创建一个 S3 存储桶,并根据 YAML 中的定义设置所有配置。

独眼控制器

通过 Kubernetes 对象来分配云资源(在我看来)是一个很棒的概念。现在,你的 Kubernetes 集群不再仅仅运行容器,还在管理你系统的各个部分,比如网络策略和数据库服务。

在 Kubernetes 中定义云资源有好处,但也有一些缺点。你应该用哪些云资源,又该怎么配置?你需要填哪些字段,哪些值有效?配置完成后……你又该如何确保一切运行顺畅?

这些都是合理的疑问,这就是我们要用 Cyclops 来解决的 🔥

Cyclops 允许你将 Kubernetes 的所有复杂性隐藏在一个简单的界面下,任何人都可以根据具体需求自定义。在接下来的一章里,我们将 AWS 的 S3 存储桶控制器与 Cyclops 结合,以获得一个在某种程度上抽象复杂 S3 存储桶配置的用户界面。

架构,这是一张建筑的图片。

安装:

通过接下来的部分,你将安装 S3 控制器及其 Bucket 自定义资源定义。你不会像野蛮人那样通过 kubectl 来部署桶;我们还将安装 Cyclops,它自带了桶模板。

我们只需一条命令就能搞定这一切 🔥

在开始部署之前,我们需要满足一些前提条件。

  • 用于部署 S3 存储桶的 AWS 账户
  • 你的 S3 控制器可以使用的 AWS 账户凭证

  • 你需要一个具有 S3 存储桶权限的 访问密钥秘密访问密钥。你也可以使用带有完整权限的 S3 策略
  • 运行中的 Kubernetes 集群

  • 即使你将创建 AWS 资源,集群也不一定要在 AWS 上运行。如果你没有集群,可以使用 minikube 启动一个集群
  • kubectlhelm 命令行工具

如果你已经准备好上述所需的所有内容,可以使用一条命令同时安装Cyclops和S3桶控制器。确保填写你想要部署的区域以及先前提到的访问密钥和秘密访问密钥。

以下是在终端中输入的命令:

helm install cyclops-aws oci://registry-1.docker.io/cyclopsui/cyclops-aws-s3 \
--version 0.3.0 \
--namespace cyclops \
--create-namespace \
--set s3-chart.aws.region=<例如:us-west-2> \
--set aws.accessKeyId=<例如:AKIAIOSFODNN7EXAMPLE> \
--set aws.secretAccessKey=<例如:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY>

其中 <例如:us-west-2><例如:AKIAIOSFODNN7EXAMPLE><例如:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY> 需要根据实际情况替换。

请确保替换所有占位符,并以安全的方式处理您的访问密钥和秘密访问密钥。

全屏模式 退出全屏

你可以检查一下我们安装的所有 Pod 是否都已经启动并运行了。

kubectl get pods -n cyclops
# 获取cyclops命名空间下的pod列表

全屏 退出全屏

你应该看到类似这样的输出

    名称(NAME)                                    就绪状态   状态      重启次数(RESTARTS)   年龄(AGE)
    cyclops-aws-s3-chart-684cdd9b8c-cpfrz   1/1     运行       0          40s
    cyclops-ctrl-5ddd9b8bc9-7b5pq           1/1     运行       0          40s
    cyclops-ui-7d55d588cd-kdrgt             1/1     运行       0          40s

点击这里进入全屏 / 点击这里退出全屏

一旦Pod运行起来,你可以执行如下命令,让你的Cyclops实例可以通过端口映射访问。

    kubectl port-forward svc/cyclops-ui 3000:3000 -n cyclops

全屏 退出全屏

你现在可以在这里访问Cyclops:http://localhost:3000/

独眼模块

使用 Cyclops 部署 S3 存储桶

要创建一个新的S3存储桶,请在您的Cyclops仪表板中进入添加模块,并选择s3-bucket模板。

Cyclops 部署 S3 桶

独眼巨人模板其实只是任何人都可以创建的Helm图表,并通过模板标签页导入到独眼巨人中。你可以在这里找到这个模板,并用它来创建你自己的界面 &#128516;

这里你可以配置你的bucket

  • 覆盖存储桶名称 - 默认情况下,您的 AWS 存储桶将使用模块名称,但您可以在这里为存储桶指定不同的名称
  • 选择您的存储桶的使用情况 - 选择您的存储桶的使用情况

  • 测试 - 所有测试对象将在 3 天后自动删除,非常适合测试,测试完成后将自动删除

  • 生产 - 对象的旧版本将在 30 天后删除,保留最近的三个版本

  • 网站 - 启用静态网站服务

独眼巨人的S3存储桶:

一旦你部署了模块,你将在 Cyclops 控制台中看到一个新的 S3 存储桶自定义资源对象。同时,你也可以登录你的 AWS 账户查看新创建的存储桶。

AWS bucket 测试图

因为上面的桶是用测试类型创建的,你创建的桶也有类似的生命周期规则,如下所示。

AWS 生产桶

你现在可以回到你的Cyclops控制台,并编辑你在创建S3桶时使用的模块。将桶的使用场景改为生产环境,并查看你的桶的生命周期规则。你可以看到现在这条规则被命名为expire-prod,如果你核对它的配置信息,你会发现它定义了一个完全不同的生命周期,而你之前从未需要关注过,是别人已经帮你设置好了。

Cyclops 编辑 S3 桶

把应用和云资源结合起来

我们可以将它们一起部署,因为我们的云资源定义方式与在 Kubernetes 中运行的应用程序定义方式相同。

确实,有些云资源(如VPC或子网)不应作为应用的一部分进行部署,但如果谈到存储或负载均衡,这可能会极大地提升开发者的效率,让他们在部署他们的应用时无需过多考虑资源配置和基础设施。

让我们假设我们有一个依赖 S3 存储桶的应用,并且你希望一起部署和管理这个应用及它的 S3 存储桶。就像你之前创建 S3 存储桶一样,你可以选择 app-with-s3-bucket 模板,并在同一地方配置你的应用和 S3 存储桶。

用S3桶部署Cyclops应用

这个模板也可以在这里找到,链接如下:here。

你现在可以随意玩转你的应用以及你的存储桶配置文件,但重要的是,都可以从一个地方进行统一管理。无论你的资源是云服务还是Kubernetes部署,现在所有资源的变更都是原子性的,并且你可以一起发布应用及其依赖

定制云平台

通过上面的例子,你可以看到Kubernetes的灵活性有多强。利用Kubernetes及其无数的控制器,你可以控制你的系统所需的任何资源,不论是容器还是云资源。

使用这样的配置和 Cyclops,每位工程师都能在指尖轻松掌控系统,从而通过恰当的抽象实现全面控制。

他们现在只需点击几下就可以发货所需的任何组件,同时确保不会破坏任何东西——这就是平台工程的核心所在。

如果你喜欢这篇文章或从中得到一些灵感,请记得给我们repo点个赞来支持我们 &#127775;



这篇关于基于Kubernetes的自定义AWS云平台搭建指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程