运行 CI 是建立在 kubernetes 集群上的原因吗?
Is there a reason running CI builds on kubernetes cluster?
我对kubernetes知之甚少,但据我所知,它是一个可以让你控制和管理容器化应用程序的系统。所以,一般来说,我们从 kubernetes 获得的好处的本质是能够“告诉”kubernetes 我们想要什么容器运行,其中有多少,在哪些机器上,以及其他细节,以及 kubernetes 将采用关心为我们做这件事。对吗?
如果是这样,我只是看不到使用 kubernetes pod 的 运行 CI 管道的好处,据我所知有些人这样做。假设您将构建工具安装在 Docker 个容器上,而不是将它们安装在特定机器上,这很好 - 您可以在构建过程中使用这些容器,为什么是 kubernetes?是否有任何性能提升或类似的东西?
欣赏一些见解。
一个重要的细节是您没有告诉 Kubernetes 给定的 pod 应该 运行 在哪些节点上;它会自行选择,如果集群资源不足,在许多情况下,它实际上可以自行分配更多节点(通过 集群自动缩放器)。
因此,如果您的 CI 系统相当繁忙,并且所有内容都使用所有容器,那么 运行 将单个构建作业作为 Kubernetes 作业可能更有意义。如果您有 100 个同时启动的构建,则集群有可能为自己提供更多硬件,并且构建队列将更快地清除。特别是如果您将 Kubernetes 用于其他任务,这可以节省您与维护 CI-system worker 的专用池相同的管理工作,这些 worker 需要单独更新并且在大量构建到达之前大部分时间都处于空闲状态.
Kubernetes 的安全设置也明显优于 Docker。假设您的 CI 系统需要在构建过程中启动容器。在 Kubernetes 中,它可以 运行 在 服务帐户 下,并被授予在特定命名空间中创建和删除部署的权限,仅此而已。在 Docker 中,标准方法是让您的 CI 系统访问主机的 Docker 套接字,但这很容易被利用来接管主机。
强烈建议深入了解 what Kubernetes is 及其能做什么和不能做什么。
通常,容器与编排工具相结合可以更好地管理您的机器和服务。它可以显着提高应用程序的可靠性并减少在 DevOps 上花费的时间和资源。
一些值得注意的功能是:
水平基础架构扩展:可以轻松添加或删除新服务器。
Auto-scaling:根据 CPU 利用率或其他应用程序提供的,自动更改 运行ning 容器的数量指标。
手动伸缩:通过命令或界面手动伸缩运行ning容器数量
复制控制器:复制控制器确保你的集群有等量的pods 运行ning。如果 pods 太多,复制控制器会终止多余的 pods。太少就开始多pods.
健康检查和自我修复:Kubernetes 可以检查节点和容器的健康状况,确保您的应用程序不会 运行 出现任何故障. Kubernetes 还提供自我修复和自动替换功能,因此您无需担心容器或 Pod 出现故障。
流量路由和负载均衡:流量路由将请求发送到合适的容器。 Kubernetes 还带有内置负载平衡器,因此您可以平衡资源以响应中断或高流量时期。
自动推出和回滚:Kubernetes 无需停机即可处理新版本或更新的推出,同时监控容器的健康状况。如果推出不顺利,它会自动回滚。
Canary 部署:Canary 部署使您能够在生产环境中与以前的版本并行测试新部署。
不过你也应该知道what Kubernetes is not:
Kubernetes is not a traditional, all-inclusive PaaS (Platform as a
Service) system. Since Kubernetes operates at the container level
rather than at the hardware level, it provides some generally
applicable features common to PaaS offerings, such as deployment,
scaling, load balancing, and lets users integrate their logging,
monitoring, and alerting solutions. However, Kubernetes is not
monolithic, and these default solutions are optional and pluggable.
Kubernetes provides the building blocks for building developer
platforms, but preserves user choice and flexibility where it is
important.
特别是在您的用例中请注意 Kubernetes:
Does not deploy source code and does not build your application.
Continuous Integration, Delivery, and Deployment (CI/CD) workflows are
determined by organization cultures and preferences as well as
technical requirements.
决定权在您,但牢记以上主要概念将有助于您做出决定。
我对kubernetes知之甚少,但据我所知,它是一个可以让你控制和管理容器化应用程序的系统。所以,一般来说,我们从 kubernetes 获得的好处的本质是能够“告诉”kubernetes 我们想要什么容器运行,其中有多少,在哪些机器上,以及其他细节,以及 kubernetes 将采用关心为我们做这件事。对吗?
如果是这样,我只是看不到使用 kubernetes pod 的 运行 CI 管道的好处,据我所知有些人这样做。假设您将构建工具安装在 Docker 个容器上,而不是将它们安装在特定机器上,这很好 - 您可以在构建过程中使用这些容器,为什么是 kubernetes?是否有任何性能提升或类似的东西?
欣赏一些见解。
一个重要的细节是您没有告诉 Kubernetes 给定的 pod 应该 运行 在哪些节点上;它会自行选择,如果集群资源不足,在许多情况下,它实际上可以自行分配更多节点(通过 集群自动缩放器)。
因此,如果您的 CI 系统相当繁忙,并且所有内容都使用所有容器,那么 运行 将单个构建作业作为 Kubernetes 作业可能更有意义。如果您有 100 个同时启动的构建,则集群有可能为自己提供更多硬件,并且构建队列将更快地清除。特别是如果您将 Kubernetes 用于其他任务,这可以节省您与维护 CI-system worker 的专用池相同的管理工作,这些 worker 需要单独更新并且在大量构建到达之前大部分时间都处于空闲状态.
Kubernetes 的安全设置也明显优于 Docker。假设您的 CI 系统需要在构建过程中启动容器。在 Kubernetes 中,它可以 运行 在 服务帐户 下,并被授予在特定命名空间中创建和删除部署的权限,仅此而已。在 Docker 中,标准方法是让您的 CI 系统访问主机的 Docker 套接字,但这很容易被利用来接管主机。
强烈建议深入了解 what Kubernetes is 及其能做什么和不能做什么。
通常,容器与编排工具相结合可以更好地管理您的机器和服务。它可以显着提高应用程序的可靠性并减少在 DevOps 上花费的时间和资源。
一些值得注意的功能是:
水平基础架构扩展:可以轻松添加或删除新服务器。
Auto-scaling:根据 CPU 利用率或其他应用程序提供的,自动更改 运行ning 容器的数量指标。
手动伸缩:通过命令或界面手动伸缩运行ning容器数量
复制控制器:复制控制器确保你的集群有等量的pods 运行ning。如果 pods 太多,复制控制器会终止多余的 pods。太少就开始多pods.
健康检查和自我修复:Kubernetes 可以检查节点和容器的健康状况,确保您的应用程序不会 运行 出现任何故障. Kubernetes 还提供自我修复和自动替换功能,因此您无需担心容器或 Pod 出现故障。
流量路由和负载均衡:流量路由将请求发送到合适的容器。 Kubernetes 还带有内置负载平衡器,因此您可以平衡资源以响应中断或高流量时期。
自动推出和回滚:Kubernetes 无需停机即可处理新版本或更新的推出,同时监控容器的健康状况。如果推出不顺利,它会自动回滚。
Canary 部署:Canary 部署使您能够在生产环境中与以前的版本并行测试新部署。
不过你也应该知道what Kubernetes is not:
Kubernetes is not a traditional, all-inclusive PaaS (Platform as a Service) system. Since Kubernetes operates at the container level rather than at the hardware level, it provides some generally applicable features common to PaaS offerings, such as deployment, scaling, load balancing, and lets users integrate their logging, monitoring, and alerting solutions. However, Kubernetes is not monolithic, and these default solutions are optional and pluggable. Kubernetes provides the building blocks for building developer platforms, but preserves user choice and flexibility where it is important.
特别是在您的用例中请注意 Kubernetes:
Does not deploy source code and does not build your application. Continuous Integration, Delivery, and Deployment (CI/CD) workflows are determined by organization cultures and preferences as well as technical requirements.
决定权在您,但牢记以上主要概念将有助于您做出决定。