创建 monorepo Kubernetes 基础设施的良好做法是什么?

pie*_*e6k 7 orchestration kubernetes microservices

我真的很难尝试使用 k8s 构建工作流程,其中包括:

  • 拥有多个微服务的monorepo
  • 一个命令来启动所有这些并能够开始本地开发
  • docker-like在另一台没有安装 k8s 的机器上安装整个基础设施的经验(用于本地开发) 1. git pull2. k8s start, 3. 等待, 4.ping localhost:3000将是这里的目标。
  • 能够将我的本地文件中的更改立即应用于服务而无需重建图像等(我猜类似于 docker 卷)
  • 具有模块化配置文件,其中有一个用于基础结构的根配置文件,该文件引用服务较小的配置

我正在努力寻找一些关于构建此类系统的示例或指南,但没有运气。

我是否遗漏了一些关于 k8s 设计的重要内容,这让我寻找 k8s 不太可能的东西?

为什么我认为这样的问题不应该被关闭

  • 有许多没有开发运营经验的开发人员在微服务方面尽力而为,我发现缺乏关于此类(并且非常常见)用例的可靠指南

  • 对于 k8s,没有关于快速反馈循环的平滑本地开发体验的明确指南。

  • 虽然它是基于意见的,但我发现这个问题更侧重于导致这种开发人员体验的一般方向,而不是确切的步骤。

    我什至不确定(我试图找出)它是否被认为是专业开发运营的好做法。我不知道管理多大的基础设施(数十或数百个微服务)。是否可以在一台机器上运行它们?是想要的吗?

kic*_*hik 1

我构建了类似于您之前要求的东西。我hyperkube手动运行,这几乎不推荐,但为本地开发提供了技巧。就我而言,这一切都在 Vagrant 中运行,以实现团队统一。

docker run -d --name=kubelet \
        --volume=/:/rootfs:ro \
        --volume=/sys:/sys:ro \
        --volume=/var/lib/docker/:/var/lib/docker:rw \
        --volume=/var/lib/kubelet/:/var/lib/kubelet:slave \
        --volume=/var/run:/var/run:rw \
        --net=host \
        --pid=host \
        --privileged \
        --restart=always \
        gcr.io/google_containers/hyperkube-${ARCH}:${K8S_VERSION} \
        /hyperkube kubelet \
            --containerized \
            --hostname-override=127.0.0.1 \
            --api-servers=http://localhost:8080 \
            --cluster-dns=10.0.0.10 \
            --cluster-domain=cluster.local \
            --allow-privileged --v=2 \
            --image-gc-high-threshold=50 \
            --image-gc-low-threshold=40 \
            --kube-api-qps 1000 --kube-api-burst=2000 \
            --pod-manifest-path=/etc/kubernetes/manifests
Run Code Online (Sandbox Code Playgroud)

除此之外,我还构建了使用 YAML胡子模板的脚本,这些模板知道其部署位置。当在本地部署时,每个 Pod 都将源代码安装为卷,以便我可以自动重新加载它。

由于所有脚本都基于胡子模板,因此相同的脚本能够部署到生产中。我什至有多个配置文件,可以为不同的环境应用不同的模板值。

构建脚本将准备 YAML 模板,构建需要构建的任何映像,应用于 Kubernetes,然后从那里自动重新加载。这是一种半良好的用户体验。我的主要问题是文件更新缓慢,因为它是在 Vagrant 的 Docker 中运行的。没有一种文件共享类型可以为客户端和服务器提供良好的性能允许文件监视(inotify不适用于大多数文件共享类型,并且 NFS/SMB 对于 IDE 来说速度很慢)。

这是我第一次体验 Kubernetes,所以我怀疑这是否是“推荐的方式”,但它确实有效。涉及很多脚本,因此今天可能有更好的方法来做到这一点。