用于开发环境的 Kubernetes

Kubernetes for a Development Environment

美好的一天

我们有一个由 6 个虚拟机组成的开发环境。目前我们在 VirtualBox 中使用 Vagrant 和 Ansible。 可以想象,托管此环境是一场维护噩梦,尤其是随着 software/OS 版本的变化。更不用说开发人员机器的资源负载了。

我们已经开始将一些虚拟机迁移到 docker。但这本身会带来编排、正确配置、通信等方面的问题。这让我想到了 Kubernetes。

有人能提供一些关于 Kubernetes 是否适合这项工作的推理工具吗? 那就是管理和编排 'development' docker 个容器。

谢谢

这是一个相当复杂的话题,如果值得使用 k8s 作为本地开发环境,则必须考虑很多事情。特别是当我想让我的本地开发环境非常接近生产环境时,我使用它 运行ning 在 Kubernetes 上。这有助于避免许多配置错误。

在我看来,Kubernetes(k8s) 将为您提供开发环境所需的一切。

它为您提供了很大的灵活性,并且可以自行进行很多配置。几个例子:

  • 一种将新版本部署到本地 kubernetes 堆栈的简单方法

您为每个应用程序模块准备了 k8s 复制控制器文件(请记住它们需要是无状态模块) 在复制控制器中,您指定 docker 映像,仅此而已。 使用这种方法,您可以将新的 docker 图像推送到本地 docker_registry,然后使用 kubectl 控制应用程序的生命周期。

  • 扩展应用程序模块的简便方法

例如:

kubectl scale rc your_application_service --replicas=3

这样 k8s 将检查有多少 pods 你有 运行ning 用于你的服务,如果它识别出数量小于副本值,它将创建新的副本以满足副本数.

这是一个没完没了的话题,我想到了很多其他的事情,但我建议您尝试一下。

有一个 https://github.com/kubernetes/kubernetes/blob/master/docs/devel/developer-guides/vagrant.md 项目用于 运行 在 vagrant 中连接 k8s 集群。

当然你必须记住,如果你有很多服务,所有这些服务都必须推送到本地存储库,并且 运行 通过 k8s。这将需要一些时间,但如果您使用一些自定义脚本自动进行本地部署,您将不会后悔。

正如wsl之前提到的,这是一个相当复杂的话题。但我现在也在这样做。那么让我为您总结一些事情:

使用 Kubernetes (k8s),您将编排您的 SaaS 应用程序。在最好的情况下,它是一个云原生应用程序。云原生应用的 properties/requirements 是由云原生计算基金会(CNCF)制定的,该基金会基本上是围绕 k8s 形成的,在 Google 将其捐赠给 Linux 基金会之后。 因此,properties/requirements 的云原生应用程序是:容器封装、动态管理和面向微服务 (cncf.io/about/charter)。如果您的应用程序是基于微服务的并且每个服务都有一个单独的容器,那么您将从 k8s 中受益最多。

有了基于微服务的应用,每一个服务都可以独立开发。开发者只需要遵循 12Factor 方法 (12factor.net) 例如(使用 env var 而不是硬编码的 IP 地址等)。

在下一步中,开发人员为服务构建容器并将其推送到容器注册表。对于本地开发环境,您可能还需要 运行 集群内的容器注册表,以便开发人员可以在本地推送和测试他的代码。

然后你就可以定义你的 k8s 复制控制器、服务、PetSets 等,使用端口、端口映射、环境变量、容器镜像......并在里面创建和 运行群集。

k8s 文档推荐 Minikube 用于本地 运行ning k8s (kubernetes.io/docs/getting-started-guides/minikube/)。使用 Minikube,您可以获得 DNS、NodePorts、ConfigMaps 和 Secrets 等功能 仪表板。 但是我选择多节点 CoreOS Kubernetes with Vagrant Cluster 作为我的开发环境,就像博客中提到的 Puja Abbassi "Finding The Right Local Kubernetes Development Environment" (https://deis.com/blog/2016/local-kubernetes-development-environment/),它更接近我的生产环境 (12Factor: 10 - Dev/prod奇偶校验)。 使用 Vagrant Environment,您可以获得以下功能:

  • 使用法兰绒联网
  • 使用 etcd 进行服务发现
  • 一组带有 SkyDNS 的容器的 DNS 名称
  • 内部负载平衡

如果您想知道一切如何工作,请查看此 Github 存储库 github。com/coreos/coreos-kubernetes/tree/master/multi-node(流浪者和通用文件夹)。

因此您必须问问自己,您或您的开发人员是否真的需要在本地 运行 一个完整的 "cloud environment"。在许多情况下,开发人员可以独立开发服务(基于微服务和容器)。

但有时需要在您的本地计算机上拥有多个或所有服务 运行 作为开发环境。