Kubernetes和詹金斯——从持续集成到持续优化

在现代组织中,持续集成和持续部署(CI / CD)不仅简化代码交付和软件部署的过程中,也发挥了重要作用,审计和优化。对于Kubernetes工作负载则检查部署配置和pod的定义,以确保他们正确范围对CPU和内存分配。过度供应在这个步骤可能导致大规模资源和基础设施的浪费,消除任何潜在的效率Kubernetes最初带到桌子上。

为了解决这个挑战,海洋的地方补充CI / CD与“连续优化”(有限公司)。海洋集群需要确保持续的资源以最有效的方式处理,简化Kubern雷竞技rabet官网etes基础设施管理,而成本降低了优化集群扩展和pod上浆。

确保舱大小符合实际需要通过持续的监控完成仓。海洋的分析提供了调整建议基于历史使用模式以及智能预测未来的工作负载需求。

结合CI / CD詹金斯等管道,海洋的建议合理精简Kubernetes豆荚,可以无缝地实现修改和优化部署需求。这样公司可以快速行动同时确保基础设施成本保持尽可能低。

让我们开始吧。

但首先,一些先决条件

我们可以继续实现之前,我们需要确保以下先决条件是:

  1. 我们发现海洋集群有一个度量服务器设置和收集了足够的信息对我们的集群利用率(通常是4天的数据)。关于如何设置海洋裁员的更多信息
  2. 我们已经生成的身份验证令牌使用的API。这里描述说明:Spotinst API令牌
  3. 为了获取信息,我们将需要调整建议现货Python SDK安装。我们将设置一个阶段我们詹金斯管道已经安装了它。

出于演示目的,我们的詹金斯管道将有四个阶段,如下面屏幕截图所示。

阶段3和4是实际大小的建议和实施集群在我们的海洋。

Jenkins和Kubernetes调整管道为了设置管道如上所述,组成我们的Jenkinsfile管道可以访问在这里。

建立我们的詹金斯管道持续优化

步骤1:设置为Python和kubectl容器模板

使用容器模板来生成适当的码头工人图像装备实现我们需要他们做不同的任务。

例如,一旦我们获取我们的python脚本从Git存储库需要一个容器配有python执行它。同样适用于当我们将不得不与Kubernetes部署使用“kubectl”和码头工人容器模板帮助我们构建和运行自己的码头工人的形象。

podTemplate(容器:[containerTemplate(名字:“码头工人”,形象:“码头工人”,命令:“猫”,ttyEnabled: true), containerTemplate(名称:python,形象:python,命令:“猫”,ttyEnabled: true), containerTemplate(名字:“kubectl”形象:“lachlanevenson / k8s-kubectl: v1.8.8”,命令:“猫”,ttyEnabled: true))

第二步:设置管道阶段1和2 -抓取我们的程序,从Git Dockerfile

前两个阶段的管道我们需要Git存储库包含我们的样例应用程序和Dockerfile使用詹金斯Git插件。

在第二阶段,我们可以构建我们的码头工人形象使用应用程序和Dockerfile阶段1中下载。

这两个阶段的目的是为了证明一个通用的连续输送管道。

步骤3:设置管道阶段阶段3 -海洋裁员

这一步的目的是下载和运行脚本,它按顺序使用。io SDK海洋集群的调整建议。

最后建议转换为kubectl输出,最终我们可以喂下一阶段的管道。

阶段(得到海洋裁员){容器(python){尝试{git url: https://github.com/nironkoren/spotinst-sdk-python.git的分支:‘主人’sh pip3 - u请求PyYaml安装的sh的wget https://raw.githubusercontent.com/nironkoren/flask-http/master/get_sizing.py / /生成的kubectl cmd基于调整建议cmd_output = sh (python脚本:('。/ get_sizing。py - d <部署> - r <比率>“+”- t < API_TOKEN >“+”——< ACCOUNT_ID > - o - n < OCEAN_ID > <名称>”),returnStdout:真实).trim env ()。CMD_OUT = cmd_output}捕捉(exc) {println未能从海洋获取建议》(exc)}}}

如上所示,为了执行我们的脚本,我们必须提供一些参数,及其功能如下:

参数 描述
- d,部署 我们的名字Kubernetes部署
- r,比 部署资源请求之间的比例和规模优化资源的建议
- t, -auth_token Spotinst SDK API令牌
——,-account_id 我们的ID Spotinst账户
- o, -ocean_id 集群ID的海洋
- n,名称空间 我们Kubernetes集群的名称空间

验证SDK客户机可以通过三种方式,我们可以使用“auth_token”和“account_id”参数上面所提到的,或者我们可以使用一个替代方法,比如Spotinst概要文件或使用环境变量。看到更多的细节

“部署”的参数,使用“名称空间”,和“ocean_id”得到我们所期望的数据部署在集群。

设置条件调整控制

“比”参数指定当前部署之间的比例大小和推荐的大小,我们愿意行动。例如,如果我们的部署设置4 gb的内存资源请求的但是我们的调整建议使用1 gb的内存,我们可以设置4 - r的标志,这意味着如果我们的部署是超大号的四倍,也只有这样,才能调整。或者如果我们要将我们的“比”参数设置为2或3,它不会继续调整我们的部署。

步骤4 - 4 -设置管道阶段部署建议

最后的阶段是当我们在部署实施裁员建议使用“kubectl”。

在下面的示例中,詹金斯被安装使用上面我们Kubernetes部署,因此配置适当的Kubernetes插件,所以我们可以指定以下参数发送一个命令回到我们Kubernetes部署。

“CMD_OUT”,我们在上一步中创建的环境变量,包含kubectl命令生成与调整建议一个字符串,因此用于部署在这个阶段。

kubectl参数:

  • 令牌——“无记名API服务器身份验证令牌”
  • 证书颁发机构——“证书颁发机构的证书文件之路”
  • 服务器——“Kubernetes API服务器的地址和端口”

来源:https://kubernetes.io/docs/reference/kubectl/kubectl/选项

阶段(k8部署){容器(kubectl){如果(CMD_OUT) {{sh脚本:(“$ {CMD_OUT}”+“美元——令牌(cat /var/run/secrets/kubernetes.io / serviceaccount /令牌)“+”,证书颁发机构/var/run/secrets/kubernetes.io / serviceaccount / ca。crt“+”——服务器https://kubernetes.default.svc.cluster.local '))}捕捉(exc) {println“未能设定部署资源”扔(exc)}}其他{println“不需要调整”}}}雷竞技rabet官网

总结

通过使用这种检查在我们正在进行自动化詹金斯管道我们能够监控如果我们的集群是正常的调整建议,确保我们尽可能有效地使用个vCPU和记忆,在必要时,无缝地实现任何修改部署需求。

在本系列的下一篇博客中,自动调整与Kubernetes承认控制器,将扩大基础工作与任何CI / CD的工具。

下载我们的免费指导”,自动定量和6其他Kubernetes自动化挑战”