如何制作Kubernetes群集的本地(开发人员';s)副本

如何制作Kubernetes群集的本地(开发人员';s)副本,kubernetes,Kubernetes,作为一名开发人员,我希望能够创建一个“沙箱”版本的开发Kubernetes集群,我可以在我的机器上运行,这样我就可以进行更改和测试,而不必冒关闭其他开发人员的微服务的风险,这些开发人员通过代码调用我的微服务。除了在我的机器上手动安装远程集群的“基本必需品”,还有更方便的方法吗?有什么东西可以让我们定义一个“基本集群”,它可以轻松地分发给多个开发人员(在概念上有点像Docker映像或运行集群的VM)?我认为您和您的一些同事可以使用相同的k8s集群。 你们每个人都将只在一个名称空间中使用资源(POD

作为一名开发人员,我希望能够创建一个“沙箱”版本的开发Kubernetes集群,我可以在我的机器上运行,这样我就可以进行更改和测试,而不必冒关闭其他开发人员的微服务的风险,这些开发人员通过代码调用我的微服务。除了在我的机器上手动安装远程集群的“基本必需品”,还有更方便的方法吗?有什么东西可以让我们定义一个“基本集群”,它可以轻松地分发给多个开发人员(在概念上有点像Docker映像或运行集群的VM)?

我认为您和您的一些同事可以使用相同的k8s集群。 你们每个人都将只在一个名称空间中使用资源(POD、svc等等)。 为此,您可以将RBAC用于
Role
RoleBinding
下面是k8s如何管理集群资源的示例

  • 角色:
  • 角色绑定:


我希望这对你有帮助

这取决于“基本集群”的实际含义。我猜您希望它是预配置的,并且可能已经包含了一些在其上运行的工作负载。有不同的解决方案可供选择,最简单的是。它非常简单,允许您在本地计算机上设置简单的单节点但功能齐全的Kubernetes群集。它不需要太多资源,所以每个开发人员都可以在他的笔记本电脑上设置这样的测试环境。默认情况下,它会在虚拟机上设置Kubernetes群集(但是可以在主机系统上设置),是的,您可以创建此类虚拟机的快照,并在团队中轻松分发

与从头开始构建K8s集群相比,使用K8s集群的设置要复杂一些,但仍然相当简单(通常称为“艰难之路”)。由于它设置了多节点集群(您需要至少设置一个主节点和一个工作节点),因此它需要比Minikube
更多的资源。当K8s集群已经在虚拟机上设置和配置,并且在虚拟机上部署了一些工作负载时,您仍然可以创建此类虚拟机的快照。您可以轻松分发此类磁盘映像。它可以是VDI、VMDK或您可以在虚拟机监控程序上使用的任何东西

在我看来,这是准备和分发此类环境副本的最简单方法,但也有多种选择,如编写ansible playbook自动化集群设置,并与Vagrant等工具一起使用,但我认为这绝对是一项更繁琐的任务

如果您更愿意考虑克隆现有的Kubernetes集群,您也可以通过许多不同的方式来实现。这一切都取决于您的环境和您的特殊需求


如果您主要关心复制生产k8s集群内容(其工作负载)的能力,那么有一个非常简单的解决方案,即etcd快照。你可以阅读更多关于它们的内容。它使您能够对整个k8s群集工作负载进行快速备份,并在以后的不同k8s实例上进行恢复。当您使用内置k8s安装时,这是理想的解决方案。不幸的是,像GCP GKE或AWS EKS这样的托管云解决方案并没有给您这样的可能性,因为您无法直接访问主节点文件系统。

我认为这更接近我的期望。我们的集群有多个运行的微服务。它们之间存在着相互依赖关系,它们都依赖于Kafka/Zookeeper,以及处理日志记录的服务、处理配置详细信息的服务和管理“机密”的服务。如果有一个“基本”集群的本地副本,不同的团队或个人开发人员可以使用它进行早期开发/测试/调试,而无需提交构建管道,等待它到达主集群,然后进行远程测试,那就太好了。我想到了另一个解决方案。请看我最后一次编辑。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
apiVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read pods in the "default" namespace.
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io