以相同的方式设置 Kubernetes 集群以进行本地开发、测试和部署



我对 Kubernetes 很陌生,所以很抱歉我的理解差距和可能不正确的措辞。 我正在本地MacBook Pro上进行开发,这在某种程度上资源有限。我的实际有效负载是一个数据库,它已经在 Docker 容器中运行,但显然需要某种持久存储。 各个容器还需要通过网络与每个容器通信,其中一些容器需要一个通往外部世界的通道(端口开放)。 我想为开发和测试目的设置一个 Kubernetes 集群,以后可以轻松地将其部署到裸机服务器或云供应商 - Google 和 AWS。

从到目前为止的阅读来看,我似乎可以使用minikube并在我已经运行的VirtualBox上编排该集群。 然后如何映射到云中的实际部署? 我需要哪些额外的工具来运行它,特别是在持久存储和网络方面? 它是否可以轻松映射到云? 您会推荐哪种配置管理软件来维护所有这些配置?

一个非常简短的回答是很难正确地做到这一点。

我所知道的最好的选择之一是LinuxKit,它允许您构建相同的映像,您可以在任何流行的云提供商或您自己的数据中心或桌面虚拟机管理程序中运行。事实上,这就是 Docker for Mac 的基础。


免责声明:我是 LinuxKit 的贡献者之一。

一般来说,无论你使用哪种方法启动集群,你都会得到或多或少相同的 kubernetes。虽然,与云相比,其他部署通常缺乏云默认提供的 kubes 内置云提供商。它相关的一些非常重要的功能包括对负载均衡器类型服务的开箱即用支持或自动 PersistentVolume 配置。

如果您可以不拥有它们,或者为您的开发/测试环境额外配置它们,那么您应该没问题。

在PVC/PV范围内,缺少自动PV配置器(除非您设置类似ie的东西。GlusterFS 和 Heketi 支持这一点)意味着您必须在开发/测试集群上手动配置每个 PV,这与云上自动发生的能力相反。

此外,在开始时,您的开发/测试设置和生产之间应该存在一些细微差异,因此您可能真的想从您部署到 kubernetes 的第一天起就调查清单模板和管理解决方案,例如helm。我知道如果我在开始做 kube 时自己这样做,我会省去很多麻烦。

专注于您对数据库的询问,我认为您有两种选择(假设云仍然是您的选择):

  • 使用 Docker 数据库映像并装载卷
  • 在出现aws时使用 RDS 实例

我相信在数据库的情况下,通常不建议使用卷的情况。

我建议你做的是(一旦你掌握了一些基本概念,主要是Services,到

  • 创建 RDS 实例和所需的数据库
  • 将此 RDS 实例公开为Service作为类型ExternalName

我一直在做以下事情,到目前为止正在工作:

apiVersion: v1
kind: Service
metadata:
name: my-database-service
namespace: some-namespece
spec:
type: ExternalName
externalName: <my-rds-endpoint>

之后,您其余k8s服务可以通过my-database-service访问此服务

我认为这种方法在数据库方面更加一致,并节省了卷的喧嚣。

话虽如此,我承认"选择这个如果你去云"或"那个如果你去本地"的指导方针还不太清楚。

到目前为止,我的经验表明:

  • 最有可能的是 On Prem(不仅仅是您的本地主机)要走的路是 Kubeadm
  • 到目前为止,aws我一直在与 kops 有愉快的经历。
  • 还有Canonical解决方案,它似乎使用堆栈(conjure-up/juju)来帮助部署他们自己稍微修改过的Kubernetes版本,他们声称该版本适合云/本地(根本没有尝试过)。

最新更新