Jenkins 是否有理由在kubernetes集群上运行CI构建?

Jenkins 是否有理由在kubernetes集群上运行CI构建?,jenkins,kubernetes,continuous-integration,devops,Jenkins,Kubernetes,Continuous Integration,Devops,我对kubernetes了解不多,但据我所知,它是一个使您能够控制和管理容器化应用程序的系统。因此,一般来说,我们从kubernetes获得的好处的本质是能够“告诉”kubernetes我们想要运行哪些容器,其中有多少个,在哪些机器上,以及其他细节,kubernetes会为我们做这些。对吗 如果是这样,我就看不到使用kubernetes吊舱运行CI管道的好处,因为我知道有些人会这么做。假设您将构建工具安装在Docker容器上,而不是安装在特定的机器上,这很好-您可以在构建过程中使用这些容器,为什

我对kubernetes了解不多,但据我所知,它是一个使您能够控制和管理容器化应用程序的系统。因此,一般来说,我们从kubernetes获得的好处的本质是能够“告诉”kubernetes我们想要运行哪些容器,其中有多少个,在哪些机器上,以及其他细节,kubernetes会为我们做这些。对吗

如果是这样,我就看不到使用kubernetes吊舱运行CI管道的好处,因为我知道有些人会这么做。假设您将构建工具安装在Docker容器上,而不是安装在特定的机器上,这很好-您可以在构建过程中使用这些容器,为什么是kubernetes?是否有任何性能提升或类似的情况


欣赏一些见解。

一个重要的细节是,您不会告诉Kubernetes给定pod应该在哪些节点上运行;它自己选择,如果集群资源不足,在许多情况下,它实际上可以自己分配更多节点(通过集群自动缩放器)

因此,如果您的CI系统相当繁忙,并且所有内容都使用所有容器,那么将单个构建作业作为Kubernetes作业运行可能更有意义。如果您有100个同时启动的构建,那么集群可能会为自己提供更多的硬件,构建队列将更快地清除。特别是如果您将Kubernetes用于其他任务,这可以为您节省维护需要单独更新的CI系统工作人员专用池的管理工作,这些工作人员在大量构建到达之前将处于空闲状态


Kubernetes的安全设置也大大优于Docker。假设您的CI系统需要作为构建的一部分启动容器。在Kubernetes中,它可以在服务帐户下运行,并被授予在特定命名空间中创建和删除部署的权限,而无需其他权限。在Docker中,标准方法是让您的CI系统访问主机的Docker套接字,但这很容易被利用来接管主机。

一个重要的细节是,您不告诉Kubernetes给定pod应该在哪些节点上运行;它自己选择,如果集群资源不足,在许多情况下,它实际上可以自己分配更多节点(通过集群自动缩放器)

因此,如果您的CI系统相当繁忙,并且所有内容都使用所有容器,那么将单个构建作业作为Kubernetes作业运行可能更有意义。如果您有100个同时启动的构建,那么集群可能会为自己提供更多的硬件,构建队列将更快地清除。特别是如果您将Kubernetes用于其他任务,这可以为您节省维护需要单独更新的CI系统工作人员专用池的管理工作,这些工作人员在大量构建到达之前将处于空闲状态


Kubernetes的安全设置也大大优于Docker。假设您的CI系统需要作为构建的一部分启动容器。在Kubernetes中,它可以在服务帐户下运行,并被授予在特定命名空间中创建和删除部署的权限,而无需其他权限。在Docker中,标准方法是让您的CI系统访问主机的Docker套接字,但这很容易被利用来接管主机。

强烈建议您充分了解它能做什么和不能做什么

通常,容器与编排工具相结合可以更好地管理您的机器和服务。它可以显著提高应用程序的可靠性,并减少在DevOps上花费的时间和资源

值得注意的一些功能包括:

  • 横向基础架构扩展:可以轻松添加或删除新服务器

  • 自动缩放:根据CPU利用率或其他应用程序提供的指标自动更改正在运行的容器的数量

  • 手动缩放:通过命令或界面手动缩放正在运行的容器的数量

  • 复制控制器:复制控制器确保您的群集有等量的POD在运行。如果POD过多,复制控制器将终止额外的POD。如果数量太少,则会启动更多的豆荚

  • 运行状况检查和自我修复:Kubernetes可以检查节点和容器的运行状况,确保应用程序不会出现任何故障。Kubernetes还提供自愈和自动更换功能,因此您无需担心容器或吊舱是否出现故障

  • 流量路由和负载平衡:流量路由将请求发送到适当的容器。Kubernetes还配备了内置负载平衡器,因此您可以平衡资源,以响应停机或高流量时期

  • 自动卷展和回滚:Kubernetes在监控容器运行状况的同时,无需停机即可处理新版本或更新的卷展。如果卷展不顺利,它会自动回滚

  • 金丝雀部署:金丝雀部署使您能够在生产环境中与上一版本并行测试新部署

但是,您也应该知道:

Kubernetes不是一个传统的、包罗万象的PaaS(平台) 服务)系统。因为Kubernetes在容器级别上运行 而不是在硬件级别,它提供了一些 PaaS产品共有的适用功能,如部署、, 扩展、负载平衡,并允许用户集成日志, 监控和警报解决方案。然而,库伯内特斯并非如此 这些默认解决方案是opt